Struts2簡介


1、什么是Struts?
  ØApache軟件基金會贊助的一個開源項目
  ØMVC經典設計模式中的一個經典產品
  Ø充當控制器的作用
    
2、Struts1與Struts2的對比
    
    
3、web.xml配置Struts2核心過濾器

Struts2核心過濾器不會攔截jsp/html頁面請求

<filter>

    <filter-name>struts2</filter-name>

    <filter-class>

  <!-- 核心過濾器 -->

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

    <filter-name>struts2</filter-name>

  <!– url請求匹配規則 -->

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

過濾器版本:

 

  struts2.0.x到2.1.2版本的核心過濾器是FilterDispatcher
  struts2.1.3開始核心過濾器是StrutsPrepareAndExecuteFilter
  如果自定義過濾器的話,是要放在strtus2的過濾器之前的,如果放在struts2過濾器之后,自定義過濾器對action的過濾作用就廢了,不會有效!除非是訪問jsp/html! 
  StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在這兩個過濾器之間加上我們自己的過濾器
 
過濾器配置:
  url-pattern:過濾action請求
  全匹配:/*或者*
  前綴匹配: /struts/*
  后綴匹配:*.action
  絕對匹配:/struts/login
 

 

4、struts2配置文件

<struts>

 <package name="firstStruts" extends="struts-default" namespace="/struts">

<action name="action1" class="com.hikvision.finance.business.login.action.LoginAction"></action>

<action name="action2" method="method2" class="com.hikvision.finance.business.login.action.LoginAction">

</action>

<!-- 動態方法調用 -->

<action name="action3!*" method="{1}" class="com.hikvision.finance.business.login.action.LoginAction">

</action>

<action name="action4" method="method4" class="com.hikvision.finance.business.login.action.LoginAction">

  <result name="login" type="dispatcher">/views/login.jsp</result>

</action>

</package>

</struts>

5、Struts2攔截器

   攔截器概念
  攔截器 Interceptor,在AOP(Aspect-Oriented Programming)中用於在某個方法或字段被訪問之前進行攔截,然后在訪問之前或之后加入某些操作。
  攔截器棧就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或字段時,攔截器棧中的攔截器就會按其定義的順序被依次調用。
  Struts2的默認攔截器是struts-default,其他攔截器繼承struts-default
6、過濾器Filter和攔截器Interceptor

<package name="json" extends="struts-default"  namespace="/" >

<interceptors>

<!-- 定義一個包含權限控制的攔截器 -->

<interceptor name="authority" class="com.hikvision.common.interceptor.AuthorizationInterceptor"/>

<!-- 定義一個包含權限控制的攔截器棧 -->

<interceptor-stack name="IMVSDefault">

<interceptor-ref name="defaultStack" />

<interceptor-ref name="authority" />

</interceptor-stack>

</interceptors>

<!-- 定義默認攔截器 -->

<default-interceptor-ref name="IMVSDefault" />

<!-- 定義全局處理結果 -->

    <global-results>

        <result name="login" type="redirect">/login.jsp</result>

        <result name="noauth">/common/timeout.jsp</result>

    </global-results>

</package>

 

7、過濾器Filter和攔截器Interceptor

 

8、值棧(ValueStack)

  每個Action類的對象實例會擁有一個ValueStack對象, ValueStack和請求是一一對應的。
  當 Struts 2接收到一個.action的請求后,會先建立Action類的對象實例,但並不會調用Action方法,而是先將Action類的相應屬性放到 ValueStack對象的頂層節點(ValueStack對象相當於一個棧)。只是所有的屬性值都是默認的值,如String類型的屬性值為   null,int類型的屬性值為0等。
  在處理完上述工作后,Struts2就會調用攔截器鏈中的攔截器,當調用完所有的攔截器后,會將 ValueStack對象頂層節點中的屬性值賦給Action類中相應的屬性,最后會調用Action類的Action方法。
  在Struts 2調用攔截器的過程中,可以改變ValueStack對象中屬性的值,當改變某個屬性值后,Action類的相應屬性值就會變成在攔截器中最后改變該屬性的這個值。
  獲得請求參數的攔截器是params,獲得Action的配置參數的攔 截器是staticParams。
 
    
     ValueStack實際上就是對OGNL的封裝,OGNL主要的功能就是賦值與取值,Struts2正是通過ValueStack來進行賦值與取值的!
     ValueStack是一個接口,而OgnlValueStack是strtus2中的缺省實現。ValueStack中的數據,分兩個部分存放:root和context(這與OGNL中的概念一致),同時ValueStack暴露相關的接口:
  1. void setValue(String expr, Object value);  
  2.   
  3. Object findValue(String expr);

     用來通過OGNL表達式對ValueStack中的數據進行操作!
     ValueStack中的root對象是CompoundRoot,CompoundRoot繼承了ArraryList,提供了額外的方法:push()和pop()方法,用來對root對象中所包含的數據進行存取!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM