摘要:執(zhí)行中的方法,默認(rèn)執(zhí)行方法返回結(jié)果同樣會(huì)通過一系列攔截器,然后由指定的表現(xiàn)形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相關(guān)資源,這個(gè)底層實(shí)現(xiàn)技術(shù)屬于依賴注入。會(huì)通過配置文件初始化的資源包括攔截器,類及。
1.Struts2簡介
框架是一組程序的集合,包含了一系列的最佳實(shí)踐,作用是解決某個(gè)領(lǐng)域的問題。本質(zhì)上來講,框架只是一個(gè)jar包,其本質(zhì)上是對jdk的擴(kuò)展。
最佳實(shí)踐:
始終保證程序的可讀性、可維護(hù)性和可擴(kuò)展性
Simple is Beauty
盡可能使用面向?qū)ο蟮挠^點(diǎn)進(jìn)行編程
減少依賴,消除耦合
struts2是一個(gè)mvc框架,提供了Controller和View模塊,可以結(jié)合其他技術(shù)提供Model。Struts2非常容易擴(kuò)展,框架提供的每個(gè)類是依賴于接口。如果有需要,非常容易添加適合自己的類和應(yīng)用。
1.1.Struts2簡單運(yùn)行圖將上面的框架圖進(jìn)行簡單的抽象,可得到下面簡單的運(yùn)行示意流圖。
外部發(fā)送request請求
Filter Dispatcher檢查這個(gè)request,然后確定相應(yīng)的Action
Interceptor(攔截器)相應(yīng)的進(jìn)行運(yùn)用功能,例如workflow,數(shù)據(jù)驗(yàn)證,文件上傳等。
執(zhí)行Action中的方法,默認(rèn)執(zhí)行execute方法
返回結(jié)果同樣會(huì)通過一系列攔截器,然后由指定的表現(xiàn)形式返回,比如HTML,jsp或字面值
2.配置文件struts利用xml配置文件初始化一系列的相關(guān)資源,這個(gè)底層實(shí)現(xiàn)技術(shù)屬于依賴注入。會(huì)通過xml配置文件初始化的資源包括:攔截器Interceptor,Action類及Results。
2.1 管理元素 2.1.1 Bean配置bean元素有一個(gè)必須的屬性class,定義了某個(gè)Java class被創(chuàng)建或調(diào)用。
bean的功能:
1.對象注入:可以通過框架的container創(chuàng)建,然后注入到內(nèi)部框架對象里,一般伴隨著type屬性,告訴container這個(gè)對象實(shí)現(xiàn)implement了某個(gè)接口。
2.值注入:擁有value被注入到自身的靜態(tài)方法中,好讓不創(chuàng)建對象的容器接受框架參數(shù)。對象使用值注入必須要定義靜態(tài)方法。
屬性 | 必需 | 描述 |
---|---|---|
class | yes | bean class的名稱 |
type | no | class實(shí)現(xiàn)的主要的java接口 |
name | no | bean的唯一名字, 與其他bean獨(dú)立 |
scope | no | bean的范圍,必許是【default、singleton、request、Session、thread】中一個(gè) |
static | no | 是否注入static方法,當(dāng)type指定后一定為false |
optional | no | bean是否是強(qiáng)制可選的 |
示例
2.1.2 Constant常量配置...
constant通過定義關(guān)鍵的設(shè)置,提供一個(gè)簡單的方式去修改框架或定義行為,來達(dá)到定制struts。
constant有兩個(gè)主要功能點(diǎn):
1.用來重載設(shè)置,例如上傳文件的最大值,struts是否在“devMode”等。
2.指定哪一個(gè)bean去實(shí)現(xiàn)。
constant可以在多個(gè)文件中定義,默認(rèn)的搜索順序如下:
1.struts-default.xml
2.struts-plugin.xml
3.struts.xml
4.struts.properties
5.web.xml
如果后面某個(gè)值已被定義,則前面的值會(huì)被覆蓋。
屬性 | 必需 | 描述 |
---|---|---|
value | yes | contant的值 |
name | yes | contatn的名字 |
Constant Example (struts.xml)...
在 struts.properties文件中,每一條實(shí)例都會(huì)被初始化成constant。
Constant Example (struts.properties) struts.devMode = true
在web.xml中,F(xiàn)ilterDispatcher的初始化參數(shù)會(huì)被當(dāng)做constant載入。
2.1.3 packages配置... struts org.apache.struts2.dispatcher.FilterDispatcher struts.devMode true
packages是一種把a(bǔ)ction,result,result types,Interceptor和Interceptor stack分成一個(gè)邏輯配置單元,非常類似于對象,可以被extend,并被重寫。
Packages有一個(gè)必須的屬性name,對之后引用這個(gè)package是非常關(guān)鍵的。
2.1.4 namespace配置/empmanager/listEmployees.jsp employees
namespace避免action的名字沖突,將action的配置在細(xì)分成邏輯模塊,每個(gè)都有特點(diǎn)的前綴。默認(rèn)的namespace為“”,而root namespace為“/”。namespace的工作方式:
/a/b/c.action
先在b下搜索c.action,若b中沒有,則回退到a下搜索,若a還沒有,繼續(xù)向上回退。但回退只是單向性,不能向a、或b的兄弟目錄進(jìn)行搜索。
為了防止struts.xml配置文件過大,可以進(jìn)行拆分成多個(gè)子文件,每個(gè)都必須和struts.xml報(bào)錯(cuò)相同的格式,包括DOCTYPE,然后利用include引用起來。
2.2 請求處理元素 2.2.1 Interceptor Configurationinterceptor 允許開發(fā)者自定義代碼,然后可以在action方法執(zhí)行前或執(zhí)行后運(yùn)行。攔截器是非常強(qiáng)大的工具,可以用來驗(yàn)證數(shù)據(jù),屬性封裝,安全處理,log及在運(yùn)行時(shí)剖析代碼使用。
interceptor是由java class實(shí)現(xiàn)的,所以每個(gè)interceptor都有相應(yīng)的class name,為了使用方便,每個(gè)interceptor擁有一個(gè)簡單的唯一的名字,如果多個(gè)interceptor放在一起,可以使用stack。
多數(shù)應(yīng)用可以定義默認(rèn)的interceptor stack,如下:
對于每個(gè)action也可以定義自己的stack,但是默認(rèn)的interceptor就無法啟用,所以一般講struts-default.xml中默認(rèn)的interceptor stack添加到自定義的interceptor中。
2.2.2 action配置...
action映像是struts框架的最基本的工作單位,本質(zhì)上講,action關(guān)聯(lián)了一個(gè)標(biāo)識符和一個(gè)handle class。當(dāng)request匹配action name的時(shí)候,框架會(huì)使利用mapping來決定如何處理這個(gè)請求。在action mapping中,可以包含一系列exception處理,一個(gè)攔截器棧,一系列result types等,但是只有name是必須的,其他都可以在package的范圍內(nèi)提供。
如果需要訪問時(shí)指定action name的后綴名,則需要在struts.xml文件中配置
默認(rèn)的處理方法在Action接口中被定義
//Action interface public interface Action { public String execute() throws Exception; }
但是實(shí)現(xiàn)Action接口是可選的,如果Action中沒有實(shí)現(xiàn)execute,框架會(huì)通過反射也尋找一個(gè)execute方法。除此之外,可以通過配置文件的method,指定Action中的方法。
如果既沒有execute 也沒有其他指定的方法,框架會(huì)拋出異常。
攔截器與過濾器:
1、攔截器是基于java反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)的。
2、過濾器依賴于servlet容器,而攔截器不依賴于servlet容器。
3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。
5、在Action的生命周期中,攔截器可以多次調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65725.html
摘要:的開發(fā)流程在文件中定義核心攔截用戶請求。的最大作用是配置和請求之間的對應(yīng)關(guān)系,并配置邏輯視圖名和物理視圖資源之間的相對關(guān)系,即返回結(jié)果和文件的物理位置的關(guān)系。實(shí)現(xiàn)為了使開發(fā)的更規(guī)范,提供了一個(gè)接口,定義了的處理應(yīng)該實(shí)現(xiàn)的規(guī)范。 1.struts2的開發(fā)流程 在web.xml文件中定義核心Filter攔截用戶請求。 struts2 org.apa...
摘要:值得注意的是的值是文件的全名也就是說,如果有包,就把包名寫上并且,不需要寫上后綴標(biāo)簽使用國際化的值是配置文件中配置的信息,寫上就行了登陸測試注意,已經(jīng)替換成了中文了如果文章有錯(cuò)的地方歡迎指正,大家互相交流。 Struts2UI標(biāo)簽 Sturts2為了簡化我們的開發(fā),也為我們提供了UI標(biāo)簽...也就是顯示頁面的標(biāo)簽..... 但是呢,Struts2是服務(wù)端的框架,因此使用頁面的標(biāo)簽是需要...
摘要:創(chuàng)建一個(gè)項(xiàng)目使用創(chuàng)建項(xiàng)目右鍵選擇那一項(xiàng)是項(xiàng)目組織唯一的標(biāo)識符,實(shí)際對應(yīng)的包的結(jié)構(gòu),是目錄里的目錄結(jié)構(gòu)。一般就是填這樣子。 創(chuàng)建一個(gè)Struts2項(xiàng)目maven 使用eclipse 創(chuàng)建maven項(xiàng)目(webapp) 右鍵 new>othrer showImg(https://segmentfault.com/img/bVP83f?w=628&h=297); next showImg(h...
摘要:的入口是,而是這里要指出,和是不同的。以前認(rèn)為是的一種特殊,這就導(dǎo)致了二者的機(jī)制不同,這里就牽涉到和的區(qū)別了。開發(fā)效率和性能高于。的實(shí)現(xiàn)機(jī)制有以自己的機(jī)制,用的是獨(dú)立的方式。 1、Struts2是類級別的攔截, 一個(gè)類對應(yīng)一個(gè)request上下文,SpringMVC是方法級別的攔截,一個(gè)方法對應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè)url對應(yīng),所以說從架構(gòu)本身上SpringMVC...
摘要:前言本博文主要講解怎么與框架整合和的整合關(guān)鍵點(diǎn)對象交給來創(chuàng)建搭建環(huán)境進(jìn)入包引入文件引入相關(guān)文件相關(guān)文件支持包源碼源碼寫配置文件路徑與映射配置容器配置核心過濾器引入功能初始化的容器查看的文件文件除了要配置的分配器,還要加載的配置 前言 本博文主要講解Spring怎么與Struts2框架整合... Struts2和Spring的整合關(guān)鍵點(diǎn): action對象交給Spring來創(chuàng)建 搭建環(huán)境...
摘要:首先是應(yīng)該了解框架技術(shù)的運(yùn)行流程在此我給大家介紹一種常見的開發(fā)模式,這對于初學(xué)者來說應(yīng)該也是比較好理解的。 很多小伙伴可能一聽到框架兩個(gè)字就會(huì)馬上搖頭,腦子里立刻閃現(xiàn)一個(gè)詞---拒絕,其實(shí)我也不例外,但我想告訴大家的是,當(dāng)你真正掌握它時(shí),你會(huì)發(fā)現(xiàn)**SSH**用起來是那么順手,因?yàn)樗鼘τ陂_發(fā)web應(yīng)用真的很方便,下面就我個(gè)人經(jīng)驗(yàn)和大伙兒談?wù)勅绾卫?*SSH框架技術(shù)**來進(jìn)行*w...
閱讀 3204·2021-11-25 09:43
閱讀 3415·2021-11-11 16:54
閱讀 842·2021-11-02 14:42
閱讀 3760·2021-09-30 09:58
閱讀 3670·2021-09-29 09:44
閱讀 1287·2019-08-30 15:56
閱讀 2105·2019-08-30 15:54
閱讀 2993·2019-08-30 15:43