サーブレット学習4:redirectとforward
3420 ワード
一.コンセプト redirect(指向性):クライアントがredirectリクエストを送信すると、サービス側はクライアントにリダイレクトされた一時応答ヘッダに返信し、この応答ヘッダにはリダイレクト後のURLが含まれ、クライアントは新しいURL(パラメータ損失)でURL対応サービスにリクエストを再送信する. forward(転送):クライアントがforwardリクエストを送信すると、サーバ内部で転送が完了し(パラメータはまだこのrequestの中にある)、転送後の結果をクライアントに返信します.
二.Redirect HttpServletResponse.sendRedirect(String location)ソースコード ソースコードを見るとsendRedirectの使用がわかります httpプロトコル付きで、指向性から指定されたサーバへ. 他のタイプは、内部サーバにジャンプします.
三.forwardは、要求パスと転送パスに基づいて、内部でジャンプを完了する.
四.struts仕様 struts.xmlファイルでは、ラベルのtypeのデフォルト属性値は「dispatcher」(実際には転送、forward)です.開発者は、redirect、streamなど、自分のニーズに応じて異なるタイプを指定できます. servlet 2.4仕様で、デフォルトforwardはfilterを通過しません.forwardのページもfilterを通すならxml構成は以下の通りです. プロジェクトに現れた場合、
二.Redirect
public void sendRedirect(String location) throws IOException {
if (isCommitted())
throw new IllegalStateException
(sm.getString("coyoteResponse.sendRedirect.ise"));
// Ignore any call from an included servlet
if (included)
return;
// Clear any data content that has been buffered
resetBuffer();
// Generate a temporary redirect to the specified location
try {
//1. ocation
String absolute = toAbsolute(location);
//2. 302
setStatus(SC_FOUND);
//3. Location
setHeader("Location", absolute);
} catch (IllegalArgumentException e) {
setStatus(SC_NOT_FOUND);
}
// Cause the response to be finished (from the application perspective)
setSuspended(true);
}
http://localhost:8080/CoreServer/page/report/report.jsp
httpServletResponse.sendRedirect("http://www.baidu.com");
=====>
http://www.baidu.com。
http://localhost:8080/CoreServer/page/report/report.jsp httpServletResponse.sendRedirect("www.baidu.com");
=====>
http://localhost:8080/CoreServer/page/report/www.baidu.com。
httpServletResponse.sendRedirect("reportList.jsp);
=====>
http://localhost:8080/CoreServer/page/report/reportList.jsp。
三.forward
http://localhost:8080/CoreServer/page/report/report.jsp( ) HttpServletRequest.getRequestDispatcher("t1.jsp").forward(request, response);( )
http://localhost:8080/CoreServer/page/report/t1.jsp 。
四.struts仕様
<filter>
<filter-name>jspFilter</filter-name>
<filter-class>com.cb.cbms.coreserver.servlet.JspFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jspFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher> //forward filter, filter
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
** 。
は上記の2点を参考にしてチェックしてください.