Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » tomcat servlets (newb)

This thread is locked; no one can reply to it. rss feed Print
tomcat servlets (newb)
le_y_mistar
Member #8,251
January 2007
avatar

I'm trying to figure out servlets but i just don't seem to be able to do it right.

My file structure is as follows

C:\Tomcat\webapps
|
--test
  |
  --WEB-INF
    |
    ---web.xml
    ---classes
       |
       ---BookServlet.java
       ---BookServlet.class

I compile BookServlet.java, no errors.
Here's the source code of BookServlet.java

1/*
2 * BookServlet.java
3 *
4 * Created on March 6, 2007, 12:00 AM
5 */
6 
7import java.io.*;
8import java.net.*;
9 
10import javax.servlet.*;
11import javax.servlet.http.*;
12 
13/**
14 *
15 * @author Administrator
16 * @version
17 *///
18public class BookServlet extends HttpServlet {
19
20 /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
21 * @param request servlet request
22 * @param response servlet response
23 */
24 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
25 throws ServletException, IOException {
26 response.setContentType("text/html;charset=UTF-8");
27 PrintWriter out = response.getWriter();
28 /* TODO output your page here
29 out.println("<html>");
30 out.println("<head>");
31 out.println("<title>Servlet BookServlet</title>");
32 out.println("</head>");
33 out.println("<body>");
34 out.println("<h1>Servlet BookServlet at " + request.getContextPath () + "</h1>");
35 out.println("</body>");
36 out.println("</html>");
37 */
38 out.close();
39 }
40
41 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
42 /** Handles the HTTP <code>GET</code> method.
43 * @param request servlet request
44 * @param response servlet response
45 */
46 protected void doGet(HttpServletRequest request, HttpServletResponse response)
47 throws ServletException, IOException {
48 processRequest(request, response);
49 }
50
51 /** Handles the HTTP <code>POST</code> method.
52 * @param request servlet request
53 * @param response servlet response
54 */
55 protected void doPost(HttpServletRequest request, HttpServletResponse response)
56 throws ServletException, IOException {
57 processRequest(request, response);
58 }
59
60 /** Returns a short description of the servlet.
61 */
62 public String getServletInfo() {
63 return "Short description";
64 }
65 // </editor-fold>
66}

my web.xml

<web-app>
-
  <servlet>
<servlet-name>hello</servlet-name>
<description>This servlet ... is hello servlet</description>
<servlet-class>BookServlet</servlet-class>
</servlet>
-
  <servlet-mapping>
<servlet-name>BookServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>

Using the Tomcat Web Application Manager I start the "test" application and I get this error:

FAIL - Application at context path /test could not be started

Upon furthur investigation, i look at the log file

1Mar 6, 2007 9:01:37 AM org.apache.tomcat.util.digester.Digester endElement
2SEVERE: End event threw exception
3java.lang.reflect.InvocationTargetException
4 at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
5 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
6 at java.lang.reflect.Method.invoke(Method.java:585)
7 at org.apache.tomcat.util.IntrospectionUtils.callMethodN(IntrospectionUtils.java:930)
8 at org.apache.catalina.startup.CallMethodMultiRule.end(WebRuleSet.java:760)
9 at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
10 at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1058)
11 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
12 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1241)
13 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
14 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
15 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
16 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
17 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
18 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
19 at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
20 at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:369)
21 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1062)
22 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
23 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
24 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
25 at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1177)
26 at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
27 at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
28 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
29 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
30 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
31 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
32 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
33 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
34 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
35 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
36 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
37 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
38 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
39 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
40 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
41 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
42 at java.lang.Thread.run(Thread.java:595)
43Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name BookServlet
44 at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2381)
45 at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2361)
46 ... 39 more
47Mar 6, 2007 9:01:37 AM org.apache.catalina.startup.ContextConfig applicationWebConfig
48SEVERE: Parse error in application web.xml file at jndi:/localhost/yves/WEB-INF/web.xml
49java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name BookServlet
50 at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2726)
51 at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2752)
52 at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1061)
53 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
54 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1241)
55 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
56 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
57 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
58 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
59 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
60 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
61 at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
62 at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:369)
63 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1062)
64 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
65 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
66 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
67 at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1177)
68 at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
69 at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
70 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
71 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
72 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
73 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
74 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
75 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
76 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
77 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
78 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
79 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
80 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
81 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
82 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
83 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
84 at java.lang.Thread.run(Thread.java:595)
85Mar 6, 2007 9:01:37 AM org.apache.catalina.startup.ContextConfig applicationWebConfig
86SEVERE: Occurred at line 12 column 19
87Mar 6, 2007 9:01:37 AM org.apache.catalina.startup.ContextConfig start
88SEVERE: Marking this application unavailable due to previous error(s)
89Mar 6, 2007 9:01:37 AM org.apache.catalina.core.StandardContext start
90SEVERE: Error getConfigured
91Mar 6, 2007 9:01:37 AM org.apache.catalina.core.StandardContext start
92SEVERE: Context [/test] startup failed due to previous errors

Can anybody tell me what I'm doing wrong?

Thanks

-----------------
I'm hell of an awesome guy :)

Rampage
Member #3,035
December 2002
avatar

The contents of both tags <servlet-name> must be the same.

<servlet>
<servlet-name>hello</servlet-name>
<description>This servlet ... is hello servlet</description>
<servlet-class>BookServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

[edit]

