You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Servlet 404错误求助:照搬书本示例代码仍无法访问

Servlet 404错误排查与解决

先看你代码里的明显语法错误:

  • 第3行import java.io.PrintWriter; 里多了一个反引号,这会导致代码编译失败,Servlet无法被容器加载,直接引发404。先把这个反引号删掉,修正后的import行是:import java.io.PrintWriter;

解决完代码错误后,再按以下步骤排查部署和访问问题:

  • 确认项目是否成功部署到服务器
    打开Tomcat的webapps目录,检查是否有你的项目文件夹;或者在IDE的服务器部署列表里,确认你的项目已被添加并启动。

  • 检查访问路径是否正确
    你的Servlet用@WebServlet("/SampleServlet2")注解,完整访问路径应该是:
    http://localhost:8080/[你的项目上下文路径]/SampleServlet2
    比如你的项目名为LuckServlet,那路径就是http://localhost:8080/LuckServlet/SampleServlet2。注意上下文路径是你项目的名称,IDE里通常会默认用项目名作为上下文路径。

  • 检查服务器启动状态
    查看Tomcat控制台输出,确认没有端口占用、类加载失败等报错。如果服务器启动失败,Servlet自然无法访问。

  • 验证Servlet类是否被正确编译
    检查项目的WEB-INF/classes目录下,是否存在servlet/SampleServlet2.class文件。如果没有,说明IDE的编译输出路径配置有问题,或者编译过程出错。

  • 确认Servlet版本与容器兼容
    @WebServlet是Servlet 3.0及以上的特性,确保你使用的Tomcat版本是7.0及以上,且如果有web.xml文件,其版本要设置为3.0或更高(比如<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0">)。

修正后的完整代码:

package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class SampleServlet2
*/
@WebServlet("/SampleServlet2")
public class SampleServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String[] luckArray = {"超スッキリ","スッキリ","最悪"};
        int index = (int) (Math.random()*3);
        String luck=luckArray[index];
        Date date= new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
        String today=sdf.format(date);
        
        // 注意:先设置ContentType再获取Writer,避免编码问题
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>スッキリ占い</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<p>"+today+"の運勢は「"+luck+"」です</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

另外补充:原代码里先调用了response.getWriter().append(...),之后才设置ContentType,这可能导致编码异常,建议先设置ContentType再获取输出流,修正后的代码已经调整了这个顺序。

内容的提问来源于stack exchange,提问作者wdwad dwad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:05:15