struts2面試題(自己總結)_第1頁
struts2面試題(自己總結)_第2頁
struts2面試題(自己總結)_第3頁
struts2面試題(自己總結)_第4頁
struts2面試題(自己總結)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Struts2面試題1、struts2工作流程Struts2框架本身大致可以分為3個部分:核心限制器FilterDispatcher、業(yè)務限制器Action和用戶實現(xiàn)的企業(yè)業(yè)務邏輯組件。核心限制器FilterDispatcher是Struts2框架的基礎,包含了框架內部的限制流程和處理機制。業(yè)務限制器Action和業(yè)務邏輯組件是須要用戶來自己實現(xiàn)的。用戶在開發(fā)Action和業(yè)務邏輯組件的同時,還須要編寫相關的配置文件,供核心限制器FilterDispatcher來運用。Struts2的工作流程相對于Struts1要簡潔,與WebWork框架基本相同,所以說Struts2是WebWork的升級版本。基本簡要流程如下:1、客戶端初始化一個指向Servlet容器的懇求;2、這個懇求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMeshPlugin)3、接著FilterDispatcher被調用, FilterDispatcher詢問ActionMapper來確定這個請是否須要調用某個Action4、假如ActionMapper確定須要調用某個Action, FilterDispatcher把懇求的處理交給ActionProxy5、ActionProxy通過ConfigurationManager詢問框架的配置文件, 找到須要調用的Action類6、ActionProxy創(chuàng)建一個ActionInvocation的實例。7、ActionInvocation實例運用命名模式來調用, 在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。8、一旦Action執(zhí)行完畢,ActionInvocation負責依據struts.xml中的配置找到對應的返回結果 。返回結果通常是(但不總是,也可能是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。 在表示的過程中可以運用Struts2框架中繼承的標簽。 在這個過程中須要涉及到ActionMapper9、響應的返回是通過我們在web.xml中配置的過濾器

10、假如ActionContextCleanUp是當前運用的,則FilterDispatecher將不會清理sreadlocalActionContext;假如ActionContextCleanUp不運用,則將會去清理sreadlocals。2、說下Struts的設計模式MVC模式:web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應的數(shù)據,ActionServler依據Struts-config.xml文件配置好的設置確定是否須要表單驗證,假如須要就調用ActionForm的Validate()驗證后選擇將懇求發(fā)送到哪個Action,假如Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調用Action的execute()方法。Execute()從ActionForm對象中獲得數(shù)據,完成業(yè)務邏輯,返回一個ActionForward對象,ActionServlet再把客戶懇求轉發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網頁,返回給客戶。3、攔截器和過濾器的區(qū)分1、攔截器是基于java反射機制的,而過濾器是基于函數(shù)回調的。

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

3、攔截器只能對Action懇求起作用,而過濾器則可以對幾乎全部懇求起作用。

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

5、在Action的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。4、struts1于struts2的比較1、Action

類:

Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是運用抽象類編程而不是接口。

Struts

2

Action類可以實現(xiàn)一個Action接口,也可實現(xiàn)其他接口,使可選和定制的服務成為可能。Struts2供應一個ActionSupport基類去實現(xiàn)常用的接口。Action接口不是必需的,任何有execute標識的POJO對象都可以用作Struts2的Action對象。

2、線程模式:

Struts1

Action是單例模式并且必需是線程平安的,因為僅有Action的一個實例來處理全部的懇求。單例策略限制了Struts1

Action能作的事,并且要在開發(fā)時特殊當心。Action資源必需是線程平安的或同步的。

Struts2

Action對象為每一個懇求產生一個實例,因此沒有線程平安問題。(事實上,servlet容器給每個懇求產生很多可丟棄的對象,并且不會導致性能和垃圾回收問題)

3、Servlet

依靠:

Struts1

Action

依靠于Servlet

API

,因為當一個Action被調用時ServletRequest

ServletResponse

被傳遞給execute方法。

Struts

2

Action不依靠于容器,允許Action脫離容器單獨被測試。假如須要,Struts2

Action仍舊可以訪問初始的request和response。但是,其他的元素削減或者消退了干脆訪問ServetRequest

ServletResponse的必要性。

4、可測性:

測試Struts1

Action的一個主要問題是execute方法暴露了servlet

API(這使得測試要依靠于容器)。一個第三方擴展--Struts

TestCase--供應了一套Struts1的模擬對象(來進行測試)。

Struts

2

Action可以通過初始化、設置屬性、調用方法來測試,“依靠注入”支持也使測試更簡潔。

5、捕獲輸入:

Struts1

運用ActionForm對象捕獲輸入。全部的ActionForm必需繼承一個基類。因為其他JavaBean不能用作ActionForm,開發(fā)者經常創(chuàng)建多余的類捕獲輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經存在的JavaBean(仍舊會導致有冗余的javabean)。

Struts

2干脆運用Action屬性作為輸入屬性,消退了對其次個輸入對象的需求。輸入屬性可能是有自己(子)屬性的rich對象類型。Action屬性能夠通過

web頁面上的taglibs訪問。Struts2也支持ActionForm模式。rich對象類型,包括業(yè)務對象,能夠用作輸入/輸出對象。這種

ModelDriven

特性簡化了taglib對POJO輸入對象的引用。

6、表達式語言:

Struts1

整合了JSTL,因此運用JSTL

EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。

Struts2可以運用JSTL,但是也支持一個更強大和敏捷的表達式語言--"Object

Graph

Notation

Language"

(OGNL).

7、綁定值到頁面(view):

Struts

1運用標準JSP機制把對象綁定到頁面中來訪問。

Struts

2

運用

"ValueStack"技術,使taglib能夠訪問值而不須要把你的頁面(view)和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重用頁面(view)。

8、類型轉換:

Struts

1

ActionForm

屬性通常都是String類型。Struts1運用Commons-Beanutils進行類型轉換。每個類一個轉換器,對每一個實例來說是不行配置的。

Struts2

運用OGNL進行類型轉換。供應基本和常用對象的轉換器。

9、校驗:

Struts

1支持在ActionForm的validate方法中手動校驗,或者通過Commons

Validator的擴展來校驗。同一個類可以有不同的校驗內容,但不能校驗子對象。

Struts2支持通過validate方法和XWork校驗框架來進行校驗。XWork校驗框架運用為屬性類類型定義的校驗和內容校驗,來支持chain校驗子屬性

10、Action執(zhí)行的限制:

Struts1支持每一個模塊有單獨的Request

Processors(生命周期),但是模塊中的全部Action必需共享相同的生命周期。

Struts2支持通過攔截器堆棧(Interceptor

Stacks)為每一個Action創(chuàng)建不同的生命周期。堆棧能夠依據須要和不同的Action一起運用。為什么要運用Struts2Struts2是一個相當強大的JavaWeb開源框架,是一個基于POJO的Action的MVCWeb框架。它基于當年的Webwork和XWork框架,繼承其優(yōu)點,同時做了相當?shù)母倪M。

