|
 |
apache_tomcat thread: HTTP Status 500 - Unable to Execute Servlet in Tomcat
Message #1 by "Robin Rembish" <rhrembish@c...> on Thu, 30 Jan 2003 14:36:52
|
|
public class Test
{
public static void main(String args[])
{
System.out.println(?Hello world!?);
}
}
*********************************
Thanks to your Java FAQ, I am able to run this simple program in the
Command Prompt. However, I?m getting a slew of error messages when
trying to execute it in Tomcat.
This program is under:
d:\Tomcat4.1\webapps\wroxp2ptest\WEB-INF\classes
In Internet Explorer, I entered:
http://localhost:8080/wroxp2ptest/servlet/Test
It is interesting that the servlet on page 350 of Beginning JSP Web
Development executes successfully in Tomcat but this basic program does
not.
************************************************
HTTP Status 500
Description: The server encountered an internal error that prevented it
from fulfilling this request.
java.lang.ClassCastException
at org.apache.catalina.core.StandardWrapper.loadServlet
(StandardWrapper.java:892)
at org.apache.catalina.core.StandardWrapper.allocate
(StandardWrapper.java:658)
at org.apache.catalina.servlets.InvokerServlet.serveRequest
(InvokerServlet.java:408)
at org.apache.catalina.servlets.InvokerServlet.doGet
(InvokerServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:260)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke
(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invo
keNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:405)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConn
ection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt
(PoolTcpEndpoint.java:508)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)
****************
Thanks for any help you can offer,
Robin
Message #2 by "Ben Galbraith" <junk@g...> on Fri, 31 Jan 2003 18:32:15
|
|
Robin,
Where to begin... :-) There are two reasons why what you're trying just
isn't going to work.
1. Your "Test" class is a proper Java application, but it is not a proper
servlet. Tomcat doesn't simply take the output from a normal Java
application and send it to a browser; rather, it takes the output of a
specially written Java application, called a servlet, and passes that to
the browser. A simple Java servlet looks like this:
===
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter pw = res.getWriter();
pw.write("Hello, world!");
pw.close();
}
}
===
2. Tomcat 4.1 no longer supports accessing servlets using the syntax:
http://[host]/[webapp]/servlet/[servlet]
You must instead configure your web.xml file with <servlet> and
<servlet-mapping> entries. An example of a proper web.xml is:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>*.myservlet</url-pattern>
</servlet-mapping>
</web-app>
This would route all requests ending in ".myservlet" to a servlet deploying
in either the WEB-INF/lib or WEB-INF/classes directory called
my.package.MyServlet.
Let me know how it goes!
Ben
|
|
 |