1、客戶端瀏覽器發出http請求.
2、根據web.xml配置,該請求被filterdispatcher接收
3、根據struts.xml配置,找到需要呼叫的action類和方法, 並通過ioc方式,將值注入給aciton
4、action呼叫業務邏輯元件處理業務邏輯,這一步包含表單驗證。
5、action執行完畢,根據struts.xml中的配置找到對應的返回結果result,並跳轉到相應頁面
6、返回http響應到客戶端瀏覽器
web.xml配置
struts2filter-name>
org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter
filter-class>
filter>
struts2filter-name>
/*
struts.xml配置
在struts2框架中的處理大概分為以下幾個步驟name="default"
namespace="/"
extends="struts-default">
name="hello">
/hello.jsp
result>
action>
package>
struts>
1 客戶端初始化乙個指向servlet容器(例如tomcat)的請求
2 這個請求經過一系列的過濾器(filter)(這些過濾器中有乙個叫做actioncontextcleanup的可選過濾器,這個過濾器對於struts2和其他框架的整合很有幫助,例如:sitemesh plugin)
5 actionproxy通過configuration manager詢問框架的配置檔案,找到需要呼叫的action類
6 actionproxy建立乙個actioninvocation的例項。
7 actioninvocation例項使用命名模式來呼叫,在呼叫action的過程前後,涉及到相關***(intercepter)的呼叫。
struts2的值封裝實際上是採用了ognl表示式.
struts2的***經過模型驅動時會先判斷action是否實現了modeldriven,如果是則拿到模型的例項放在了棧的頂部,
到屬性驅動的時候會從棧裡面把棧頂的例項給取出來,從頁面傳進來的值放在乙個map集合當中,
通過map集合進行迭代會通過ognl技術把值封裝到例項中。
在struts2中是使用了***來實現國際化。
國際化實現的原理:
通過i18n***獲得請求引數request——locale的值(zh或者是en)並把當前的值轉化為locale物件,把locale物件存在ww_trans_i18n_locale的session作用域中,根據struts2的請求處理流程,***只會在進入action的時候才會呼叫,所有我們一般把對jsp的訪問轉化為對action的訪問。
ognl是:物件圖形導航語言。
原ognl是單個物件的,在struts2的應用是多個物件的,struts2的型別轉換也是通過ognl來實現的。
struts2中預設的表示式語言就是ognl,struts2的取值設值都是通過ognl來實現的,struts2要依靠它的標籤才可以使用ognl。
相對於jstl或者其他表示式語言,它有如下優勢:
1 能夠呼叫物件例項的方法
2 能夠呼叫類的靜態方法
3 操作集合物件
4 訪問ognl上下文
取值時ognl有三個引數:
1 表示式,2 ognl的上下文(map),3 物件例項(值棧)。
如果表示式帶#號是從上下文中(map)拿值,否則是從值棧中拿值。
設值時有四個引數:
1 表示式,2 ognl的上下文(map),3 物件例項,4 設入的值
如果表示式帶#號是把值設入上下文中(map),否則是把值設入值棧中。
在struts2中 ognl的實現關係:actionconetxt。
ognl 3個常用的符號
$
1 在校驗框架中取資源檔案中的值。
2 可以在配置檔案中傳遞引數。
% 使用百分號可以進行轉義。
# 1 構造map,list集合。如#。
2 取ognl上下文的值。
parameters 包含當前http請求引數的map #parameters.id[0]作用相當於request.getparameter("id")
request 包含當前httpservletrequest的屬性(attribute)的map #request.username相當於request.getattribute("username")
session 包含當前httpsession的屬性(attribute)的map #session.username相當於session.getattribute("username")
3 用來過濾集合。如books.;
actioncontext(com.opensymphony.xwork.actioncontext)是action執行時的上下文,上下文可以看作是乙個容器(其實我們這裡的容器就是乙個map而已),它存放放的是action在執行時需要用到的物件,比如:在使用webwork時,我們的上下文放有請求的引數(parameter)、會話(session)、servlet上下文(servletcontext)、本地化(locale)資訊等。
在每次執行action之前都會建立新的actioncontext,actioncontext是執行緒安全的,也就是說在同乙個執行緒裡actioncontext裡的屬性是唯一的,這樣我的action就可以在多執行緒中使用。
我們可以通過actioncontext的靜態方法:actioncontext.getcontext()來取得當前的actioncontext物件,我們看看這段**:
public
static actioncontext getcontext()
return context;
}
javaweb三大框架
個人感覺struts相對來說簡單些。因為strusts只操作與serlvert,沒有關係到別的,就算是strusts2x,也是使用 攔截使用者的請求,作用到servlet。但是spring所設計的東西和層面太多,而且都是微型的 切面的程式設計,配置檔案和核心對於基礎較差的還是很有難度的,尤其是初學者...
javaWeb常用框架技術總結
struts2 為什麼每次請求都要建立乙個action物件?strust2的action裡面很多情況下都是需要定義成員變數用來接收表單上的值,如果只是乙個物件的話,那麼很可能會出現多個執行緒共用乙個成員變數 出現執行緒安全問題,因此struts2每次請求都要建立乙個action物件.modeldri...
struts校驗框架
校驗框架 雙校驗 使用校驗框架 1.在struts config.xml中加入validate plug in copy org.apache.struts.validator.validatorplugin pathnames value web inf validator rules.xml,w...