1.Struts2基于MVC架構,框架結構清楚,開發(fā)流程一目了然,開發(fā)人員可以很好的掌控開發(fā)的過程。

2運用OGNL進行參數(shù)傳遞。

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

3強大的攔截器

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

4易于測試

Struts2的Action都是簡潔的POJO,這樣可以便利的對Struts2的Action編寫測試用例,大大便利了5JavaWeb項目的測試。

易于擴展的插件機制在Struts2添加擴展是一件開心而輕松的事情,只須要將所須要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡潔的設置就可以實現(xiàn)擴展。

6模塊化管理

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

7全局結果與聲明式異樣

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

他的如此之多的優(yōu)點,是很多人比較的青睞,與spring,Hibernate進行結合,組成了現(xiàn)在比較流行的ssh框架,當然每個公司都要自己的框架,也是ssh變異的產品。struts2有哪些優(yōu)點?1)在軟件設計上Struts2的應用可以不依靠于Servlet

API和struts

API。

Struts2的這種設計屬于無侵入式設計;

2)攔截器,實現(xiàn)如參數(shù)攔截注入等功能;

3)類型轉換器,可以把特殊的懇求參數(shù)轉換成須要的類型;

4)多種表現(xiàn)層技術,如:JSP、freeMarker、Velocity等;

5)Struts2的輸入校驗可以對指定某個方法進行校驗;

6)供應了全局范圍、包范圍和Action范圍的國際化資源文件管理實現(xiàn)

struts2是如何啟動的?struts2框架是通過Filter啟動的,即StrutsPrepareAndExecuteFilter,此過濾器為struts2的核心過濾器;

StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內容后,是將內容封裝進javabean對象然后存放在內存中,以后用戶的每次懇求處理將運用內存中的數(shù)據,而不是每次懇求都讀取struts.xml文件。struts2框架的核心限制器是什么?它有什么作用?

1)Struts2框架的核心限制器是StrutsPrepareAndExecuteFilter。

2)作用:

