调用servlet导致HTTP状态404“请求的资源不可用”

时间:2011-02-12 15:33:45

标签: servlets http-status-code-404

我在课程register中有一个servlet p1。我有一个JSP jsp1.jsp。我运行JSP文件并看到它,但是当我尝试应用于servlet时,Tomcat显示错误:

  

HTTP状态404

     

请求的资源(/ omgtuk / Register)不可用。

的Servlet

@WebServlet("/register")

的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>omgtuk</display-name>


 <servlet>
    <description></description>
    <display-name>register</display-name>
    <servlet-name>register</servlet-name>
    <servlet-class>p1.register</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>register</servlet-name>
    <url-pattern>/register</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>jsp1.jsp</welcome-file>
  </welcome-file-list>
</web-app>

我正在使用Eclipse。

1 个答案:

答案 0 :(得分:11)

  

请求的资源(/ omgtuk / Register)不可用。

这只是意味着servlet没有侦听/Register的URL模式。换句话说,您没有@WebServlet("/Register")

在您的特定情况下,您在网址中出现了大小写错误。 URL区分大小写。您正在调用/Register,但您的servlet正在监听/register。相应地修复您的表单操作。

所以,应该是这样的:

<form action="Register">

但它应该是这样的:

<form action="register">

或者这个,如果您在无聊的时候碰巧移动JSP,这会更加强大:

<form action="${pageContext.request.contextPath}/register">

对于具体问题

无关,请注意您通过课程上的@WebServlet注释和<servlet>中的web.xml条目注册了servlet。这个不对。你应该使用其中一个。 @WebServlet是注册servlet的新方法,因为Servlet 3.0(Java EE 6)和<servlet>是注册servlet的旧方法。

摆脱<servlet>中的整个<servlet-mapping>web.xml。您不需要同时指定两者。确保您正在阅读最新的书籍/教程。 Servlet 3.0已于2009年12月开始存在。

另一个细节是p1 不是一个类,它是一个包。在热衷于Java EE之前,我强烈建议花更多的时间学习基础Java。

另见: