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

6

我有一个在类 p1 中的 servlet register。我有一个 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。


“不可用”错误通常是因为应用程序未能正确初始化而发生的。在启动期间查看日志,以查看是否存在错误。 - skaffman
1个回答

11

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

这意味着servlet没有监听/Register URL模式。换句话说,您没有使用@WebServlet(“/Register”)

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

因此,它不应该看起来像这样:

<form action="Register">

但它应该看起来像这样:

<form action="register">

或者选择下面这种方式,如果你无聊的时候想要移动JSPs的位置,这种方式更加健壮可靠:

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

与具体问题无关,请注意您通过类上的 @WebServlet 注解和 web.xml 中的 <servlet> 条目两种方式注册了servlet。这是不正确的。您应该使用其中一种方式。自 Servlet 3.0(Java EE 6)以来,@WebServlet 是注册servlet的新方法,而<servlet> 是注册servlet的旧方法。

只需删除 web.xml 中的整个 <servlet><servlet-mapping> ,您不需要同时指定两者。确保您阅读最新的书籍/教程。Servlet 3.0 早在2009年12月就存在了。

另一个细节是,p1 不是一个类,它是一个包。我强烈建议在深入学习 Java EE 之前花点时间学习基本的 Java 知识。

另请参阅:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接