Struts複習

 

  • Struts複習
    •   Struts流程
      • 一、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;前端

        二、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh、Plugin);java

        三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否須要調用某個Action(2.1.3開始核心控制器是StrutsPrepareAndExecuteFilter);apache

        四、若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy;json

        五、ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類;瀏覽器

        六、ActionProxy建立一個ActionInvocation的實例。安全

        七、ActionInvocation實例(它應該對應到具體的Method<不肯定>)使用命名模式(裏面聲明瞭一個接口,接口裏面只有一個方法,使用到命名模式的主方法傳入的「命令」就是這個接口參數,主方法直接調用接口裏面的這個方法就行)來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。服務器

        八、一旦Action執行完畢,ActionInvocation負責根據struts、xml中的配置找到對應的返回結果。返回結果一般是(但不老是,也多是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。在表示的過程當中可使用Struts2框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper。session

    •   Struts文件加載順序
      1. 第一個加載的是default.properties文件 ,主要是聲明瞭struts2框架的常量 
      2. 第二個加載的是一批配置文件app

        • Strtus-default.xml,主要是聲明瞭默認的攔截器等
        • Strtus-plugin.xml 插件的配置聲明框架

        • 本身的Strutsxml
    •   package的namespace屬性與.action標籤的name屬性聯合使用來肯定一個action 的訪問路徑
    • 當一個請求來時,若是查找不到指定的class及對應的method就會執行ActionSupport類中的execute方法。

    • 能夠直接在strtus.xml文件中定義常量 (推薦)

    • Action訪問(通配符)

  

    •   Action的建立方式三種 ActionSupport Action接口 POJO
    • 接收參數 
      • 模型驅動

        •   1.Action類要實現一個指定接口ModelDriven

          2.實例化模型對象(就是要new出來javaBean)

          3.重寫getModel方法將實例化的模型返回。

      • 屬性驅動

        直接在action類中提供與請求參數匹配屬性,提供get/set方法

 

    •  Struts2中獲取Servlet API,ServletActionContext獲取
    • 若是從根中獲取數據,不須要添加#號,若是不是從根中獲取,須要#

    • struts2框架中咱們使用ognl表達式的做用是從valueStack中獲取數據

    • 想在jsp頁面上使用ognl表達式,就須要結合struts2框架的標籤,<s:property value=」表達式」>來使用

       

    • 咱們使用valueStack的主要目的是爲我將咱們action中產生的數據攜帶到頁面上,也就是說valueStack它就是一個容器,接口,。咱們主要使用的是它的實現類com.opensymphony.xwork2.ognl.OgnlValueStack,struts2框架將valueStack保存在request中。

      當客戶端向咱們發送一個請求,服務器就會創始一個Action來處理請求,struts2中的action是一個多例,每一次請求都會有一個新的action對應。因此它不存在線程安全問題。

       

    • request---ActionContext----Action-----ValueStaci它們都對應着一次請求(一個線程).

    • 獲取Valuestack
      •  

        第一種方式:能夠直接經過request對象來獲取.

         

         

      •     

        第二種方式:使用ActionContext來獲取

         

    • ActionContext它是action上下文,strtus2框架它使用actionContext來保存Action在執行過程當中所須要的一些對象,例如 session, application… 

      ActionContext的獲取  是經過它的靜態方法getContext()獲得。

      Struts2會根據每一次的http請求來建立對應的ActionContext,它是與當前線程綁定的。

      每一次請求,就是一個線程,對應着一個request,每一次請求,會建立一個Action,每個action對應一個ActionContext.每一次請求也對應着一個valueStack.

      request---ActionContext----Action-----ValueStaci它們都對應着一次請求(一個線程).

    •  向Valuestack中存儲數據 valueStack.set("username","tom"); 獲取<s:property value="username"/>
    •  

      問題:爲何el表達式能夠從valueStack中獲取數據?

      org.apache.struts2.dispatcher.StrutsRequestWrapper

      Struts2框架對request進行了加強,重寫了getAttribute方法,若是在request域中查找不到數據,就會在valueStack中獲取。

    •  要想在頁面上展現集合信息可使用<s:iterator>標籤來完成

       

    •  攔截器
      •   全部的Interceptor都要實現一個接口

        com.opensymphony.xwork2.interceptor.Interceptor

      • 在配置文件中聲明Interceptor

        咱們也能夠將多個interceptor封裝成一個stack

         

      •    

        能夠在Action的配置中引入本身的interceptor

        注意:當咱們顯示的引入了一個自定義的Interceptor,那麼默認的defaultStack就不會在導入,須要手動導入

      •  

      •    

         

      •   

         

    • 文件上傳
      •   

        表單提交方式method=post

        表單中必須有一個<input type=」file」>組件

        表單中必須設置enctype=」multipart/form-data」

      •  

      •  

      • 注意這裏的servletContext就是application

         

      • 還須要配置文件上傳大小

         

      • 多個文件
    •  FastJson
      •   對於User對象

         

      •    對於List<User>

         

      • 若是對Date類型進行格式化輸出

      • 關於屬性是否生成在json串中設置

    •  Jackson
      •   

         設置如期

      •  

      • 過濾屬性

         

         

    •  返回數據
      •   

         

      • ServletActionContext.getResponse().getWriter().writer(json);
      • 前端-->var jsonObj = eval(data);
    •  Struts返回json數據
      •   

         

      • 將咱們本身配置文件中的<package extends=」json-default」>

      • Action的返回視圖<result name=」」 type=」json」>配置了上面兩步,那麼struts2框架就會將valueStack中的棧頂元素轉換成json響應到瀏覽器

      • 服務器端
      •  

    •  註解開發
      •   

         

    •  interceptor控制登陸
      •  建立一個類來實現Interceptor接口或繼承MethodFilterInterceptor
      •  struts.xml文件中聲明(注意有一個interceptor以及interceptor-stack都須要聲明)
      • action的配置中引用

相關文章
相關標籤/搜索