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> 存在 注释掉或删除
相关推荐
BIG_PEI14 分钟前
检查并安装Redis
java
大貔貅喝啤酒16 分钟前
基于Windows下载安装Android Studio 3.3.2版本教程(2026详细图文版)
android·java·windows·android studio
奋斗的小方18 分钟前
Java基础篇09:项目实战
java·开发语言
海兰19 分钟前
【第21篇-续】graph-Stream-Node改造为适配openAI模型示例
java·人工智能·spring boot·spring·spring ai
vKd0Ff21L21 分钟前
如何在Dev-C++中设置TDM-GCC为默认编译器第九十一篇
java·jvm·c++
武子康23 分钟前
Java-221 RocketMQ 消息存储核心原理:CommitLog、ConsumerQueue、IndexFile 与消息过滤机制
java·大数据·分布式·消息队列·rabbitmq·rocketmq·java-rocketmq
北风toto31 分钟前
为什么 IntelliJ IDEA Community 无法开发 Vue?——附解决方案
java·vue.js·intellij-idea
programhelp_31 分钟前
Google 2026 New Grad SDE VO 三轮面试详解 | 含Behavioral、Coding、Design
java·服务器·数据库
驭渊的小故事36 分钟前
java中的进程的详细解析
java·开发语言
Mr_sst43 分钟前
Codex 部署、使用教程 & Vibe Coding 实战指南
java·ai·语言模型·chatgpt·ai编程