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 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
ss2732 小时前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛2 小时前
Spring的cacheEvict
java·后端·spring
SAP小崔说事儿2 小时前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
凌云若寒2 小时前
半导体代加工企业标签模板痛点的全景式解决方案
java
shoubepatien3 小时前
JAVA -- 11
java·后端·intellij-idea
利剑 -~3 小时前
jdk源码解析
java·开发语言
Predestination王瀞潞3 小时前
JDK安装及环境变量配置
java·linux·开发语言
谷哥的小弟3 小时前
Spring Framework源码解析——PropertiesLoaderUtils
java·后端·spring·框架·源码
JIngJaneIL4 小时前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端