MacOS下Tom Cat 10运行项目报错:请求资源[/]不可用求助
解决Tomcat 10下访问根路径报错‘The requested resource [/] is not available’的问题
核心问题定位
Tomcat 10 是 Jakarta EE 9+ 兼容容器,而你的代码中使用的是旧的 javax.servlet 包API。从Tomcat 10开始,Java EE API已正式迁移到jakarta.servlet命名空间,旧的javax包类不会被容器识别,导致你的HomeServlet无法完成注册,进而web.xml中的欢迎页配置失效,访问根路径时出现资源未找到错误。
具体解决步骤
1. 替换Servlet API依赖与代码导入
- 修改代码中的import语句:将所有
javax.servlet开头的导入替换为jakarta.servlet:
package kz.bitlab.servlets; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(value = "/home") public class HomeServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<h1>First BITLAB Java EE Application</h1>"); } }
- 调整项目依赖:如果使用Maven,将原有的
javax.servlet依赖替换为Jakarta版本:
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency>
Gradle项目则对应修改为:
provided 'jakarta.servlet:jakarta.servlet-api:5.0.0'
2. 验证Servlet注册状态
启动Tomcat后,访问http://localhost:8080/manager/html(需提前在conf/tomcat-users.xml配置manager权限),进入已部署应用的Servlet列表,确认HomeServlet是否存在。若存在,说明注册成功。
3. 优化web.xml欢迎页配置
将web.xml中的欢迎页配置修改为直接指向Servlet路径,避免Tomcat优先查找物理文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <welcome-file-list> <welcome-file>/home</welcome-file> </welcome-file-list> </web-app>
4. 检查IDEA部署配置
- 确认Tomcat配置中,应用的**上下文路径(Context Path)**设置为
/,否则需要访问http://localhost:8080/[上下文路径]/才能进入应用。 - 检查项目编译输出目录(如
target/classes)是否包含kz/bitlab/servlets/HomeServlet.class文件,确保IDEA已正确编译项目。
内容的提问来源于stack exchange,提问作者Almas Iskak
相关产品推荐
相关产品推荐

