为什么我得到 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>
答案 0 :(得分:2)
下面,
protected void service(HttpServletResponse res, HttpServletRequest req) throws IOException, ServletException {
// ...
}
您交换了HttpServletResponse
和HttpServletRequest
因此它与接口方法不匹配,因此它永远不会被容器调用。容器仍将调用service()
模板类的原始HttpServlet
方法,后者又调用doGet()
模板类的原始HttpServlet
方法,后者又返回HTTP 405错误。
将它们交换回正确的位置并添加@Override
注释:
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
// ...
}
这样容器实际上会调用覆盖service()
方法。正确使用@Override
注释将导致错误方法签名上的编译错误。
那就是说,你不应该覆盖service()
方法,除非你打算再生成另一个MVC控制器(除非出于业余爱好/学习目的,否则这也是有问题的 - 另见{{ 3}})。