Java Servlet遇HTTP Status 405错误:RequestDispatcher与doPost()使用问题
解决HTTP Status 405: GET方法不支持的问题
这个错误的核心原因很明确:你的Simple和WelcomeServlet都只重写了doPost方法,但当请求以GET方式到达时,HttpServlet的默认实现会直接返回405错误。虽然你的表单设置了method="post",但实际使用中可能因为以下场景触发GET请求:
- 直接在浏览器地址栏输入了servlet的URL(比如
/go或/welcome) - 页面刷新时浏览器自动重复发送GET请求
- 部分浏览器缓存或代理的异常行为
修复步骤
- 让Servlet同时支持GET和POST请求
在两个Servlet类中添加doGet方法,让它直接调用已有的doPost逻辑,这样无论请求是GET还是POST,都会被正确处理:
对于Simple.java:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }
对于WelcomeServlet.java:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }
- 避免空指针异常(额外优化)
当前代码中如果用户未输入密码,request.getParameter("userPass")会返回null,调用p.equals("servlet")会抛出NullPointerException。建议修改为常量在前的比较方式,避免空指针:
if("servlet".equals(p)){ // 原有跳转逻辑 }
验证修复
修改后重新部署项目:
- 提交表单(POST请求)会正常处理密码验证和页面跳转
- 直接访问Servlet的URL(GET请求)也不会再返回405错误
- 空密码的情况也不会导致服务器报错
内容的提问来源于stack exchange,提问作者HMD
相关产品推荐
相关产品推荐

