2012-09-29 21 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