In the <servlet> element you declare the servlet class and give it an alias (the <servlet-name>), then you declare the requests it will handle with the element <servlet-mapping> by using its alias (hello), not the class name.

-R

le_y_mistar
Member #8,251
January 2007
avatar

Rampage, I edited as you suggested

web.xml

<servlet>
<servlet-name>BookServlet</servlet-name>
<description>This servlet ... is hello servlet</description>
<servlet-class>BookServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>BookServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

1Mar 6, 2007 9:26:03 AM org.apache.tomcat.util.digester.Digester fatalError
2SEVERE: Parse Fatal Error at line 7 column 2: The markup in the document following the root element must be well-formed.
3org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
4 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
5 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
6 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
7 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
8 at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438)
9 at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(XMLDocumentScannerImpl.java:1274)
10 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
11 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
12 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
13 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
14 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
15 at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
16 at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:369)
17 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1062)
18 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
19 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
20 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
21 at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1177)
22 at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
23 at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
24 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
25 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
26 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
27 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
28 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
29 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
30 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
31 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
32 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
33 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
34 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
35 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
36 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
37 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
38 at java.lang.Thread.run(Thread.java:595)
39Mar 6, 2007 9:26:03 AM org.apache.catalina.startup.ContextConfig applicationWebConfig
40SEVERE: Parse error in application web.xml file at jndi:/localhost/yves/WEB-INF/web.xml
41org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
42 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1269)
43 at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
44 at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:369)
45 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1062)
46 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
47 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
48 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
49 at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1177)
50 at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:542)
51 at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)
52 at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
53 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
54 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
55 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
56 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
57 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
58 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
59 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
60 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
61 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
62 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
63 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
64 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
65 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
66 at java.lang.Thread.run(Thread.java:595)
67Mar 6, 2007 9:26:03 AM org.apache.catalina.startup.ContextConfig applicationWebConfig
68SEVERE: Occurred at line 7 column 2
69Mar 6, 2007 9:26:03 AM org.apache.catalina.startup.ContextConfig start
70SEVERE: Marking this application unavailable due to previous error(s)
71Mar 6, 2007 9:26:03 AM org.apache.catalina.core.StandardContext start
72SEVERE: Error getConfigured
73Mar 6, 2007 9:26:03 AM org.apache.catalina.core.StandardContext start
74SEVERE: Context [/test] startup failed due to previous errors

-----------------
I'm hell of an awesome guy :)

Rampage
Member #3,035
December 2002
avatar

I don't know if using the same name for the servlet and the class has anything to do with that, I'd use a different name.

Quote:

SEVERE: Parse Fatal Error at line 7 column 2: The markup in the document following the root element must be well-formed.
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.

You must have messed up the syntax. Could you post the whole .xml file?

-R

le_y_mistar
Member #8,251
January 2007
avatar

what i posted is the entire xml file

-----------------
I'm hell of an awesome guy :)

Inphernic
Member #1,111
March 2001

You forgot <web-app></web-app>?

le_y_mistar
Member #8,251
January 2007
avatar

thanks Infernic, now forgive my newbyness but when i run

http://localhost:8080/test/BookServlet

I get a 404

-----------------
I'm hell of an awesome guy :)

Rampage
Member #3,035
December 2002
avatar

Quote:

<url-pattern>/test</url-pattern>

The URL is: http://localhost:8080/test/test

-R

le_y_mistar
Member #8,251
January 2007
avatar

thanks for putting up with me guys, last little bit

1/*
2 * BookServlet.java
3 *
4 * Created on March 6, 2007, 12:00 AM
5 */
6 
7import java.io.*;
8import java.net.*;
9 
10import javax.servlet.*;
11import javax.servlet.http.*;
12 
13/**
14 *
15 * @author Administrator
16 * @version
17 *///
18public class BookServlet extends HttpServlet {
19
20 /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
21 * @param request servlet request
22 * @param response servlet response
23 */
24 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
25 throws ServletException, IOException {
26 response.setContentType("text/html;charset=UTF-8");
27 PrintWriter out = response.getWriter();
28 out.println("<html>");
29 out.println("<head>");
30 out.println("<title>Servlet BookServlet</title>");
31 out.println("</head>");
32 out.println("<body>");
33 out.println("<h1>Servlet BookServlet at " + request.getContextPath () + "</h1>");
34 out.println("</body>");
35 out.println("</html>");
36 out.close();
37 }
38
39 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
40 /** Handles the HTTP <code>GET</code> method.
41 * @param request servlet request
42 * @param response servlet response
43 */
44 protected void doGet(HttpServletRequest request, HttpServletResponse response)
45 throws ServletException, IOException {
46 processRequest(request, response);
47 }
48
49 /** Handles the HTTP <code>POST</code> method.
50 * @param request servlet request
51 * @param response servlet response
52 */
53 protected void doPost(HttpServletRequest request, HttpServletResponse response)
54 throws ServletException, IOException {
55 processRequest(request, response);
56 }
57
58 /** Returns a short description of the servlet.
59 */
60 public String getServletInfo() {
61 return "Short description";
62 }
63 // </editor-fold>
64}

echoes nothing

-----------------
I'm hell of an awesome guy :)

Rampage
Member #3,035
December 2002
avatar

use out.flush() instead of out.close()

-R

le_y_mistar
Member #8,251
January 2007
avatar

you guys are awesome

thanks

crap, i didnt select the give credits option

but thanks a lot :)

-----------------
I'm hell of an awesome guy :)

Go to: