サーブレット学習4:redirectとforward

3420 ワード

一.コンセプト
  • redirect(指向性):クライアントがredirectリクエストを送信すると、サービス側はクライアントにリダイレクトされた一時応答ヘッダに返信し、この応答ヘッダにはリダイレクト後のURLが含まれ、クライアントは新しいURL(パラメータ損失)でURL対応サービスにリクエストを再送信する.
  • forward(転送):クライアントがforwardリクエストを送信すると、サーバ内部で転送が完了し(パラメータはまだこのrequestの中にある)、転送後の結果をクライアントに返信します.

  •  
    二.Redirect
  • HttpServletResponse.sendRedirect(String location)ソースコード
    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);
    }
  • ソースコードを見るとsendRedirectの使用がわかります
  • httpプロトコル付きで、指向性から指定されたサーバへ.
     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仕様
  • struts.xmlファイルでは、ラベルのtypeのデフォルト属性値は「dispatcher」(実際には転送、forward)です.開発者は、redirect、streamなど、自分のニーズに応じて異なるタイプを指定できます.
  • servlet 2.4仕様で、デフォルトforwardはfilterを通過しません.forwardのページもfilterを通すならxml構成は以下の通りです.
    	<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点を参考にしてチェックしてください.