Java Servlet触发HTTP Status 404错误:点击JSP按钮遇异常问题
排查LogoutServlet 404错误的实用方案
既然其他Servlet都能正常运行,那这问题肯定出在LogoutServlet的配置、映射或者调用路径上,咱们一步步揪出问题:
1. 先核对Servlet的映射配置
如果用的是注解式配置(Servlet 3.0及以上版本),先看@WebServlet的路径是不是和请求路径匹配:
// 注意路径开头的斜杠,还有是不是和错误提示里的/pages/LogoutServlet对应 @WebServlet("/pages/LogoutServlet") public class LogoutServlet extends HttpServlet { // 你的代码逻辑 }
要是用的是web.xml配置,得确保<servlet>和<servlet-mapping>完全对应:
<servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>com.yourpackage.LogoutServlet</servlet-class> <!-- 这里包名别写错! --> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/pages/LogoutServlet</url-pattern> <!-- 路径要和请求的一致 --> </servlet-mapping>
⚠️ 注意:项目名ProjectName是服务器自动加上的,所以映射路径里不需要写它,只需要写/pages/LogoutServlet就行。
2. 检查JSP里的按钮跳转路径
看看你JSP中按钮对应的表单action或者链接路径:
- 如果是相对路径,得注意JSP本身的位置:比如JSP已经在
/pages目录下,那写action="LogoutServlet"就会变成/ProjectName/pages/LogoutServlet,这是对的;但如果JSP在根目录,写action="pages/LogoutServlet"才对。 - 更稳妥的是用动态路径,自动带上项目名,避免硬编码出错:
<form action="${pageContext.request.contextPath}/pages/LogoutServlet" method="post"> <button type="submit">退出登录</button> </form>
3. 确认Servlet类是否被正确打包部署
- 检查你的LogoutServlet是不是放在了正确的源码目录下(比如Maven项目要在
src/main/java对应的包内),编译后有没有生成.class文件(去target/classes或WEB-INF/classes目录里找找)。 - 有时候IDE编译漏了这个类,导致服务器根本找不到它,这时候清理下项目编译目录再重新编译试试。
4. 清理缓存+重启服务器
别小看缓存问题!很多时候就是服务器缓存了旧的配置:
- 先清理项目的编译输出(比如Maven的
target文件夹,Eclipse的bin文件夹); - 然后重启你的应用服务器(Tomcat之类的),再重新部署项目。
5. 深挖服务器日志细节
虽然你说没有警告或异常,但建议再仔细看看服务器的启动日志(比如Tomcat的catalina.log或localhost.log)——有时候Servlet初始化失败(比如init()方法里藏了异常),不会在页面上显示,但会在日志里留下痕迹,导致Servlet没被成功注册。
总结下:错误提示里的路径
/ProjectName/pages/LogoutServlet说明服务器确实收到了请求,但找不到对应的Servlet映射,核心问题要么是映射路径和请求路径不匹配,要么是Servlet根本没被服务器加载到,按上面的步骤排查应该能解决。
内容的提问来源于stack exchange,提问作者Brenton
相关产品推荐
相关产品推荐

