1. 程式人生 > >struts2知識點總結1

struts2知識點總結1

struts2知識點總結

  • 什麼是Struts2

Struts2 是一個MVC框架,重點在控制器上

Struts1 + xword=Struts2

背景:在web開發中,不同的功能採用不同的Servlet,造成維護和管理的不便;

struts2通過過濾器,將不同的操作引導到不同的方法執行中去。

  • Struts2 的配置
  1. 匯入jar包 Struts2的壓縮包->apps->struts2-rest-showcase.war->

        WEB-INF->lib(匯入struts2-rest-plugin-2.5.18.jar可能會報錯,所以可以不匯入該包)

  1. 建立action,action是一個類,每次訪問action的時候,預設會執行execute()
  2. 配置action的訪問路徑,建立Struts2核心配置檔案:核心配置檔名稱和位置是固定的,名稱:struts.xml 位置:/src (普通javaee專案),maven專案在資原始檔下
  3. 引入dtd的約束:struts2-core-2.* ->struts-2.*.dtd中有對應的約束

  <!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

  1. action的配置(核心標籤):

package:

name屬性:包的名稱,用於區分Action

extends:標準宣告,繼承struts-default

namespace:名稱空間,用於宣告訪問專案的根路徑

        action:

            name 屬性:action 的訪問名稱

            class:action 類的全路徑

            method:執行action中的指定方法(預設執行execute)

        result:

            name:和方法的返回值對應

            type:指定頁面請求的方式

                 dispatcher(預設,轉發)

                 redirect:重定向(到jsp)

                 redirect-action:重定向到(action)

                 chain:訪問鏈

  1. 在web.xml 中配置過濾器
<filter>

    <filter-name>action</filter-name>

    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>



<filter-mapping>

    <filter-name>action</filter-name>

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

</filter-mapping>

 

  • struts2的執行過程

關於過濾器:StrutsPrepareAndExecuteFilter

過濾器在服務啟動的時候建立,建立過程時執行init方法,並載入配置檔案,包括自帶的配置檔案

default.properties

struts-default.xml

struts-plugin.xml

struts.xml

struts.propersties

web.xml

前三個是struts2 的標準內部配置檔案,無法修改,後三個可以,我們的配置重點在後面三個檔案中;啟動載入有順序;struts2 可以配置常量,後三個檔案都可以,但後面宣告的會覆蓋之前的常量

  • struts2中配置修改常量

struts.xml中修改(常用)

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

在src下建立struts.properties,並在其中修改(較少用)

在web.xml中建立(少用)

在struts2中,通過表單向action提交資料中含有中文時,框架會幫我們解決編碼的問題,不需要額外處理

  • struts2的分模組開發

使用include標籤

<include file="com/ehome/action/hello.xml"></include>
  • action的三種編寫方式
  1. 宣告一個普通的action類,不繼承也不實現任何介面
  2. 建立類,實現Action介面
  3. 建立類,繼承ActionSupport(主要)
  • 訪問action的方法(重要)
  1. 使用action標籤的method屬性,通過設定,指定要執行的action
  2. 使用萬用字元,在action標籤中,用*來設定name屬性

但struts2 2.5需要在package中配置

<global-allowed-methods>regex:.*</global-allowed-methods>

 

  1. 動態訪問方式(瞭解)

在action方法中存在返回值,如果有返回值則必須是String,也可以沒有返回值,指定execute方法返回值為void,或者返回NONE,在result標籤中就不需要配置

  • 結果頁面配置

全域性結果頁面:

如果有多個action,它們的返回值相同、配置的頁面也相同

<!--全域性結果配置,區域性優先順序更高-->

<global-results>

    <result name="success">/hello.jsp</result>

</global-results>

注:注意標籤的順序 <global-results> 要在<global-allowed-methods>regex:.*</global-allowed-methods> 之前,攔截器在最前面

區域性結構介面:

<action name="form_*" class="com.xh.ehome.control.FromAction" method="{1}">

    <result name="context">/context.jsp</result>

</action>

 

  • 在action中獲取表單提交的順序
  1. 使用ActionContext獲取(非重點)

  1. 使用ServletActionContext(重要)
  2. 使用介面注入方式(少用)

    核心: 實現ServletRequestAware介面

實現介面:

重寫setServletRequest方法,一旦被呼叫,就可以獲取request物件

把該物件賦值給Action自己定義的request物件(傳遞引用)

4、在action中操作域物件

request、session、servletContext 三種作用域的傳值

核心:使用ServletActionContext

在jsp中通過域物件獲取資料

  1. Struts2 提供獲取表單資料的方式(將獲取的表單資料進行封裝)

4.1 使用request分別獲取屬性,並呼叫bean方法(原始)

   

      4.2屬性封裝:在action中宣告表單項對應的欄位,並指定bean方法即可

4.3 模型驅動封裝(可以直接把值封裝到物件中,重點)

    核心:

action實現ModelDriven介面,並重寫getModel方法

在action中宣告實體類物件並例項化

在getModel方法中返回該實體物件,完成

注意:不能同時使用屬性封裝和模型驅動封裝,如果都用,只會執行模型驅動封裝(定義的屬性將得不到值)

        4.4 表示式封裝(非重點)

        核心:

把表單資料封裝到實體類物件中,只需建立物件不需例項化,

為該物件宣告get和set

在表單輸入項中寫表示式: user.username

 

表示式封裝和模型驅動封裝對比:都可以把資料封裝到實體類物件中去

但,模型驅動封裝只能封裝到一個實體類物件中,而表示式封裝可以封裝到多個不同的物件中

4.5表單資料封裝到List/Map 中(和表示式封裝類似)

List的封裝

 

Map的封裝