真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Struts2工作原理的示例分析

這篇文章主要介紹Struts2工作原理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括渾江網(wǎng)站建設(shè)、渾江網(wǎng)站制作、渾江網(wǎng)頁制作以及渾江網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,渾江網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到渾江省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、工作原理

在Struts2框架中的處理大概分為以下幾個(gè)步驟

      1 客戶端初始化一個(gè)指向Servlet容器(例如Tomcat)的請求

      2 這個(gè)請求經(jīng)過一系列的過濾器(Filter)(這些過濾器中有一個(gè)叫做ActionContextCleanUp的可選過濾器,這個(gè)過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)

      3 接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個(gè)請是否需要調(diào)用某個(gè)Action

      4 如果ActionMapper決定需要調(diào)用某個(gè)Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy

      5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類

      6 ActionProxy創(chuàng)建一個(gè)ActionInvocation的實(shí)例。

      7 ActionInvocation實(shí)例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

      8 一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也可 能是另外的一個(gè)Action鏈)一個(gè)需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標(biāo)簽。在這個(gè)過程中需要涉及到ActionMapper

二 工作流程

      1、客戶端瀏覽器發(fā)出HTTP請求.

      2、根據(jù)web.xml配置,該請求被FilterDispatcher接收

      3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法, 并通過IoC方式,將值注入給Aciton

      4、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗(yàn)證。

      5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁面

      6、返回HTTP響應(yīng)到客戶端瀏覽器

三、攔截器和過濾器的區(qū)別

      1、攔截器是基于java反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)的。

      2、過濾器依賴于servlet容器,而攔截器不依賴于servlet容器。

      3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。

      4、攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能。

      5、在Action的生命周期中,攔截器可以多次調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次。

四、什么要使用Struts2

Struts2 是一個(gè)相當(dāng)強(qiáng)大的Java Web開源框架,是一個(gè)基于POJO的Action的MVC Web框架。它基于當(dāng)年的Webwork和XWork框架,繼承其優(yōu)點(diǎn),同時(shí)做了相當(dāng)?shù)母倪M(jìn)。

     1、Struts2基于MVC架構(gòu),框架結(jié)構(gòu)清晰,開發(fā)流程一目了然,開發(fā)人員可以很好的掌控開發(fā)的過程。

     2、使用OGNL進(jìn)行參數(shù)傳遞。

     OGNL提供了在Struts2里訪問各種作用域中的數(shù)據(jù)的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的數(shù)據(jù)。大大簡化了開發(fā)人員在獲取這些數(shù)據(jù)時(shí)的代碼量。

     3、強(qiáng)大的攔截器

     Struts2 的攔截器是一個(gè)Action級別的AOP,Struts2中的許多特性都是通過攔截器來實(shí)現(xiàn)的,例如異常處理,文件上傳,驗(yàn)證等。攔截器是可配置與重用的,可以將一些通用的功能如:登錄驗(yàn)證,權(quán)限驗(yàn)證等置于攔截器中以完成一些Java Web項(xiàng)目中比較通用的功能。在我實(shí)現(xiàn)的的一Web項(xiàng)目中,就是使用Struts2的攔截器來完成了系統(tǒng)中的權(quán)限驗(yàn)證功能。

     4、易于測試

     Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了5Java Web項(xiàng)目的測試。

     易于擴(kuò)展的插件機(jī)制在Struts2添加擴(kuò)展是一件愉快而輕松的事情,只需要將所需要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡單的設(shè)置就可以實(shí)現(xiàn)擴(kuò)展。

     6、模塊化管理

     Struts2已經(jīng)把模塊化作為了體系架構(gòu)中的基本思想,可以通過三種方法來將應(yīng)用程序模塊化:將配置信息拆分成多個(gè)文件把自包含的應(yīng)用模塊創(chuàng)建為插件創(chuàng)建新的框架特性,即將與特定應(yīng)用無關(guān)的新功能組織成插件,以添加到多個(gè)應(yīng)用中去。

     7、全局結(jié)果與聲明式異常

     為應(yīng)用程序添加全局的Result,和在配置文件中對異常進(jìn)行處理,這樣當(dāng)處理過程中出現(xiàn)指定異常時(shí),可以跳轉(zhuǎn)到特定頁面。

     他的如此之多的優(yōu)點(diǎn),是很多人比較的青睞,與spring ,Hibernate進(jìn)行結(jié)合,組成了現(xiàn)在比較流行的ssh框架,當(dāng)然每個(gè)公司都要自己的框架,也是ssh變異的產(chǎn)品。

五、看到網(wǎng)友的對Struts2的原理總結(jié),我自己也總結(jié)以便后續(xù)的面試,以下是我的疑問

1、客服端發(fā)起一個(gè)請求,通過HTTP協(xié)議指向Tomcat容器,tomcat拿到請求她干了什么?

2、我們web.xml配置



struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter





struts2

