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> 存在 注释掉或删除
相关推荐
怒放吧德德2 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆4 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌6 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊8 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang8 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang9 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解9 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing13 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean14 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9715 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java