2013-04-25 87 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的源代碼,您會看到它在響應中設置了此狀態碼。所以放下超級通話。這不是必需的。