Tomcat 启动后只显示 index.jsp,没有进入你的 Servlet 逻辑

目录

[🧩 问题分析:为什么执行的是 index.jsp 而不是 Servlet?](#🧩 问题分析:为什么执行的是 index.jsp 而不是 Servlet?)

[① index.jsp 拦截了根路径 /](#① index.jsp 拦截了根路径 /)

[② 编译输出路径错误](#② 编译输出路径错误)

[③ web.xml 与注解配置冲突](#③ web.xml 与注解配置冲突)

[✅ 解决方案(推荐顺序)](#✅ 解决方案(推荐顺序))

[方法 1:换个 URL 路径](#方法 1:换个 URL 路径)

[方法 2:删除或重命名 index.jsp](#方法 2:删除或重命名 index.jsp)

[方法 3:确认 Tomcat 加载了这个 Servlet](#方法 3:确认 Tomcat 加载了这个 Servlet)

[方法 4:检查 web.xml](#方法 4:检查 web.xml)

[💡 小结](#💡 小结)


🧩 问题分析:为什么执行的是 index.jsp 而不是 Servlet?

有三种最常见的原因:

① index.jsp 拦截了根路径 /

Tomcat 默认会将请求路径 / 映射到 src/main/webapp/index.jsp(或 index.html)。

而你的 Servlet 也是用的 @WebServlet("/")

结果:

Tomcat 检测到根路径有静态资源(index.jsp),就直接返回 JSP 页面,不会再调用 Servlet。

⚠️ 这时 tomcat_servlet 类虽然加载进 Tomcat,但永远不会被调用。


② 编译输出路径错误

如果 Maven 没有正确编译,或者 Main.java 没有正确指向 target/classes,Tomcat 根本没加载到这个 Servlet class。

也就是说:

Servlet 代码存在于 src/main/java,但 Tomcat 实际扫描的 class 路径(target/classes)里没有这个文件。


③ web.xml 与注解配置冲突

如果你的 WEB-INF/web.xml 文件中配置了一个 <welcome-file-list>

复制代码
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

Tomcat 会优先使用 JSP 作为欢迎页,跳过 Servlet 映射。


✅ 解决方案(推荐顺序)

方法 1:换个 URL 路径

修改注解,让 Servlet 不和 JSP 冲突:

复制代码
@WebServlet(urlPatterns = "/hello")
public class tomcat_servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        String name = req.getParameter("name");
        if (name == null) {
            name = "worldaaaaaaaa";
        }
        PrintWriter pw = resp.getWriter();
        pw.write("<h1>Hello, " + name + "!</h1>");
        pw.flush();
    }
}

然后访问:

复制代码
http://localhost:8080/hello

------这样就不会被 index.jsp 抢先响应了。


方法 2:删除或重命名 index.jsp

直接把 src/main/webapp/index.jsp 删除,或者改名为别的文件(例如 main.jsp)。

再运行:

复制代码
http://localhost:8080/

此时根路径就会由你的 Servlet 处理。


方法 3:确认 Tomcat 加载了这个 Servlet

可以在 Main.java 启动后查看控制台日志:

如果有类似日志:

复制代码
INFO: Initializing Servlet tomcat_servlet

说明你的 servlet 被加载。

如果没有这行,说明 target/classes 没有生成这个 class。

执行:

复制代码
mvn clean compile

看看 target/classes/com/itranswarp/learnjava/servlet/tomcat_servlet.class 是否存在。


方法 4:检查 web.xml

如果存在 web.xml,可暂时移除其中的 <welcome-file-list> 配置,

让请求 / 不再默认跳转到 JSP。


💡 小结

问题 原因 解决方案
Servlet 映射和 JSP 冲突 @WebServlet("/") + index.jsp 改为 /hello 或删除 JSP
Tomcat 没加载 Servlet 编译路径错误 运行 mvn compile,确保 target/classes 存在
web.xml 欢迎页覆盖 <welcome-file-list> 存在 注释掉或删除
相关推荐
大模型玩家七七4 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
寻星探路9 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧11 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法12 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72512 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎12 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄12 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿13 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds13 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化