1.RequestDispatcher.forward() は
サーバー側で機能します。 forward() を使用すると、サーブレット エンジンは現在のサーブレットまたは JSP から別のサーブレット、JSP、または通常の HTML ファイルに HTTP リクエストを渡します。つまり、フォームが送信されます。 a.jsp では、a.jsp で forward() を使用して b.jsp にリダイレクトします。このとき、フォームから送信されたすべての情報は b.jsp で取得でき、パラメータは自動的に渡されます。
ただし、 forward() はフレームを含む jsp ファイルにリダイレクトすることはできません。同時に、servlet?name=frank などの最後にパラメーターを指定して forward() を渡すこともできません。これが機能しない場合は、プログラム内で応答を渡すことができます。 .setAttribute("name",name)
例: サーブレットでのリダイレクト
。
コード コンテンツは通常、JSP ではなくサーブレットで使用されます。
public void doPost(HttpServletRequest リクエスト,HttpServletResponse レスポンス)
ServletException、IOExceptionをスローします ...{
response.setContentType("text/html; charset=gb2312");
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp"); //ダイレクトページ
rd.forward(リクエスト、レスポンス);
}
2.response.sendRedirect()
sendRedirect() はユーザーのブラウザ上で動作し、servlet?name=frank などのパラメータを次のページに渡すことができます。同時に、sendRedirect() は jsp ファイルをリダイレクトできます。
リダイレクト後、リダイレクトされたページの URL がブラウザのアドレス バーに表示されます。
例: サーブレットでのリダイレクト
コードの内容
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException ...{
response.setContentType("text/html; charset=gb2312")
;
}
応答は JSP ページ内の暗黙的なオブジェクトであるため、response.sendRedirect() を使用して JSP ページ内に再配置を直接実装できます。
注:
(1) response.sendRedirect を使用する場合、前に HTML 出力を置くことはできません。
これは絶対的なものではありません。HTML 出力がないということは、実際には HTML をブラウザに送信できないことを意味します。実際、今日のサーバーには通常 8K (つまり JSP SERVER) のキャッシュ メカニズムが備わっています。これは、キャッシュをオフにするか、out.flush() を使用して強制的に更新しない限り、sendRedirect を使用する前に少量のキャッシュ メカニズムを備えていることを意味します。 HTML 出力も許可されます。
(2) .response.sendRedirect の後には return が続く必要があります。response.sendRedirect
がブラウザを通じてリダイレクトされることはすでにわかっているため、ページの処理が完了するまで実際のアクションは発生しません。すでに舵取りを行ったところで、最終的な出力にはどのような意味があるのでしょうか?そして、その後の出力によりステアリングが失敗する可能性があります。
比較する:
(1).Request Dispatcher.forward() はコンテナ内のコントロールのリダイレクトであり、リダイレクトされたアドレスはクライアント ブラウザのアドレス バーには表示されません。
(2).response.sendRedirect() は完全なジャンプです。ブラウザはジャンプ アドレスを取得し、リクエスト リンクを再送信します。このようにして、ブラウザのアドレスバーにジャンプ後のリンクアドレスが表示されます。
前者の方が効率的である場合は、RequestDispatcher.forward() メソッドを使用してください。
たとえば、別のサーバー上のリソースにジャンプする必要がある場合は、 HttpServletResponse.sendRequest() メソッド。
3.<jsp:forward page="" />
基礎となる部分は RequestDispatcher によって実装されるため、RequestDispatcher.forward() メソッドの影響を受けます。 <jsp:forward> の前に大量の出力があり、前の出力によってバッファーがいっぱいになり、自動的にクライアントに出力される場合、このステートメントは機能しません。これには特に注意する必要があります。
また、ブラウザのアドレスを変更することはできません。更新すると送信が繰り返されることになります。
4. リダイレクトするように HTTP ヘッダーの Location 属性を変更します。
アドレスバーを直接変更してページをリダイレクトします。
jsp ファイルのコードは次のとおりです。
コード内容: 5. JSP は、特定のページに数秒間滞在した後、別のページへの自動リダイレクトを実装します。
HTML ファイルには次のコードが含まれます。
<meta http-equiv="refresh" content="300; url=target.jsp">
意味: 5 分後、閲覧しているページは自動的に target.html ページに変わります。コード内の 300 は、秒単位のリフレッシュ遅延時間です。 target.html がリダイレクト先のターゲット ページである場合、このページは自動的に更新されます。
上記からわかるように、setHeader を使用すると、ページに数秒間滞在した後に別のページに自動的にリダイレクトできます。
キーコード:
コードの内容
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
文字列 newLocn = "/newpath/jsa.jsp";
response.setHeader("場所",newLocn);
%>
文字列コンテンツ=滞在時間+";URL="+URL;
response.setHeader("REFRESH",content);