Servlet重定向异常:302/301跳转后目标Servlet doGet未执行
排查Servlet重定向后doGet未执行的问题
哎,这种情况我之前踩过好几次坑,咱们从几个最常见的点一步步排查:
检查Servlet映射配置是否匹配
先确认BServlet的映射路径和你重定向的URL完全一致:- 如果是用
@WebServlet注解,看看是不是写成了@WebServlet("/BServlet"),和重定向的http://localhost:8080/App/BServlet的路径部分对应; - 如果是web.xml配置,检查
<url-pattern>是不是正确,有没有大小写错误(比如把BServlet写成bServlet)。路径不匹配的话,浏览器发起的GET请求会返回404,自然不会触发doGet。
- 如果是用
确认doGet方法正确重写
检查BServlet的doGet方法有没有符合规范:@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 加个打印语句快速测试 System.out.println("BServlet doGet 被执行了!"); // 你的业务逻辑代码 }注意:必须是
protected修饰,参数类型要完全匹配,而且一定要加@Override注解(避免手滑把方法名写成doget小写这类错误)。如果方法签名不对,Tomcat会认为你只是定义了一个自定义方法,而非重写父类的doGet,自然不会被调用。查看服务器日志定位问题
打开Tomcat的localhost_access_log.*.txt和localhost.log,看看请求BServlet时的状态码:- 如果是404:说明路径不匹配,回到第一步重新核对映射配置;
- 如果是500:说明doGet里抛出了未捕获的异常,需要查看日志里的异常栈信息,修复代码中的问题;
- 如果是200但控制台没打印测试语句:那大概率是请求被拦截了。
排查是否有过滤器拦截请求
项目里如果配置了Filter,检查过滤器的映射路径是不是包含了BServlet的路径,有没有在过滤器里直接返回响应、没有把请求传递给后续的Servlet。可以暂时注释掉过滤器的配置,再测试重定向是否正常。检查重定向URL的拼写
你给出的代码里,手动设置Location时URL末尾有省略号,确认实际代码里的URL没有多余字符(比如多了斜杠、空格,或者拼写错误),正确的地址应该是http://localhost:8080/App/BServlet,不要有额外的符号干扰。
内容的提问来源于stack exchange,提问作者Mssm
相关产品推荐
相关产品推荐

