JSP転送とリダイレクトの区別分析

3634 ワード

長い間見ないで、また基礎を忘れただけです.今日はよく見てみましょう.ほほほ......温故知新啊!!!
1.RequestDispatcher.forward()D,D転送はサーバ側で機能し、forward()を使用する場合、サーブレットengineはHTTP要求を現在のサーブレットor JSPから別のサーブレット、JSPまたは通常のHTMLファイル、すなわちあなたのformをa.jspに提出し、a.jspでforward()を用いてb.jspにリダイレクトし、このときformが提出したすべての情報はb.jspで入手でき、パラメータは自動的に伝達する.しかしforward()はframeのあるjspファイルにリダイレクトすることができず、frameのあるhtmlファイルにリダイレクトすることができ、forward()はservletなどのパラメータを後ろに持って渡すことができません.name=frank、これではだめです.プログラム内でresponseを通過することができます.setAttribute("name",name)は、次のページに渡される.
転送後のブラウザアドレスバーURLは変わらない.
例:servletでリダイレクト
 
  
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
         response.setContentType("text/html; charset=gb2312");
         ServletContext sc = getServletContext();
         RequestDispatcher rd = null;
         rd = sc.getRequestDispatcher("/index.jsp");      //
         rd.forward(request, response);
}

通常servletで使用され、jspでは使用されません.
2.response.sendRedirect()D�Dリダイレクトはユーザーのブラウザ側で動作し、sendRedirect()はservletなどのパラメータを持って伝達することができますか?name=frankは次のページに転送され、異なるホストにリダイレクトすることができ、sendRedirect()はframeにリダイレクトすることができる.のjspファイルです.リダイレクトするとブラウザのアドレスバーにリダイレクトページのURL例が表示されます:servletでリダイレクト
 
  
public void doPost(HttpServletRequest request,HttpServletResponse response)

         throws ServletException,IOException
{
         response.setContentType("text/html; charset=gb2312");
         response.sendRedirect("/index.jsp");
}


responseはjspページの隠しオブジェクトであるため、jspページではresponseを用いることができる.sendRedirect()は直接再配置を実現する.
responseはjspページの隠しオブジェクトであるため、jspページではresponseを用いることができる.sendRedirect()は直接再配置を実現する.
注意:(1).responseを使用する.sendRedirectの場合、前にHTML出力はありません.これは絶対的なものではなく、HTML出力があってはいけないということは、実はHTMLがブラウザに送られてはいけないということです.実際、現在のserverにはcacheメカニズムがあり、一般的に8 K(JSP SERVERという)で行われています.これは、cacheを閉じたり、outを使用したりしない限りを意味します.flush()は強制的にリフレッシュされ、sendRedirectを使用する前に、少量のHTML出力も許可されます.(2).response.sendRedirectの後、returnに続くべきです.我々は知ってるsendRedirectはブラウザで転向するので,ページ処理が完了した後にのみ実際の動作が行われる.あなたがすでに転向しなければならない以上、後の出力には何の意味がありますか?また、後の出力でステアリングが失敗する可能性があります.比較:(1).Request Dispatcher.forward()はコンテナ内の制御権の転向であり、クライアントブラウザのアドレスバーに転向後のアドレスは表示されない.(2).response.sendRedirect()は完全なジャンプであり,ブラウザはジャンプのアドレスを取得し,要求リンクを再送信する.これにより、ブラウザのアドレスバーからジャンプ後のリンクアドレスが表示されます.前者の方が効率的である、前者が必要を満たす場合には、RequestDispatcherをできるだけ使用する.forward()メソッド
注意:場合によっては、他のサーバにジャンプするリソースが必要な場合は、HttpServeretResponseを使用する必要があります.sendRequest()メソッド.
3.
その下位部分はRequestDispatcherによって実現されるため、RequestDispatcherを有する.forward()メソッドの印.
以前に多くの出力があり、前の出力がバッファをいっぱいにしてクライアントに自動的に出力された場合、文は機能しません.この点は特に注意してください.また、ブラウザのアドレスを変更することはできません.リフレッシュすると、繰り返しコミットされます.
4.HTTPヘッダのLocation属性を変更してリダイレクトアドレスバーを直接変更することでページのリダイレクトを実現する.jspファイルコードは以下の通りです.
 
  
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
%>

5.JSPであるページに数秒滞在した後、自動的に別のページにリダイレクトすることを実現する
htmlファイルで、次のコードを使用します.
    
5分後に閲覧中のページが自動的にtargetになります.htmlというページです.コード中の300はリフレッシュの遅延時間であり、秒単位である.targer.htmlはあなたが転向したいターゲットページで、このページであれば自動的にこのページをリフレッシュします.
以上より,setHeaderによりあるページが数秒滞在した後,自動的に別のページにリダイレクトできることが分かった.
キーコード:
    
 
  
           String content=stayTime+";URL="+URL;
           response.setHeader("REFRESH",content);