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四個域物件中最小的。