报错405:HTTP method GET is not supported by this URL

405响应码

首先要知道 405 响应码的作用是什么,它的意思就会说请求的方法不匹配,一般是因为本来是 POST 提交的请求,你使用了 GET 方法造成的,也可能是这个请求方法根本没有是你胡编乱造出来的。

提示信息

提示信息说不支持 GET 方法,我创建了一个类继承自 HttpServlet 类,并且重写了 service 方法,但是我又加了一个 super.service() 方法,这就导致出错了,下面解释原因。
报错405:HTTP method GET is not supported by this URL_第1张图片
因为请求过来之后会先到 service 方法,如果我们没有重写该方法,那么就会直接到 HttpServletservice 方法,它的源码如下:
报错405:HTTP method GET is not supported by this URL_第2张图片
也很好懂,就是根据请求的方法去调用对应的 doGet 和其他的方法。

doGet 的全部代码如下:
报错405:HTTP method GET is not supported by this URL_第3张图片
可以看到很简单,直接返回一个 method_get_not_supporteddoPost 方法和这个一模一样,所以这就是为什么我们一般情况下都要重写 doGetdoPost 方法的原因。

因为如果我们不重写,他就会直接返回 405 错误码。

但是到这一步也有一个前提就是必须能够到达 HttpServletservice 方法,如果我们重写了该方法,就不会到达这里了,而是执行我们重写的方法,所以我们可以直接重写 service 方法,将业务逻辑放进去,这样就不会到父类中的 service 方法了。

我出现错误的原因就是因为我重写了方法,但是又加了一个 super.service() ,这样他还是会去执行父类的方法,还是会执行那个 doGet 方法,然后返回 405 状态码。

解决办法就是去掉 super.service()

或者干脆还是使用老办法,不重写 service 方法了,还是重写 doGetdoPost 方法。
报错405:HTTP method GET is not supported by this URL_第4张图片

你可能感兴趣的:(JavaWeb)