2010年9月28號---J2EE學習之Spring AOP學習筆記&&Servlet請求轉發 RequestDispatcher接口

之前163博客的東西,現在轉過來方便自己閱讀 

 

spring學習筆記 2009-12-12 16:01:02 

 今天把Spring AOP大致看完了,做了一些筆記:


AOP的重要術語:(摘自Spring開發參考手冊)
  • 切面(Aspect):一個關注點的模塊化,這個關注點可能會橫切多個對象。事務管理是J2EE應用中一個關於橫切關注點的很好的例子。在Spring AOP中,切面可以使用基於模式)或者基於@Aspect註解的方式來實現。

  • 連接點(Joinpoint):在程序執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。

  • 通知(Advice):在切面的某個特定的連接點上執行的動作。其中包括了“around”、“before”和“after”等不同類型的通知(通知的類型將在後面部分進行討論)。許多AOP框架(包括Spring)都是以攔截器做通知模型,並維護一個以連接點爲中心的攔截器鏈。

  • 切入點(Pointcut):匹配連接點的斷言。通知和一個切入點表達式關聯,並在滿足這個切入點的連接點上運行(例如,當執行某個特定名稱的方法時)。切入點表達式如何和連接點匹配是AOP的核心:Spring缺省使用AspectJ切入點語法。

  • 引入(Introduction):用來給一個類型聲明額外的方法或屬性(也被稱爲連接類型聲明(inter-type declaration))。Spring允許引入新的接口(以及一個對應的實現)到任何被代理的對象。例如,你可以使用引入來使一個bean實現de>IsModifiedde>接口,以便簡化緩存機制。

  • 目標對象(Target Object): 被一個或者多個切面所通知的對象。也被稱做被通知(advised)對象。 既然Spring AOP是通過運行時代理實現的,這個對象永遠是一個被代理(proxied)對象。

  • AOP代理(AOP Proxy):AOP框架創建的對象,用來實現切面契約(例如通知方法執行等等)。在Spring中,AOP代理可以是JDK動態代理或者CGLIB代理。

  • 織入(Weaving):把切面連接到其它的應用程序類型或者對象上,並創建一個被通知的對象。這些可以在編譯時(例如使用AspectJ編譯器),類加載時和運行時完成。Spring和其他純Java AOP框架一樣,在運行時完成織入。