負責攔截由<url-pattern>/*</url-pattern>指定的全部用戶懇求,當用戶懇求到達時,該Filter會過濾用戶的懇求。默認狀況下,假如用戶懇求的路徑

不帶后綴或者后綴以.action結尾,這時懇求將被轉入struts2框架處理,否則struts2框架將略過該懇求的處理。

可以通過常量"struts.action.extension"修改action的后綴,如:

<constant

name="struts.action.extension"

value="do"/>

假如用戶須要指定多個懇求后綴,則多個后綴之間以英文逗號(,)隔開。<constant

name="struts.action.extension"

value="do,go"/>

struts2配置文件的加載依次?

struts.xml

——>

perties

常量可以在struts.xml或perties中配置,假如在多個文件中配置了同一個常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值.

struts.xml文件的作用:通知Struts2框架加載對應的Action資源struts2常量的修改方式?

常量可以在struts.xml或perties中配置,兩種配置方式如下:

1)在struts.xml文件中配置常量

<constant

name="struts.action.extension"

value="do"/>

2)在perties中配置常量(perties文件放置在src下):

struts.action.extension=dostruts2如何訪問ServletRequest、Session、ServletContext三個域對象?

方案一:

ServletRequestrequest

=ServletActionContext.getRequest();

ServletResponseresponse

=ServletActionContext.getResponse();

Session

session=

request.getSession();

ServletContextservletContext=ServletActionContext.getServletContext();

方案二:

implements

ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware

留意:框架自動傳入對應的域對象

struts2是如何管理action的?這種管理方式有什么好處?

struts2框架中運用包來管理Action,包的作用和java中的類包是特別類似的。

主要用于管理一組業(yè)務功能相關的action。在實際應用中,我們應當把一組業(yè)務功能相關的Action放在同一個包下。

struts2中的默認包struts-default有什么作用?

1)struts-default包是由struts內置的,它定義了struts2內部的眾多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內置的攔截器實現(xiàn),如:從懇求中

把懇求參數(shù)封裝到action、文件上傳和數(shù)據驗證等等都是通過攔截器實現(xiàn)的。當包繼承了struts-default包才能運用struts2為我們供應的這些功能。

2)struts-default包是在struts-default.xml中定義,struts-default.xml也是Struts2默認配置文件。

Struts2每次都會自動加載

struts-default.xml文件。

3)通常每個包都應當繼承struts-default包。

struts2如何對指定的方法進行驗證?

1)validate()方法會校驗action中全部與execute方法簽名相同的方法;

2)要校驗指定的方法通過重寫validateXxx()方法實現(xiàn),

validateXxx()只會校驗action中方法名為Xxx的方法。其中Xxx的第一個字母要大寫;

3)當某個數(shù)據校驗失敗時,調用addFieldError()方法往系統(tǒng)的fieldErrors添加校驗失敗信息(為了運用addFieldError()方法,action可以繼承ActionSupport),

假如系統(tǒng)

的fieldErrors包含失敗信息,struts2會將懇求轉發(fā)到名為input的result;

4)在input視圖中可以通過<s:fielderror/>顯示失敗信息。

5)先執(zhí)行validateXxxx()->validate()->假如出錯了,會轉發(fā)<result

name="input"/>所指定的頁面,假如不出錯,會干脆進行Action::execute()方法

struts2默認能解決get和post提交方式的亂碼問題嗎?

不能。struts.i18n.encoding=UTF-8屬性值只能解析POST提交下的亂碼問題。

請你寫出struts2中至少5個的默認攔截器?

fileUpload

供應文件上傳功能

i18n

記錄用戶選擇的locale

cookies

運用配置的name,value來是指cookies

checkbox

添加了checkbox自動處理代碼,將沒有選中的checkbox的內容設定為false,而html默認狀況下不提交沒有選中的checkbox。

chain

讓前一個Action的屬性可以被后一個Action訪問,現(xiàn)在和chain類型的result()結合運用。

alias

在不同懇求之間將懇求參數(shù)在不同名字件轉換,懇求內容不變

值棧ValueStack的原理與生命周期?

1)ValueStack貫穿整個

Action

的生命周期,保存在request域中,所以ValueStack和request的生命周期一樣。當Struts2接受一個懇求時,會快速創(chuàng)建ActionContext,

ValueStack,action。然后把action存放進ValueStack,所以action的實例變量可以被OGNL訪問。

懇求來的時候,action、ValueStack的生命起先,懇求結束,action、

ValueStack的生命結束;

2)action是多例的,和Servlet不一樣,Servelt是單例的;

3)每個action的都有一個對應的值棧,值棧存放的數(shù)據類型是該action的實例,以及該action中的實例變量,Action對象默認保存在棧頂;

4)ValueStack本質上就是一個ArrayList;

5)關于ContextMap,Struts

會把下面這些映射壓入

ContextMap

中:

parameters

:

Map

中包含當前懇求的懇求參數(shù)

request

:

Map

中包含當前

request

對象中的全部屬性

session

:該

Map

中包含當前

session

對象中的全部屬性

application

:該

Map

中包含當前

application

對象中的全部屬性

attr:該

Map

按如下依次來檢索某個屬性:

request,

session,

application

6)運用OGNL訪問值棧的內容時,不須要#號,而訪問request、session、application、attr時,須要加#號;

7)留意:

Struts2中,OGNL表達式須要協(xié)作Struts標簽才可以運用。如:<s:property

value="name"/>

8)在struts2配置文件中引用ognl表達式

,引用值棧的值

,此時運用的"$",而不是#或者%;

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

1)ActionContext是當前的Action的上下文環(huán)境,通過ActionContext可以獲得到request、session、ServletContext等與Action有關的對象的引用;

2)ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;

3)pageContext是JSP中的最重要的一個內置對象,可以通過pageContext獲得其他域對象的應用,同時它是一個域對象,作用范圍只針對當前頁面,當前頁面結束時,pageContext銷毀,

生命周期是JSP四個域對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論