IntelliJ开发Java EE应用时JSP正常但Servlet无法执行
问题核心原因
你遇到的问题根因是 Tomcat 10 版本的包命名空间变更:Tomcat 10 实现的是Jakarta EE 9+规范,原javax.servlet系列包全部重命名为jakarta.servlet,你当前代码中导入的javax.servlet包和Tomcat 10完全不兼容,Servlet不会被服务端识别注册,所以始终无法访问。
具体修复步骤
- 替换Servlet相关导入包
将HelloServlet.java中原有javax开头的导入语句:
import javax.servlet.http.*; import javax.servlet.annotation.*;
替换为jakarta开头的导入:
import jakarta.servlet.http.*; import jakarta.servlet.annotation.*;
- 修正代码逻辑缺陷
你代码中声明的private String message;未做初始化赋值,即使Servlet访问正常也只会返回空内容,可新增init方法赋值:
@Override public void init() { message = "Hello Servlet!"; }
- 简化注解配置
@WebServlet注解不需要冗余配置,直接写路径即可:
@WebServlet("/helloServlet") public class HelloServlet extends HttpServlet { // 你的业务代码 }
- (可选)web.xml配置适配
如果你选择用web.xml配置而不是注解,需要保证web.xml头部声明对应Jakarta EE 9+规范,不要使用旧的Java EE 8及以下的schema声明。
后续新建项目避坑提示
在IntelliJ中新建Java Enterprise项目时,选择Tomcat 10作为应用服务器后,Java EE版本要对应选择Jakarta EE 9及以上版本,自动生成的脚手架代码会默认使用jakarta系列包,不会再出现该兼容问题。
内容的提问来源于stack exchange,提问作者Anil Narlapally
相关产品推荐
相关产品推荐

