HTTP 状态 404 - 未找到 Servlet

Posted

技术标签:

【中文标题】HTTP 状态 404 - 未找到 Servlet【英文标题】:HTTP Status 404 - Servlet not found 【发布时间】:2019-07-30 23:56:46 【问题描述】:

我在 Eclipse 中有一个项目,并试图从 Web 浏览器调用一个 servlet。该图显示了我的项目的结构。虽然我在注解中设置了url,但还是找不到资源。

这是我的代码:

package java.enablingKeyWordSearch;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(asyncSupported = false, name = "HelloServlet", urlPatterns = "/hello")
public class TestServlet extends HttpServlet 

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.write("<h2>Hello Servlet One </h2>");
        out.close();
    

我尝试使用以下方法调用 servlet: http://localhost:8080/MultiKeywordSearch/hello http://localhost:8080/MultiKeywordSearch/src/java/enablingKeyWordSearch/hello

... 等等。然而,我得到一个 HTTP 状态 404 错误。

这是我的web.xml 文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>MultiKeywordSearch</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

我正在使用 Apache Tomcat v8.0,如果这有影响的话。

更新:在新截图中显示源列表;删除了 java 命名空间

编辑 2.0 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>MultiKeywordSearch</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>enablingKeyWordSearch.TestServlet</servlet-class>
    </servlet>

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/multiKeywordSearch</url-pattern>
</servlet-mapping>
</web-app>

enablingKeyWordSearch.TestServlet.java 文件:

package enablingKeyWordSearch;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet(asyncSupported = false, name = "HelloServlet", urlPatterns = "/hello")
@WebServlet(name = "HelloServlet", urlPatterns = "/multiKeywordSearch")
@MultipartConfig
public class TestServlet extends HttpServlet 

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.write("<h2>Hello Servlet One </h2>");
        out.close();
    

遗憾的是仍然出现 404 错误。

【问题讨论】:

类型名称上显示的警告是什么?此外,更改您的包名称,使其不使用保留的命名空间,如“java”。 它只是说可序列化类没有声明 long 类型的静态最终 serialVersionUID 字段。现在修复命名空间问题 修复了命名空间问题,没有解决问题 请更新您的源列表,如果您使用的是 web.xml 文件,请包含其内容。 @nitind 完成,见上文 【参考方案1】:
@WebServlet("/multiKeywordSearch")

@MultipartConfig


and then try this.
http://localhost:8080/MultiKeyewordSearch/multiKeywordSearch

【讨论】:

删除您的服务器并重新添加。重启它 使用此命令并杀死服务器的任何实例 sudo kill $(ps -aef | grep java | grep apache | awk 'print $2') 您是否在选择 tomcat 配置时将项目添加到资源中。 tomacat 无法找到该资源(您的项目) 是的。在我创建它之前将它移到“已配置”右侧 我认为问题出在您的 web.xml 文件中。 servlet 映射必须正确【参考方案2】:

尝试更新您的 web.xml

 <servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>java.enablingKeyWordSearch.TestServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

【讨论】:

我应用了这些更改,但仍然遇到相同的错误。我更新了 src 的命名空间,删除了 java

以上是关于HTTP 状态 404 - 未找到 Servlet的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态 404 – 未找到!!!!或有时 Http 500 [重复]

HTTP 状态 404 - 未找到 - JAVA MVC

http状态404 - 在jsp中找不到,Tomcat服务器上的servlet [重复]

JSP/JDBC:HTTP 状态 404 - 未找到

Web 服务错误 HTTP 状态 404 - 未找到

HTTP状态404 - 创建springBoot应用程序时未找到