/*

我們從web配置文件中可以看到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,這個(gè)Filter這個(gè)類有什么用?

這個(gè) /* 是攔截所有的請求,他攔截了請求做了什么處理? /*

3、我們struts.xml配置









/Hello.jsp







誰負(fù)責(zé)根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法呢?

4、最后根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result,在返回HTTP響應(yīng)到客戶端瀏覽器

   struts2的工作原理

  • 客戶端發(fā)送請求

  • 經(jīng)過一系列的過濾器

  • FilterDispatcher通過ActionMapper來決定這個(gè)REquest需要調(diào)用的Action

  • FilterDispather交給ActionProxy

  • 通過ConfigurationManager詢問struts.xml找到對應(yīng)的Action

  • ActionProxy創(chuàng)建一個(gè)ActionInvocation實(shí)例

  • 調(diào)用Action Action執(zhí)行完畢ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果

Struts攔截器,常用的攔截器

  • Struts2的攔截器是其核心部分,它提供了一種機(jī)制,可以定義一個(gè)特殊的模塊,對請求進(jìn)行封裝和處理,這個(gè)模塊在Action執(zhí)行前后都可以進(jìn)行

  • modelDriven(模型驅(qū)動(dòng)) servletConfig(獲取ServletApo) params(動(dòng)態(tài)參數(shù)注入) validation(輸入驗(yàn)證 聲明式驗(yàn)證)

struts2的優(yōu)點(diǎn)

  • 實(shí)現(xiàn)了mvc模式 層次結(jié)構(gòu)清晰,

  • 豐富的標(biāo)簽庫,提高了開發(fā)效率

  • 提供了豐富的攔截器實(shí)現(xiàn)

  • 方便異常處理

  • 通過配置文件可以掌握系統(tǒng)各個(gè)部分之間的關(guān)系

struts2核心控制器

  • FilterDispatcher

  • 它負(fù)責(zé)攔截所有的用戶請求,當(dāng) 用戶請求到達(dá)時(shí),該Filter會過濾用戶請求。如果用戶請求以action結(jié)尾,該請求將被轉(zhuǎn)入Struts 2框架處理。

struts2配置文件覆蓋順序

  • struts.xml -> struts.properties -> web.xml(配置過濾器時(shí),指定參數(shù)。程序員可以編寫)

struts2修改常量的方式

  • struts.xml :

  • struts.properties : struts.action.extension=do

Action

  • Action為多例的,所以在Spring中Scope要設(shè)置參數(shù)

  • 通配符 動(dòng)態(tài)調(diào)用

Action實(shí)現(xiàn)的三種方式

  • 單純的POJO

  • 實(shí)現(xiàn)Action接口 (提供了格式化的返回參數(shù))

  • 繼承ActionSupport(實(shí)現(xiàn)了Action接口并且其中還做了一些國際化和驗(yàn)證的功能)

訪問ServletAPI

  • ServletActionContext

  • 實(shí)現(xiàn)接口 ServletRequestAware,ServletResponseAware ,ServletContextAware 攔截器負(fù)責(zé)注入(ServletConfig)

結(jié)果視圖

  • chain(轉(zhuǎn)發(fā)到動(dòng)作,要是不在同一個(gè)包內(nèi)需要設(shè)置 name) dispatcher(默認(rèn)) redierct (請求重定向) stream(文件上傳和下載)

默認(rèn)的struts-default有什么作用

  • struts-default包是由struts內(nèi)置的,它定義了struts2內(nèi)部的眾多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內(nèi)置的攔截器實(shí)現(xiàn),當(dāng)包繼承了struts-default包才能使用struts2為我們提供的這些功能。

  • 通常每個(gè)包都應(yīng)該繼承struts-default包。

struts2如何對指定的方法進(jìn)行驗(yàn)證

  • 驗(yàn)證功能是由validation攔截器來負(fù)責(zé)處理的?;仫@錯(cuò)誤信息是由workflow攔截器來負(fù)責(zé)處理的。

  • 驗(yàn)證失敗以后錯(cuò)誤信息回顯需要設(shè)置 /regist.jsp 結(jié)果視圖

  • 對類中所有方法進(jìn)行驗(yàn)證,復(fù)寫validate()方法,當(dāng)出錯(cuò)的時(shí)候addFieldError("name", "請輸入用戶名");

  • 對指定方法:將validate()方法改寫成為public void validateDemo1 后面是指定方法的名字(驗(yàn)證Demo1方法)

值棧

  • ValueStack的生命周期為Action的生命周期,保存在request域中,

  • 每個(gè)action都有與之對應(yīng)的值棧,action對象默認(rèn)保存在棧頂

  • 使用OGNL訪問值棧中的內(nèi)容不需要添加# 而訪問其他域中的需要添加#

ActionContext、ServletContext、pageContext的區(qū)別?

  • ActionContext是當(dāng)前Action的上下文環(huán)境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關(guān)的對象的引用

  • ServletContext是域?qū)ο?,一個(gè)web應(yīng)用中只有一個(gè)ServletContext,生命周期伴隨整個(gè)web應(yīng)用;

  • pageContext是JSP中的最重要的一個(gè)內(nèi)置對象,可以通過pageContext獲取其他域?qū)ο蟮膽?yīng)用,同時(shí)它是一個(gè)域?qū)ο?作用范圍只針對當(dāng)前頁面

攔截器

  • 每個(gè)攔截器都是實(shí)現(xiàn)了Interceptor接口的java類

  • Init() 在這個(gè)攔截器初始化的時(shí)候被調(diào)用

  • intercept() 當(dāng)攔截器起作用的時(shí)候調(diào)用

  • destroy() 在攔截器被銷毀的時(shí)候調(diào)用

  • struts2默認(rèn)有18個(gè)攔截器

自定義攔截器

  • 編寫一個(gè)類繼承 MethodFilterInterceptor

  • struts2.xml中聲明攔截器

  • struts2.xml中聲配置攔截器 , 當(dāng)指定自定義攔截器時(shí)默認(rèn)攔截器會失效,所以還要顯示的在指定一次.

文件上傳

  • file域 form表單 enctype=multipart/form-data 提交方式為post

  • action接受文件對象為表單中的name, 文件類型為name+ContentType 文件名字為:jsp頁面file組件的名稱+FileName

  • 可以用數(shù)組來接收多個(gè)文件的上傳

以上是“Struts2工作原理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享標(biāo)題:Struts2工作原理的示例分析
URL標(biāo)題:http://weahome.cn/article/jpoghc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部