java - JavaEE 8、Tomcat 8.5、错误状态 404
问题描述
我正在尝试制作我的第一个 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>
你好.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");
}
}
我想运行它:localhost:8080/hello
现在它的状态为 404
“描述原始服务器没有找到目标资源的当前表示或不愿意透露存在的表示。”
我怎样才能解决这个问题?
解决方案
很奇怪,我注意到您的 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>
推荐阅读
- spring-boot-admin - 使用spring boot admin时如何获取instanceID?
- postgresql - 关联这些数据库表的更好方法是什么?
- javascript - 在 REACT 的段落中显示 Json 对象
- javascript - 在 D3JS 中将数据绑定到 DOM
- c++ - 如何实现一个唯一ID队列,其中元素可以在C++中“碰撞”到顶部?
- reactjs - 对大范围值反应 rc-slider 灵敏度
- javascript - Javascript 不在正确的 Div 中输出
- javascript - 如何防止将相同元素从一个数组两次添加到另一个数组?
- constraints - 用约束解决变分问题
- database - ORACLE 数据库同步