使用Servlet编写Hello World程序出现HTTP 405 Method Not Allowed错误如何解决
错误原因
浏览器直接通过地址栏访问资源时默认发送的是GET请求,而你提供的Servlet代码仅重写了doPost()方法用于处理POST请求,未实现对应的doGet()方法。HttpServlet父类的默认doGet()实现会直接返回405状态码,和你看到的报错信息完全匹配。
解决办法
- 方案一:新增
doGet()方法,可直接调用已有的doPost()复用逻辑,无需重复编写业务代码,修改后代码如下:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { // 新增处理GET请求的方法 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doPost(req, res); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<h1>Hello World</h1>"); } }
- 方案二:如果业务规则要求该接口仅接受POST请求,就不要通过地址栏直接访问,改为通过前端POST表单提交的方式请求接口,表单示例代码如下:
<form action="替换为你的Servlet映射路径" method="post"> <button type="submit">访问HelloWorld接口</button> </form>
- 方案三:重写Servlet的
service()方法,所有请求类型都会被该方法统一处理,不过该写法会破坏Servlet原生的请求方法分发逻辑,非特殊场景不推荐使用:
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<h1>Hello World</h1>"); }
内容的提问来源于stack exchange,提问作者P Sai Akhil
相关产品推荐
相关产品推荐

