访问JavaWeb项目报405错误

 

一、问题由来

  一位朋友最近在学习JavaWeb开发,做测试时出现问题,页面报了405错误,HTTP Status 405 ? Method Not Allowed

如果是只出现一次,那也还好。主要是这个错误他遇到过多次,第一次就是刚开始学习Servlet的时候,还有一次是在学习文件上传的时候出现的。因此就特意写一篇博客来解释说明一下,为什么会出现这种情况。

错误信息如下:

HTTP method GET is not supported by this URL

翻译过来的大致意思就是Get请求方法不支持访问的这个请求路径。

还有一句描述信息如下,

The method received in the request-line is known by the origin server but not supported by the target resource.

翻译过来的大致意思就是:请求中接收到的方法是源服务器已知的,但目标资源不支持。为什么会出现这个问题呢?

二、问题分析

  自己让他把项目发过来给我看一下,我去看了一下他写的Servlet,里面有这么一行代码。如下图,虽然重写了HttpServlet的接口,可是没有删除掉super.doGet(req, resp); 是不是这个地方导致的问题呢?

点开super.doGet一看便知。

 

是不是很熟悉,method get not supportedget方法不支持。看到这里就应该知道问题出在哪里了。

三、解决方案

  在Servlet中重写doGet方法或者doPost方法后,需要删除掉super.doGet()或者是super.doPost()方法即可,否则就会出现上面的错误。删除后代码如下,

测试结果如下,

第二次出现问题,该朋友写了一个文件上传的Servlet进行测试,代码如下,重写了doPost方法,

 

然后这位朋友去浏览器的地址栏中直接输入请求的地址,返回结果如下,又出现405错误,那这又是怎么回事呢?

文件上传重写的是doPost方法,只能接收post请求,而在浏览器地址栏中直接输入请求地址发起的事get请求,所以出现该问题。如果发起的是post请求,而Servlet中重写的是doGet请求的方法,同样会出现类似的错误。示例代码如下,

 

使用调试工具发送post请求,测试结果如下,

 

错误类似,post请求不支持。

总结:(1)后台重写什么方法,前端页面就需要发送对应的请求,否则可能出现如上问题。(2)不管是重写doGet方法或者是重写doPost方法,都需要删除掉surper.doGet或者是super.doPost方法,否则也会出现类似的问题。

 

posted @ 2024-03-16 11:03  一只爱阅读的程序员  阅读(476)  评论(0编辑  收藏  举报