首先要知道 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
方法。