HTTP状态405 - Servlet中此URL不支持HTTP方法GET

时间:2014-08-19 07:16:42

标签: java servlets

为什么我得到 HTTP状态405 - 本方案中的此URL 错误不支持HTTP方法GET.Well我在此之前完成了3个程序并且它们运行正常但是这显示了错误。

package com.aamir;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet4 extends HttpServlet {

   protected void service(HttpServletResponse res, HttpServletRequest req)
        throws IOException, ServletException {

             PrintWriter out = res.getWriter();
             res.setContentType("text/html");

             out.println("<em>through out</em>");
             System.out.println("through SOP");
        }
}

的web.xml

<web-app>

   <servlet>
        <servlet-name>Servlet4</servlet-name>
        <servlet-class>com.aamir.Servlet4</servlet-class>
   </servlet>

   <servlet-mapping>
         <servlet-name>Servlet4</servlet-name>
         <url-pattern>/Servlet4</url-pattern>
   </servlet-mapping>

1 个答案:

答案 0 :(得分:2)

下面,

protected void service(HttpServletResponse res, HttpServletRequest req) throws IOException, ServletException {
    // ...
}

您交换了HttpServletResponseHttpServletRequest因此它与接口方法不匹配,因此它永远不会被容器调用。容器仍将调用service()模板类的原始HttpServlet方法,后者又调用doGet()模板类的原始HttpServlet方法,后者又返回HTTP 405错误。

将它们交换回正确的位置并添加@Override注释:

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
    // ...
}

这样容器实际上会调用覆盖service()方法。正确使用@Override注释将导致错误方法签名上的编译错误。

那就是说,你不应该覆盖service()方法,除非你打算再生成另一个MVC控制器(除非出于业余爱好/学习目的,否则这也是有问题的 - 另见{{ 3}})。