java web框架 struts2複習

2021-08-01 15:29:10 字數 3082 閱讀 2948

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配置

name="default"

namespace="/"

extends="struts-default">

name="hello">

/hello.jsp

result>

action>

package>

struts>

在struts2框架中的處理大概分為以下幾個步驟

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...