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);