1. 程式人生 > >Struts2詳述一(struts2基礎及2個核心)

Struts2詳述一(struts2基礎及2個核心)

臨近大學畢業了,在畢業之前做點大學學到的知識和總結。如有哪些方面存在錯誤還望大神見諒。微笑

首先,這裡想從SSH這三大框架說起。首選從最簡單的Struts2說起。這一篇我將講述struts2一些基礎及2個核心(Action和result),下篇我們將著重講述struts2基石OGNL和相關標籤等知識。

其實,在我學完Java Web(Servlet+Jsp+JSTL+Filter)之後,就已經可以用Web最經典的Mvc設計模式,實現相關Web專案。但是程式碼的耦合程度,難以實現企業級Web。

MVC設計模式概覽(學完Java Web後對Mvc的理解)

實現MVC(Model、View、Controller)模式的應用程式由 3 大部分構成:

–模型:封裝應用程式的資料和業務邏輯 POJO(Plain Old Java Object)
–檢視:實現應用程式的資訊顯示功能 JSP
–控制器:接收來自使用者的輸入,呼叫模型層,響應對應的檢視元件Servlet/Filter 好了,該說說struts2了 1:Struts2概述 Struts2是一個用來開發 MVC 應用程式的框架. 它提供了 Web 應用程式開發過程中的一些常見問題的解決方案: –對來自使用者的輸入資料進行合法性驗證統一的佈局可擴充套件性國際化和本地化 –支援 Ajax表單的重複提交檔案的上傳下載 2:怎樣使用Struts2 ①:Struts2
核心一Action
•action:應用程式可以完成的每一個操作. 例如: 顯示一個登陸表單; 把產品資訊儲存起來 •Action類: 普通的 Java類, 可以有屬性和方法, 同時必須遵守下面這些規則: 屬性的名字必須遵守與JavaBeans 屬性名相同的命名規則. 屬性的型別可以是任意型別. 從字串到非字串(基本資料庫型別)之間的資料轉換可以自動發生 –必須有一個不帶參的構造器 至少有一個供struts 在執行這個 action時呼叫的方法 同一個 Action 類可以包含多個action 方法. Struts2 會為每一個 HTTP請求建立一個新的 Action 例項 ②:Struts2
訪問
web 資源(即:HttpSession, HttpServletRequest, HttpServletResponse )Servlet API 解耦的訪問方式 通過com.opensysmphony.xwork2.ActionContext •通過Action 實現如下介面: org.apache.struts2.interceptor.ApplicationAware org.apache.struts2.interceptor.RequestAware org.apache.struts2.interceptor.SessionAware •為了避免與Servlet API 耦合在一起, 方便Action 做單元測試, Struts2 對 HttpServletRequest, HttpSession 和 ServletContext 進行了封裝,  構造了3 個 Map物件來替代這 3 個物件, 在 Action 中可以直接使用HttpServletRequest, HttpServletSession, ServletContext 對應的 Map  物件來儲存和讀取資料. 通過ActionContext訪問Web 資源ActionContext 是 Action 執行的上下文物件, 在 ActionContext 中儲存了Action 執行所需要的所有物件, 包括parameters, request,session, application 等. •獲取 HttpSession 對應的Map 物件:  –publicMap getSession() •獲取 ServletContext 對應的Map 物件: –publicMap getApplication() •獲取請求引數對應的 Map 物件: –public Map getParameters() •獲取 HttpServletRequest 對應的Map 物件: –publicObject get(Object key): ActionContext 類中沒有提供類似getRequest() 這樣的方法來獲取HttpServletRequest 對應的Map 物件.  要得到 HttpServletRequest 對應的Map 物件, 可以通過為 get() 方法傳遞“request” 引數實現 通過實現 Aware 介面訪問 Web 資源 •Action類通過可以實現某些特定的介面, 讓 Struts2 框架在執行時向Action 例項注入 parameters,request, session 和 application 對應的 Map物件 通過與Servlet耦合的訪問方式 •直接訪問Servlet API 將使Action 與 Servlet 環境耦合在一起,  測試時需要有 Servlet 容器, 不便於對Action 的單元測試. •直接獲取HttpServletRequest 物件: ServletActionContext.getRequest() •直接獲取HttpSession 物件 –ServletActionContext.getRequest().getSession() •直接獲取ServletContext 物件 –ServletActionContext.getServletContext() •通過實現ServletRequestAware, ServletContextAware 等介面的方式 ③:Struts2核心二result •每個action 方法都將返回一個 String 型別的值, Struts 將根據這個值來決定響應什麼結果. •每個action 宣告都必須包含有數量足夠多的 result 元素, 每個result 元素分別對應著 action方法的一個返回值. •result元素可以有下面兩個屬性 –name:結果的名字, 必須與Action 方法的返回值相匹配, 預設值為success –type:響應結果的型別. 預設值為dispatcher
dispatcher  org.apache.struts2.dispatcher.
ServletDispatcherResult
 預設結果型別,用來呈現JSP頁面
chain  com.opensymphony.xwork2.
ActionChainResult
 將action和另外一個action連結起來
freemarker  org.apache.struts2.views.freemarker.
FreemarkerResult
 呈現Freemarker模板
httpheader  org.apache.struts2.dispatcher.
HttpHeaderResult
 返回一個已配置好的HTTP頭資訊響應
redirect  org.apache.struts2.dispatcher.
ServletRedirectResult
 將使用者重定向到一個已配置好的URL
redirectAction  org.apache.struts2.dispatcher.
ServletActionRedirectResult
 將使用者重定向到一個已定義好的action
stream  org.apache.struts2.dispatcher.
StreamResult
 將原始資料作為流傳遞迴瀏覽器端,
該結果型別對下載的內容和圖片非常有用
velocity  org.apache.struts2.dispatcher.
VelocityResult
 呈現Velocity模板
xslt  org.apache.struts2.views.xslt.
XSLTResult
 呈現XML到瀏覽器,
該XML可以通過XSL模板進行轉換
plaintext  org.apache.struts2.dispatcher.
PlainTextResult
 返回普通文字類容
result相關的萬用字元對映 •一個Web 應用可能有成百上千個 action 宣告. 可以利用struts 提供的萬用字元對映機制把多個彼此相似的對映關係簡化為一個對映關係 •萬用字元對映規則 –若找到多個匹配, 沒有萬用字元的那個將勝出 若指定的動作不存在, Struts 將會嘗試把這個 URI與任何一個包含著萬用字元 *的動作名及進行匹配  被萬用字元匹配到的 URI 字串的子串可以用{1}, {2} 來引用.{1} 匹配第一個子串, {2} 匹配第二個子串… {0} 匹配整個URI –若 Struts找到的帶有萬用字元的匹配不止一個, 則按先後順序進行匹配 * 可以匹配零個或多個字元, 但不包括/ 字元. 如果想把 / 字元包括在內, 需要使用 **. 如果需要對某個字元進行轉義, 需要使用\.