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

Sas*_*ska 6 servlets http-status-code-404

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

HTTP状态404

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

Servlet的:

@WebServlet("/register")
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我正在使用Eclipse.

Bal*_*usC 11

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

这只是意味着servlet没有监听URL模式/Register.换句话说,你没有@WebServlet("/Register").

在您的特定情况下,您在URL中出现了大小写错误.URL区分大小写.你正在打电话/Register,但是你的servlet正在监听/register.相应地修复您的表单操作.

所以,应该不是这个样子:

<form action="Register">
Run Code Online (Sandbox Code Playgroud)

但它应该是这样的:

<form action="register">
Run Code Online (Sandbox Code Playgroud)

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

<form action="${pageContext.request.contextPath}/register">
Run Code Online (Sandbox Code Playgroud)

具体问题无关,请注意您通过@WebServlet类的注释和<servlet>条目注册了servlet web.xml.这个不对.你应该使用其中一个.这@WebServlet是自Servlet 3.0(Java EE 6)以来注册servlet的新方法,也是注册servlet <servlet>的旧方法.

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

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

也可以看看: