Tomcat 启动后只显示 index.jsp,没有进入你的 Servlet 逻辑
目录
🧩 问题分析:为什么执行的是 index.jsp 而不是 Servlet?
① index.jsp 拦截了根路径 /
② 编译输出路径错误
③ web.xml 与注解配置冲突
✅ 解决方案(推荐顺序)
方法 1:换个 URL 路径
方法 2:删除或重命名 index.jsp
方法 3:确认 Tomcat 加载了这个 Servlet
方法 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 {@Overrideprotected 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> 存在 | 注释掉或删除 |