通知類型:

  • 前置通知(Before advice):在某連接點之前執行的通知,但這個通知不能阻止連接點之前的執行流程(除非它拋出一個異常)。

  • 後置通知(After returning advice):在某連接點正常完成後執行的通知:例如,一個方法沒有拋出任何異常,正常返回。

  • 異常通知(After throwing advice):在方法拋出異常退出時執行的通知。

  • 最終通知(After (finally) advice):當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。

  • 環繞通知(Around Advice):包圍一個連接點的通知,如方法調用。這是最強大的一種通知類型。環繞通知可以在方法調用前後完成自定義的行爲。它也會選擇是否繼續執行連接點或直接返回它自己的返回值或拋出異常來結束執行。

    Servlet請求轉發 RequestDispatcher接口(轉載)

    spring學習筆記 2010-04-12 17:04:46 

    RequestDispatcher的介紹

    2007年02月15日 星期四 下午 03:40

     

     

    RequestDispatcher是一個Web資源的包裝器,可以用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。RequestDispatcher接口中定義了兩個方法:include/forward

    由於<jsp:include>只能指定固定的jsp文件名,不能動態指定jsp文件名。我們需要把<jsp:include>翻譯爲Java code – RequestDispatcher.include();

    用法:

    <% request.getRequestDispatcher(filename).include(request, response); />

    服務器端的重定向可以有兩種方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法.

    HttpServletResponse.sendRedirect()方法將響應定向到參數location指定的、新的URL。location可以是一個絕對的URL,如response.sendRedirect("http://java.sun.com") 也可以使用相對的URL。如果location以“/”開頭,則容器認爲相對於當前Web應用的根,否則,容器將解析爲相對於當前請求的URL。這種重定 向的方法,將導致客戶端瀏覽器的請求URL跳轉。從瀏覽器中的地址欄中可以看到新的URL地址,作用類似於上面設置HTTP響應頭信息的實現。

    RequestDispatcher.forward()方法將當前的request和 response重定向到該RequestDispacher指定的資源。這在實際項目中大量使用,因爲完成一個業務操作往往需要跨越多個步驟,每一步驟 完成相應的處理後,轉向到下一個步驟。比如,通常業務處理在Servlet中處理,處理的結果轉向到一個JSP頁面進行顯示。這樣看起來類似於 Servlet鏈的功能,但是還有一些區別。一個RequestDispatcher對象可以把請求發送到任意一個服務器資源,而不僅僅是另外一個 Servlet。 include()方法將把Request Dispatcher資源的輸出包含到當前輸出中。

    注意,只有在尚未向客戶端輸出響應時纔可以調用forward()方法,如果頁面緩存不爲空,在重定向前將自動清除緩存。否則將拋出一個IllegalStateException異常。

     

    Servlet請求轉發 RequestDispatcher接口

    2008-12-31 15:33

     

     

    在Servlet中,利用RequestDispatcher對象,可以將請求轉發給另外一個Servlet或JSP頁面,甚至是HTML頁面,來處理對請求的響應。

    一,RequestDispatcher接口方法簡介  

          1,RequestDispatcher對象由Servlet容器來創建,封裝一個由路徑所標識的服務器資源。    

          2,RequestDispatcher接口中定義了二種方法用於請求轉發:    

              forward(ServletRequest,ServletResponse)方法:      

                       將請求轉發給服務器上另外一個Servlet,JSP頁面,或者HTML文件       這個方法必須在響應被提交給客戶端之前調用,否則拋出異常。      

                      方法調用後在響應中的沒有提交的內容被自動消除。    

              include(ServletRequest,ServletResponse)方法 :     

                     用於在響應中包含其他資源(Servlet,JSP頁面或HTML文件)的內容。      

                     即請求轉發後,原先的Servlet還可以繼續輸出響應信息,轉發到的Servlet對請求做出的響應將併入原先Servlet的響應對象中。      

          3,forward方法和include方法的區別:

                      forward方法調用後在響應中的沒有提交的內容被自動消除。    include方法使原先的Servlet和轉發到的Servlet都可以輸出響應信息。   

    二,得到RequestDispatcher對象  

          三種方法可以得到RequestDispatcher對象:   

                 1,利用ServletRequest接口中的getRequestDispatcher(String path)方法。   

                  2,ServletContext接口中getNamedDispatcher(String path)和getRequestDispatcher(String path)方法。

         ServletRequest接口和ServletContext接口中getRequestDispatcher方法區別:   

                  1,參數的區別    

                          參數雖然都是資源路徑名,ServletContext接口的中參數路徑必須以“/”開始,是相對於當前Servlet上下文根,     ServletRequest接口中的參數路徑不僅可以相對於當前Servlet上下文根,還可以相對與當前Servlet路徑    

                 2,跨WEB應用程序訪問資源    

                          通過ServletContext.getContext()方法獲取另個WEB應用程序的上下文環境對象來     調用getRequestDispatcher(String path)方法 將請求轉發到另個WEB應用程序的資源。                       

                         還需要在當前WEB應用程序配置中設置<context>元素,指定crossContext屬性值爲true。

    三,ServletResqonse接口中的sendReadirect()方法和forward()方法的區別  

            二個方法都是用於請求轉發的方法,轉發給另外的資源爲客戶端服務。但二者有本質的區別

           sendReadirect()方法原理:   

                  1,客戶端發送請求,Servlet1做出處理。   

                  2,Servlet1調用sendReadirect()方法,將客戶端的請求重新定位到Servlet2。   

                  3,客戶端瀏覽器訪問Servlet2.  

                 4,Servlet2對客戶端瀏覽器做出響應。

          forward()方法原理:  

                  1,客戶端發送請求,Servlet1做出處理。  

                  2,Servlet1調用sendReadirect()方法,將請求轉發給Servlet2來處理請求,爲客戶端服務。   

                  3,Servlet2對客戶端瀏覽器做出響應。      

         區別:   

              1,定位與轉發   

                       sendReadirect()方法是重新定位到另外一個資源來處理請求,URL會重新定位,讓客戶端重新訪問另外一個資源。     forward()方法是轉發到另外一個資源來處理請求。URL不會變化。隱藏了處理對象的變化。   

               2,處理請求的資源的範圍   

                     sendReadirect()方法可以跨WEB應用程序和服務器重新定位資源來處理請求。     forward()方法只能在應用程序內部轉發。

    轉載路徑:http://www.51testing.com/?uid-202848-action-viewspace-itemid-124298

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章