`

Struts2学习笔记

阅读更多

                                                        Struts2學習筆記

 

一.Struts1中存在的缺陷:

a.       支持的表示層技術單一,只支持jsp

b.       Servlet API严重耦合,难于测试。其中servlet中的mapping, request,response,form四个参数,其中request,response通常由web容器负责

实例化,HttpServletRequestHttpServletResponse属于web服务器,因此一旦脱离web服务器,acion的测试非常困难

c. 代码严重依赖于struts1 APIstruts1Action的每个类都要继承action的基类,当代码要重构的时,这些action类将没有利用价值

 

二、Struts2由三個部份組成:

        

FilterDispatcherFilterDispatcherstruts2框架的核心控制器,該控制器作為一個File運行在web應用中,它攔截所有的用戶請求,該Filter會過濾用戶請求(web.xml文件中配置):

 <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-pattern>/*</url-pattern>
</filter-mapping>

 

業務控制器: 業務控制器組件就是用戶實現Action類的實例,需在struts2的配置文件中配置Action的如下三個部份

  <!-- 勞委會活動3 chenhuimin 2010-10-09-->
 <package name="struts-activity3" extends="struts-default" namespace="/activity3">
 
  <!-- 抽獎資格名單 -->
  <action name="entryDataList" class="com.tkb.cla.action.activity3.EntryDataAction" method="entryDataList">
   <result name="success">/activity3/qualification.jsp</result>
  </action>
  
  <!-- 填寫抽獎資料及問卷調查 -->
  <action name="saveEDAndQList" class="com.tkb.cla.action.activity3.EntryDataAction" method="saveEDAndQList">
   <result name="input">/activity3/gameSuccess.jsp</result>
   <result name="success" type="redirect">/activity3/entryDataList.action</result>
  </action>
  
 </package>

 

 

Name: Action組件所對應的實現類

Class: Action所處理的URL

method="execute"——表示指定調用action裏面的execute方法

Result: Action 里包含的邏輯視圖和物理資源之間的對應關係:

 

Struts2不支持單獨的Action設置命名空間,而是通過為包指定namespace屬性來為包下面的所有Action指定共同的命名空間

如果某個包沒有指定namespace屬性。即該包使用默認的命名空間,則默認的命名空間總是"";

如果某個包指定了命名空間后,該包下所有的Action處理的URL應該是命名空間+Action名。例:

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

URL:

http://localhost:8888/namespace/book/find.action

通過<......namespace="/">來指定根命名空間

 

命名空間只有一個級別:如果系統找不到指定命名空間的Action,系統將直接接入默認的命名空間去查找該action,而不會到指定命名空間去查找        

用戶實現的業務邏輯組件:模型組件,視圖組件

 

. Struts2通常直接使用Action來封裝HTTP請求,因此Action類中還應該包含getset方法

由於系統是通過gettersetter方法來處理請求參數的,而不是通過屬性來處理請求參數,所以action是否包含屬性并不重要,

重要的是有gettersetter方法

 

. 一旦在Action中設置了對象的屬性值,在頁面就可以使用struts2標籤來輸出對象的屬性值<s:property value="tip"/>

 

. Action直接訪問ServletAPI

         ServletContextAware: 實現該接口的Action可以直接訪問用戶請求的ServletContext實例

ServletRequestAware:實現該接口的Action可以直接訪問用戶請求的HttpServletRequest實例

ServletResponseAware:實現該接口的Action可以直接訪問用戶請求的HttpServletResponse實例

 

. struts2框架的大致处理流程:

       1.浏览器发送请求

2.核心控制器FileDispatcher根据请求决定调用合适的Action

3.WebWork的拦截器链自动对请求应用通用功能,例如workflow,或文件上传等

4.回调Actionexecute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据保存到数据库,也可以从数据库中

检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求

5.Actionexecute方法处理结构信息将被输出到浏览器中,可以是HTML页面,图像,也可以是文档等

 

. Struts2框架是一個高度可擴展性的框架,框架的大部份核心組件,Struts2并不是直接以硬編碼的方式寫在代碼中,而是以自己的IOC(控制反轉)

容器來管理框架的核心組件,

 

. Struts2配置文件問題:因為Struts2的配置文件是從上到下處理的,所以父包應該在子包的前面

 

. Struts2的標籤庫定義文件包含在Struts2-core-2.206.jar文件中Struts-tagTld

 

. Struts2action類繼承Action與不繼承Action的區別:

繼承Actionexecute方法可以返回Action接口裡的字符串常量(return ERROR) 如不繼承則要這樣寫(return "error")struts1的比較是struts2返回的是

一個字符串,而不是一個ActionForward對象

 

十一. struts2 Action默認拦截所有后缀为.action的請求。因此我們需要將某個表單提交給Struts2 Action處理,則應該將該表單的action屬性設置為*.action

 

十二. Struts2中只要導入 <%@ taglib prefix="s" uri="/struts-tags" %>就能使用s:標籤。struts2與標籤結合緊密

 

十三.(全局驗證)在jsp頁面用  <s:fielderror></fielderror>來輸出struts2為我們驗證的表單輸入錯誤信息

struts.xml文件中可以用以下代碼替代struts2為我們驗證表單錯誤時輸出的信息

<constant  name=”struts.custom.i18n.resources”  value=”message”></constant>

struts.xml中加上<constant>后在src目錄下建立名為 message.properties files文件,然後在文件總寫入 xwork.default.invalid.fieldvalue={0}  error

其中{0}用於代替屬性名,error用於代替struts2為我們提供的錯誤輸入信息

 

14.(局部驗證,局部驗證不需要在strutsxml裏面定義<constant>)在要驗證的類的包下建立 類名+properties ”file文件,在file文件中寫入

invalid.fieldvalue.age=age conversion error  表示當age這個屬性有驗證錯誤時用age conversion error代替錯誤輸出信息

 

MyEclipse file文件中中文不能保存的處理。在D盤新建一個test的記事本,然後把file中的信息拷貝到記事本中,然後點“開始——運行——cmd——native2ascii +記事本名+你要轉換的文件類型(test.properties)”

 

另一个更简单的方法是“开始——运行——cmd——native2ascii——回车——要解码的中文——回车”

 

15.添加action級別的錯誤信息——在jsp頁面中加 <s:actionerror/>輸出acton級別錯誤信息

 

16.(局部類型轉換)局部類型轉換要在需要轉換的action的同一個包下建立“action+-conversion.properties’”的file文件,文件中寫入:

point=com.test.converter.PointConverter  point表示要轉換的屬性,後面表示要用這個類對point進行轉換。這個是局部變量類型的轉換,因為該文件

的命名是以要轉換的類的名字+“-conversion.properties”命名的

 

(全局類型轉換)在src目錄下建立名為“xwork-conversion.properties”的file文件,在文件中寫入:

com.test.bean.point=com.test.converter.PointConverter

這個是全局的類型轉換,前面是要轉換的對象,後面是用該類進行類型轉換,全局類型轉換的

文件要在src目錄下,也就是要在class目錄下

 

 

    Struts2 拦截器

 

Struts2拦截器的三种实现方式:

1.  继承Interceptor类,其中包含三个方法:

public void init() {

       System.out.println("-------我被初始化了-拦截器1-------");

    }

 

    public String intercept(ActionInvocation invocation) throws Exception {

      

       System.out.print("-------被我拦截了-拦截器1-------");

      

       String result = invocation.invoke();

      

       return result;

    }

 

    public void destroy() {

       System.out.println("-------我被銷毀了-拦截器1-------");

    }

 

2.  继承 AbstractInterceptor类,其中包括一个拦截方法,初始化跟销毁默认:

public String intercept(ActionInvocation invocation) throws Exception {      

    String result = invocation.invoke();

   

    return result;

}

 

3.  继承MethodFilterInterceptor类,实现控制对指定方法的拦截:

protected String doIntercept(ActionInvocation invocation) throws Exception {    

       String result = invocation.invoke();

      

       return result;

      

}

             

    <param name="includeMethods">execute</param>

    <param name="excludeMethods">execute</param>

这两个是methodFileterInterceptor类里面的,其中includeMethods表示把要拦截的方法包含进来,有多个用逗号隔开,excludeMethods表示不拦截的方法。注意当这两个同时定义一个方法的时候,拦截的优先级大于不拦截的优先级

 

Struts2拦截器的特点:

 

定义拦截器栈有先后顺序,定义在前面的拦截器初始化先加载,但是关闭的时候是后关闭的。在struts.xml文件中如果action里面没有引入拦截器,则默认的加载Struts2默认的拦截器defaultStack,如需多个拦截器也在action中引入,拦截器跟拦截器栈的引用是相同的。都是通过<interceptor-ref name="defaultStack"></interceptor-ref>方式引入到action

 

 

  <!-- 配置拦截器 -->
     <interceptors>
      
      <interceptor name="myInterceptor" class="com.test.interceptor.Myterceptor">
       <param name="hello">china</param>
      </interceptor>
      
      <interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2">
      </interceptor>
      
      <interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">
      </interceptor>
      
      <!-- 拦截器栈 -->
      <interceptor-stack name="myStack">
      
       <interceptor-ref name="myInterceptor"></interceptor-ref>
       
       <interceptor-ref name="defaultStack"></interceptor-ref>
       
      </interceptor-stack>
      
     </interceptors>

 

 

Struts2的校验框架

1.文件名为"类名+ '-validate'"的xml文件
2.验证xml文件必须跟类放在同一个包中
Check-test-validation.xml(Check是一个类,这样的意思是校验Check类中的test方法,方法被调用的时候他的验证也会被调用,所以最好针对方法进行校验)

3. <field name="password">
  <field-validator type="requiredstring">
   <param name="minLength">6</param>
   <param name="maxLength">10</param>
   <message>password should be between ${minLength} and ${maxLength}</message>
  </field-validator>
 </field>
 
 <!-- 日期验证 -->
 <field name="brithday">
  <field-validator type="requiredstring">
   <message>birthday should not be blank!</message>
  </field-validator>
  
  <field-validator type="date">
   <param name="min">2010-01-01</param>
   <param name="max">2010-03-01</param>
   <message>birthday should be betwent ${min} and ${max}</message>
  </field-validator>
 </field>
 
 
一个field对应一个表单元素

 

 

 

 

文件上傳在struts2。xml文件中的配置

<!-- struts2文件上传 -->
   <action name="strutsUpload" class="com.test.strutsupload.StrutsUpload">
    
    <result>/MyUploadOut.jsp</result>
    <result name="input">/MyUploadOut.jsp</result>
    
    
    <interceptor-ref name="fileUpload">
     <param name="maximumSize">409600</param>
     <param name="allowedTypesSet">application/msword</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
   </action>

分享到:
评论

相关推荐

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    struts2学习笔记

    以上就是Struts2学习笔记中涵盖的主要知识点,这些内容涵盖了从基础到进阶的应用,对于理解和掌握Struts2框架至关重要。尽管对于初学者来说可能有些复杂,但随着深入学习,你会发现Struts2的强大和实用性。

    struts2学习笔记(完美总结)——转自OPEN经验库

    Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...

    struts 2 学习笔记

    在Struts2中,学习笔记通常会涵盖以下几个关键概念: 1. **源代码查看和Javadoc**:开发者可以通过查看源代码来理解Struts2的工作原理,而Javadoc则提供了API文档,帮助理解类和方法的功能。 2. **包(Package)和...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

Global site tag (gtag.js) - Google Analytics