撩課-Java每天5道面試題第17天

撩課學院發表於2018-12-07

116.說下Struts的設計模式

MVC模式: 
web應用程式啟動時
就會載入並初始化ActionServler。
使用者提交表單時,
一個配置好的ActionForm物件被建立,
並被填入表單相應的資料,
ActionServler根據Struts-config.xml檔案
配置好的設定決定是否需要表單驗證,
如果需要就呼叫ActionForm的Validate()
驗證後選擇將請求傳送到哪個Action,
如果Action不存在,
ActionServlet會先建立這個物件,
然後呼叫Action的execute()方法。
Execute()從ActionForm物件中獲取資料,
完成業務邏輯,
返回一個ActionForward物件,
ActionServlet再把客戶請求 
轉發給ActionForward物件指定的jsp元件,
ActionForward物件指定的jsp生
成動態的網頁,返回給客戶。

 

117.攔截器和過濾器的區別?

1、攔截器是基於java反射機制的,
而過濾器是基於函式回撥的。

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

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

4、攔截器可以訪問Action上下文、
值棧裡的物件,而過濾器不能。

5、在Action的生命週期中,
攔截器可以多次呼叫,
而過濾器只能在容器初始化時被呼叫一次。

 

118.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"/>   

 

119.struts2如何訪問HttpServletRequest、HttpSession、ServletContext三個域物件?

方案一:  

HttpServletRequest request =
ServletActionContext.getRequest();  

HttpServletResponse response =
ServletActionContext.getResponse();  

HttpSession  session=   
request.getSession(); 

ServletContext servletContext=
ServletActionContext.getServletContext();  

    

方案二:  

類 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware  

注意:框架自動傳入對應的域物件 

 

120.ActionContext、ServletContext、pageContext的區別?

1)ActionContext是當前的Action的上下文環境,
通過ActionContext可以
獲取到request、session、ServletContext等
與Action有關的物件的引用;  

2)ServletContext是域物件,
一個web應用中只有一個ServletContext,
生命週期伴隨整個web應用;  

3)pageContext是JSP中的最重要的一個內建物件,
可以通過pageContext獲取其他域物件的應用,
同時它是一個域物件,
作用範圍只針對當前頁面,
當前頁面結束時,
pageContext銷燬,  

生命週期是JSP四個域物件中最小的。  

 

相關文章