You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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请求
  • 部分浏览器缓存或代理的异常行为

修复步骤

  1. 让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);
}
  1. 避免空指针异常(额外优化)
    当前代码中如果用户未输入密码,request.getParameter("userPass")会返回null,调用p.equals("servlet")会抛出NullPointerException。建议修改为常量在前的比较方式,避免空指针:
if("servlet".equals(p)){
    // 原有跳转逻辑
}

验证修复

修改后重新部署项目:

  • 提交表单(POST请求)会正常处理密码验证和页面跳转
  • 直接访问Servlet的URL(GET请求)也不会再返回405错误
  • 空密码的情况也不会导致服务器报错

内容的提问来源于stack exchange,提问作者HMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:02