Wrox Home  
Search P2P Archive for: Go

  Return to Index  

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

  Return to Index