【问题标题】:JavaEE 8, Tomcat 8.5, Error Status 404JavaEE 8、Tomcat 8.5、错误状态 404
【发布时间】:2018-10-31 08:09:06
【问题描述】:

我正在尝试制作我的第一个 servlet,但我得到了 404 状态码。

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
     version="4.0">

    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>Test.Hello</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

Hello.java

 package Test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


public class Hello extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
        PrintWriter pw = res.getWriter();
        pw.println("Hello World");
    }
}

我想运行它: 本地主机:8080/你好

现在它的状态为 404

"描述源服务器没有找到当前的表示 对于目标资源或不愿透露该资源 存在。”

我该如何解决这个问题?

【问题讨论】:

  • 尝试重启你的服务器
  • @JonathanLaliberte 没用;/
  • 你用的是spring之类的框架吗?你是用maven编译项目吗?您是否有已部署到您的 tomcat 服务器的 *.war?我们需要更多信息才能为您提供帮助。
  • 我是新手,我只是在学习,我不使用 maven 和框架,我在哪里可以检查我是否有 *war ?我正在使用 IntelliJ 吗?构建 -> 构建工件 -> 构建 Project:war ?
  • 你是如何部署这个的?你在哪里编辑 web.xml?

标签: java tomcat servlets


【解决方案1】:

很奇怪,我注意到您的 web.xml 是 4.0 版。您应该能够通过注释将 url 映射与您的 Servlet 一起使用。

尝试像这样添加 WebServlet 注释 @WebServlet("/hello")

 package Test;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet; //IMPORT THIS ALSO
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello") //try adding this here
public class Hello extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
        PrintWriter pw = res.getWriter();
        pw.println("Hello World");
    }
}

然后删除您在 web.xml 中的任何映射,如果您使用注释,则不需要这些映射。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
     version="4.0">

//remove servlet and mapping    

</web-app>

如果这不起作用,您可以尝试更改您的版本。例如,将您的 web.xml 替换为以下内容(版本 3.1):

<?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" version="3.1">

</web-app>

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2021-06-19
    • 2014-09-11
    • 2018-08-06
    • 2017-03-28
    • 2014-01-26
    • 1970-01-01
    • 2012-04-22
    • 2018-11-09
    相关资源
    最近更新 更多