报错405:HTTP method GET is not supported by this URL
405响应码
首先要知道 405 响应码的作用是什么,它的意思就会说请求的方法不匹配,一般是因为本来是 POST
提交的请求,你使用了 GET
方法造成的,也可能是这个请求方法根本没有是你胡编乱造出来的。
提示信息
提示信息说不支持 GET 方法,我创建了一个类继承自 HttpServlet
类,并且重写了 service
方法,但是我又加了一个 super.service()
方法,这就导致出错了,下面解释原因。
因为请求过来之后会先到 service
方法,如果我们没有重写该方法,那么就会直接到 HttpServlet
的 service
方法,它的源码如下:
也很好懂,就是根据请求的方法去调用对应的 doGet
和其他的方法。
而 doGet
的全部代码如下:
可以看到很简单,直接返回一个 method_get_not_supported
。doPost
方法和这个一模一样,所以这就是为什么我们一般情况下都要重写 doGet
和 doPost
方法的原因。
因为如果我们不重写,他就会直接返回 405 错误码。
但是到这一步也有一个前提就是必须能够到达 HttpServlet
的 service
方法,如果我们重写了该方法,就不会到达这里了,而是执行我们重写的方法,所以我们可以直接重写 service
方法,将业务逻辑放进去,这样就不会到父类中的 service
方法了。
我出现错误的原因就是因为我重写了方法,但是又加了一个 super.service()
,这样他还是会去执行父类的方法,还是会执行那个 doGet
方法,然后返回 405 状态码。
解决办法就是去掉 super.service()
。
或者干脆还是使用老办法,不重写 service
方法了,还是重写 doGet
和 doPost
方法。