1

私が試している単純なサーブレットチェーンの例に奇妙な問題があります。

サーブレット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");
    }

  }

}

サーブレット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(メソッドは許可されていません)エラーを出します。ただし、最初のサーブレットを..../justServlets/gateway?name=Socratesとして呼び出すことはできます。どうしたの?

4

2 に答える 2

1

それがWebアプリケーションのコンテキストパスであると仮定すると/justServlets、転送するコードは使用する必要があり、使用する必要は/secondservletありません/justServlets/secondservlet。これは、javadocが言うように:

パス名は/で始まる必要があり、現在のコンテキストルートを基準として解釈されます。

(強調鉱山)

そのまま、に転送していますが/justServlets/justServlets/secondservlet、おそらく存在しません。

于 2012-09-29T06:51:21.310 に答える
0

これは通常、転送するサーブレットに、最初に処理されたのと同じメソッド(この場合はPOST)のハンドラーがない場合に発生します。servlet2が実際にdoPostを処理し、実際にservlet2に転送していることを確認してください。

于 2012-09-29T06:44:51.967 に答える