2013-04-25 86 views
2
public class RoarHistoryUpdate extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws IOException, ServletException{ 
     super.doGet(request, response); 
     System.out.println("do Get"); 
     response.setContentType("text/html"); 
     response.getOutputStream().print("Success"); 
    } 
} 

这是我的Servlet。而且它registerd在这样的web.xml文件:HTTP方法虽然GET执行doGet,但GET不受此URL支持

<servlet> 
     <display-name>RoarHistoryUpdateServlet</display-name> 
     <servlet-name>RoarHistoryUpdateServlet</servlet-name> 
     <servlet-class>de.ulm.uni.vs.avid.roary.servlets.RoarHistoryUpdate</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>RoarHistoryUpdateServlet</servlet-name> 
     <url-pattern>/Roary/UpdateServlet</url-pattern> 
    </servlet-mapping> 

当我去到URL http://localhost:8080/Roary-JSP/Roary/UpdateServlet它说HTTP Status 405 - HTTP method GET is not supported by this URL

有趣的是,我得到记录到我的控制台do Get。所以它实际上发现了doGet-方法。

我使用的是GlassFish应用服务器版3.1.2.2

回答

8

因为当你在你的servlet的doGet()方法做super.doGet(request, response);,你居然叫HttpServlet类的doget()。该Tomcat 7实现,方法是如下(可能是一个类似的实现存在Glassfish):

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException 
{ 
    String protocol = req.getProtocol(); 
    String msg = lStrings.getString("http.method_get_not_supported"); 
    if (protocol.endsWith("1.1")) { 
     resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); 
    } else { 
     resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); 
    } 
} 
+0

是的,就是这样。谢谢! – 2013-04-25 06:10:39

+0

请标记为答案,因为它对你有帮助。 – 2013-04-25 07:10:02

2

我的猜测是,这是因为调用super.doGet()的。如果您检查HttpServlet的源代码,您会看到它在响应中设置了此状态码。所以放下超级通话。这不是必需的。