2012-09-29 30 views
1

我看到了一個簡單的servlet鏈例如一個奇怪的問題,我想:Servlet的鏈接 - 簡單的例子

Servlet的1:

public class gatewayservlet extends HttpServlet { 

    public void doPost(HttpServletRequest request , 
    HttpServletResponse response) 
    throws ServletException , IOException { 
     doGet(request,response); 
    } 

    public void doGet(HttpServletRequest request , 
    HttpServletResponse response) 
    throws ServletException , IOException { 

    response.setContentType("text/plain"); 

    PrintWriter out = response.getWriter(); 

    name = request.getParameter("name"); 

    RequestDispatcher rd = getServletConfig().getServletContext().getRequestDispatcher("/justServlets/secondservlet"); 

    if(name!=null) { 
     request.setAttribute("UserName",name); 
     rd.forward(request , response); 
     // Forward the value to another Secondservlet 
    } else { 
     response.sendError(response.SC_BAD_REQUEST, 
     "UserName Required"); 
    } 

    } 

} 

的Servlet 2:

public class secondservlet extends HttpServlet { 

    public void doGet(HttpServletRequest request , 
    HttpServletResponse response) 
    throws ServletException , IOException { 

    response.setContentType("text/plain"); 

    PrintWriter out = response.getWriter(); 

    String UserName = (String)request.getAttribute("UserName"); 

    out.println("The UserName is "+ UserName); 

    } 


    public void doPost(HttpServletRequest request , 
    HttpServletResponse response) 
    throws ServletException , IOException { 
     doGet(request,response); 
    } 

} 

而調用表格:

<html> 
<body> 
<FORM ACTION="/justServlets/gateway" METHOD=POST> 
<P>Please Fill the Registration Form</p><br> 
Enter Your Name<input type="text" name="name"><br> 
<input type="submit" value="send"> 
</FORM> 
</body> 
</html> 

'POST'給出405(方法不允許)錯誤。 但是,調用第一個servlet作爲..../justServlets/gateway?name = Socrates工作。 最新情況?

回答

0

這通常發生在您正在轉發的servlet缺少與最初處理的方法相同的方法(本例中爲POST)時的處理程序。確保servlet2的確確實可以處理doPost,而且你確實正在轉發到servlet2。

+0

它確實 - 它是一個簡單的重定向到GET.And它被轉發到正確的servlet - 並且GET確實爲第二個servlet提供了相同代碼的響應。 – IUnknown

+0

它似乎是某種程序服務器緩存問題。 重新啓動服務器和應用程序工作得很好。 – IUnknown

1

假設/justServlets是你的web應用的上下文路徑,轉發應使用/secondservlet,而不是/justServlets/secondservlet的代碼,因爲,作爲the javadoc說:

路徑名必須以/開始,並且解釋爲相對於當前上下文根

(重點煤礦)

正因爲如此,你轉發到/justServlets/justServlets/secondservlet,這可能不存在。

+0

重定向工作正常,因爲我正在從第二個servlet響應第一個servlet上的GET請求。它只是POST失敗 – IUnknown