0


ログインフォームとログインを行うサーブレットがあります。ユーザーが有効な場合は、次のページにリダイレクトします

response.sendRedirect("welcome.jsp");

また、このページにオブジェクトを送信したいので、sendRedirect をこれに置き換えます

request.setAttribute("notes", notesObject)
disp = getServletContext().getRequestDispatcher("/welcome.jsp");
disp.forward(request, response);

現在の問題は、ユーザーがログインすると(たとえば、ユーザー/ 111)、アドレスバーに次のように表示されることです。

localhost:8084/WebApplication2/loginServlet?username=user&password=111&action=LOGIN

しかし、Sendredirectを使用したとき、私はlocalhost:8084/WebApplication2/welcome.jsp

ログイン サーブレット:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
//code...

jsp ファイル:

 <form action="loginServlet">
//code...
4

1 に答える 1

1

問題はforward()orではなく、フォームsendRedirect()からデータを送信する方法にあります。HTML

この<form>タグはGETmethod をデフォルトの HTTP メソッドとして使用することに注意してください。メソッドを明示的に指定していないため、メソッドを使用しますGET

このリンクを参照してください:

<!ATTLIST FORM
  %attrs;                              -- %coreattrs, %i18n, %events --
  action      %URI;          #REQUIRED -- server-side form handler --
  method      (GET|POST)     GET       -- HTTP method used to submit the form--
  enctype     %ContentType;  "application/x-www-form-urlencoded"
  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --
  name        CDATA          #IMPLIED  -- name of form for scripting --
  onsubmit    %Script;       #IMPLIED  -- the form was submitted --
  onreset     %Script;       #IMPLIED  -- the form was reset --
  accept-charset %Charsets;  #IMPLIED  -- list of supported charsets --
  >

これで、GETリクエストにより、すべてのフォーム データがクエリ文字列の一部になるため、そこにそれらのデータが表示されます。メソッドを に変更する必要がありますPOST

<form action="loginServlet" method = "POST">

使用中にデータが表示されなかった理由はsendRedirect()response.sendRedirect()クライアントで新しいリクエストを作成して送信するためです。そのため、古いリクエストURIはもう存在しません。これforward()ではそうではありません。URIは変更されず、元の URI とクエリ文字列が表示さます。

Sendredirectを使用したとき、私はlocalhost:8084/WebApplication2/welcome.jsp

先ほど言ったように、URIが変更されていることがわかります。したがって、元のURIに付属するクエリ文字列は表示されません。

以下も参照してください。

于 2013-08-07T07:03:06.110 に答える