Eclipse实现Servlet接口时注解生成URL异常问题求助
问题分析与解决方法
问题详情
- 项目环境:Eclipse中名为
firstwebsite的Web项目,使用Tomcat 9服务器 - 代码情况:在
src/main/java默认包下创建了直接实现Servlet接口的impSer类,代码如下:
import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; @WebServlet("/impSer") public class impSer implements Servlet { private transient ServletConfig config; @Override public void init(ServletConfig config) throws ServletException { this.config = config; } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("Hello world"); } @Override public void destroy() { System.out.println("h"); } @Override public ServletConfig getServletConfig() { return this.config; } @Override public String getServletInfo() { return "TheServletInter"; } }
- 异常现象:运行时Eclipse自动生成的URL为
http://localhost:8080/firstwebsite/WEB-INF/classes/impSer.java,触发404错误;手动输入注解指定的正确URLhttp://localhost:8080/firstwebsite/impSer可正常运行 - 特殊情况:继承
GenericServlet或HttpServlet创建Servlet时,注解方式运行完全正常,仅直接实现Servlet接口时出现此问题
解决步骤
1. 修正Eclipse服务器运行配置
- 右键项目 →
Run As→Run Configurations - 在左侧列表找到
Apache Tomcat下的对应服务器实例,点击进入配置页面 - 切换到
Arguments标签,在VM arguments的末尾添加以下参数:-Dorg.eclipse.jst.jsp.core.translator.source=2.3 - 保存配置后重启Tomcat服务器,再重新运行Servlet
2. 手动指定运行的Servlet路径
- 右键
impSer.java文件 →Run As→Run on Server - 在弹出的窗口中点击
Next,选择对应的Tomcat服务器 - 在后续页面中,找到URL输入栏,手动填写
http://localhost:8080/firstwebsite/impSer - 点击
Finish启动运行
3. 确认项目Servlet版本配置
- 检查
src/main/webapp/WEB-INF下的web.xml文件(若不存在则新建),确保Servlet版本为3.0及以上(Tomcat 9支持Servlet 4.0),配置示例:<?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" metadata-complete="false"> </web-app> metadata-complete="false"用于确保Tomcat能够扫描并识别Servlet注解
原因说明
Eclipse对直接实现Servlet接口的类,在自动生成运行URL时,没有正确识别其作为Servlet的身份,误将其当作普通Java源文件处理,因此指向了源文件的编译路径。通过添加VM参数修正Eclipse的Servlet识别逻辑,或手动指定正确的Servlet访问路径,即可解决此问题。
内容的提问来源于stack exchange,提问作者user20470572
相关产品推荐
相关产品推荐

