2013-03-21 235 views
2

对不起,如果这是一个常见问题,但我会发疯。 我开始使用JSP开发,使用在Ubuntu服务器上运行的Tomcat。我试图运行我的第一个“Hello World”servlet,但没有成功。Tomcat servlet映射错误404

我有服务器上的以下的东西:

  • webapps目录为:/var/lib/tomcat6/webapps/
  • webapps我创建了上下文根hello/目录
  • hello/包含index.htmlWEB-INF/
  • WEB-INF包含web.xmlclasses/HelloServlet.class

这是index.html

<html> 
     <body> 
       Click to request the HelloServlet. 

       <form action = "/hello/helloworld" method = "get" > 
         <input type = "submit" value = "REQUEST" /> 
       </form> 
     </body> 
</html> 

这是WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

     <servlet> 
       <servlet-name>test</servlet-name> 
       <servlet-class>HelloServlet</servlet-class> 
     </servlet> 

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

</web-app> 

终于这是HelloServlet源文件:

// HelloServlet.java, a simple Hello World servlet. 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class HelloServlet extends HttpServlet 
{ 
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
     { 
       response.setContentType("text/html"); 
       PrintWriter outputStream = response.getWriter(); 

       outputStream.println("<html>"); 

       outputStream.println("<head>"); 
       outputStream.println("<title>Hello, World!</title>"); 
       outputStream.println("</head>"); 

       outputStream.println("<body>"); 
       outputStream.println("Hello, world! This is my first servlet!"); 
       outputStream.println("</body>"); 

       outputStream.println("</html>"); 

       outputStream.close(); 
     } 
} 

的问题是,仅在客户端http://localhost/hello/(即index.html页)起作用。如果我单击表单提交按钮,我会得到http 404错误(资源不可用)。

可能在servlet-mapping,表单和/或web.xml中有错误,但我真的需要帮助才能发现它。

+2

将包的名称包含在''标记前。 'org.firstservletapp.HelloServlet' – Meherzad 2013-03-21 11:47:15

回答

1

将上下文根添加到jsp操作中,下面的更改可能适用于您。

<form action = "/hello/hello/helloworld" method = "get" > 
    <input type = "submit" value = "REQUEST" /> 
</form> 
+0

不幸的不是。我总是遇到404错误。 – eang 2013-03-21 19:26:04

+1

@ital在将您的url模式更改为BalusC所说的内容之后,只用'action =“/ helloworld”'试试。 – 2013-03-22 03:00:52

4
<url-pattern>/hello/helloworld</url-pattern> 

你不应该包括在servlet的URL模式的上下文路径。它已经相对于上下文根。

摆脱它。

<url-pattern>/helloworld</url-pattern> 

无关到具体的问题,在一个servlet编写HTML代码是一个非常不好的做法。对于那个JSP应该使用。另见our own Servlets wiki page which contains sane Hello World examples

+0

不幸的不是。我总是遇到404错误。也许我会在几个时间使用JSP,谢谢你的提示。 – eang 2013-03-21 19:26:42

1

404可能导致的:

  1. 坏映射情况(可能已经包括额外的上下文回答以上或误用通配符模式)
  2. 该servlet还没有启动(见启动日志在控制台栈或者catalina文件,你会发现你的servlet失败异常跟踪)
0

我花了很多时间才弄明白这一点。在我的情况下,我得到404s,因为我不明白,Tomcat URLs区分大小写

例如为:

http://server:8080/acme.MyPackage/DoStuff 

... 404!

http://server:8080/acme.myPackage/DoStuff 

...好。

疯狂。