1. 程式人生 > >struts2入門01

struts2入門01

1、概述

struts2框架應用javaEE三層結構中的web層,用於顯示。

struts2框架在struts1和webwork基礎之上發展全新的框架

struts2解決的問題:配置過濾器攔截請求(該類有不同的方法,根據不同請求,執行不同的方法),該類稱為action

版本:2.3.24-all比較穩定

web層常見框架:springMVC框架,struts2框架

2、入門案例

第一步:建立web專案

第二步:匯入struts框架的jar包,直接在例項程式中找jar包

第三步:建立action

(1)、(java web)每次訪問servlet的時候,都會執行service方法

(2)、訪問action,每次訪問action時候,預設執行execute方法,建立execute方法

(3)、配置action類的訪問路徑:

a、建立struts2核心配置檔案(struts.xml);

b、引入dtd約束,根標籤<struts></struts>;

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

c、配置action:

<package  name="demo" extends="struts-default" namespace="/">
    <action name="hello" class="全類名">
        //響應的頁面
        <result name="ok">/hello.jsp</result>
    </action>
</package>

d、訪問路徑:http://127.0.0.1/demo/hello.action

e:配置過濾器:在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>

*404:伺服器未啟動or過濾器有問題

3、struts底層基本執行過程

瀏覽器輸入地址傳送請求>過濾器(在伺服器啟動時就建立了)>獲取到請求的路徑URL(得到uri)>在src下面找到struts.xml,使用dom4j解析,得到xml中內容(action標籤,匹配那麼屬性)>匹配name屬性值一樣,找到name屬性所在的classs屬性值,得到action全路徑,使用反射實現功能>執行反射程式碼>得到action方法的返回值,在struts.xml檔案中,找到action標籤中result標籤,匹配result標籤的name屬性,如果一樣,跳轉到配置頁面中。

//反射程式碼:讓action的方法執行
Class clazz = Class.forName("action全路徑");
//得到名稱是execute方法
Mothod m = clazz.getMethod("execute");
//方法執行
Object obj = m.invoke();

4、原始碼檢視

StrutsPreparAndExecuteFilter是struts的過濾器,init()方法

在啟動伺服器的時候建立過濾器,建立過濾器的時候載入init()方法,在init方法中載入主要配置檔案(自己建立的檔案<web.xml,struts.xml>和struts2自帶的檔案)

5.struts配置

A、核心配置檔案:名稱和路徑是固定的(名稱<struts.xml>,路徑<專案的src下>);

B、配置檔案中主要三個標籤package、action、result。

package標籤
    1.類似於程式碼包,區別不同的action,要配置action,必須先寫package標籤,才能配置。
    2.屬性:name屬性>與功能無關,在一個配置檔案中,多個package的name屬性值不能相同
            extens屬性>表示繼承的關係,屬性值固定struts-default,配置後,表示在package裡面配置的類才具備action功能
            namespace屬性>名稱空間,屬性值需要與action的name屬性值構成訪問路徑/或者/url/

action標籤
    1.用於配置action訪問的路徑
    2.屬性:name屬性>屬性值需要與package的namespace屬性值構成訪問路徑,可以有多個action,但name不      能相同
            class屬性>action全路徑
            method屬性>action預設執行execute方法,也可以執行其它方法,讓action裡面多個方法執行,使用該屬性進行配置

result標籤
    1.根據action裡面的方法返回值,配置到不同的路徑裡面
    2.屬性:name屬性>和方法的返回值一樣
            type屬性>配置如何到路徑中去(轉發,重定向等),預設是做轉發操作

*轉發請求一次,位址列不會發生變化,重定向請求兩次,位址列發生改變

6、修改struts2預設常量值

(1)常用方式
    在struts.xml中進行配置
    <constant name = "struts.i18n.encoding" value="UTF-8"></constant>
 (2)其它方式<2種>
    -在src下面建立struts.properties,進行修改
    -在web.xml檔案中進行配置

7、介紹常用的常量(待續)

struts.i18n.encoding=UTF-8
(1)表單提交到action裡賣弄,在action可以獲取表單提交資料
(2)表單提交資料有中文,有亂碼問題,解決:post提交直接設定,get提交做編碼轉換
(3)如果在action獲取表單通過post方式提交中文,中文亂碼問題不需要自己處理

8、分模組開發

(1)單獨寫配置檔案
(2)核心配置檔案中引入其它配置檔案
    <include file="cn/itcast/action/other.xml"></include>

9、action編寫方式

action編寫有3中方式
第一種方式:建立普通類,不繼承任何類,也不實現任何介面
第二種方式:建立類,實現介面action(用得不是很多)
第三種方式:建立類,繼承actionsupport(主要使用的方式)

10、訪問action的方法

一共有三種方式
第一種:使用action標籤中的method屬性,在這裡面寫執行的action的方法
    <action name="add" class="com.xx.action" method="add"></action>
第二種:使用萬用字元方式實現(重點使用)
    表示匹配任意,name屬性裡面新增‘*’,book_*等進行匹配
    <action name="book_*" class="com.xx.action" method="{1}"></action>method是*的值
第三種:動態訪問實現(不用)
    1.開啟struts.enable.DynamicMethodInvocation常量,設定值為true
    2.訪問:bookAction!add.action

11、域物件操作

1、request
    HttpServletRequest request = ServletActionContext.getRequest();
    request.setAttribute(key,value);
2、session
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpSession session = request.getSession();
    session.setAttribute(key,value);
3、ServletContext
    HttpServletRequest request = ServletActionContext.getRequest();
    ServletContext context = ServletActionContext.getServletContext();
    context.setAttribute(key,value);