1 如何搭建Struts2開發環境?java
Struts2 獲取 http://struts.apache.org/download.cgiweb
Struts-2.3.16.3-all.zipapache
建立Web項目,引入Struts2 搭建所需 jar包:json
commons-fileupload-1.3.1.jar:Struts文件的上傳和下載服務器
commons-io-2.2.jar:文件讀取session
commons-lang3-3.1.jar:爲java.lang包提供擴展app
freemarker-2.3.19.jar:FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具框架
ognl-3.0.6.jar:支持ognl表達式工具
javassist-3.11.0.GA.jar:分析、編輯和建立JAVA字節碼的類庫編碼
struts2-core-2.3.16.3.jar:Struts2的核心包
xwork-core-2.3.16.3.jar:xwork的核心包
asm-*.jar 相似javassits
log4j-1.2.17.jar 日誌類庫
修改web.xml
配置struts.xml
2 建立Action有幾種方式?
普通的Java類,編寫public String execute(){}方法
實現Action接口,重寫execute()方法
繼承ActionSupport類,重寫execute()方法
3 Action接收參數的經常使用方式有哪些?
屬性方式 ------------>
Action中,對應表單參數的屬性及對應的setter、getter
頁面中,(1)Form中元素name取值屬性名(2)取值:<s:property value="屬性名"/>
應用場景,接收的參數字段個數少
JavaBean方式 ------------>將模型數據從Action中分離了出來
Action中,爲Action添加實體屬性以及setter和getter
頁面中,(1)Form中元素name取值對象名.屬性名(2)<s:property value="對象名.屬性名" />
應用場景,字段多,能夠封裝爲一個對象:將模型數據從Action中分離出來時
ModelDriven方式 ------------>
Action中,Action實現ModelDriven接口,重寫方法getModel();Action中要提供JavaBean類型的屬性,須要實例化,但不須要相應的setter和getter方法
頁面中,(1)Form中元素name取值屬性名(2)取值:<s:property value="屬性名" />
應用場景,和JavaBean方式類似,不經常使用
4 如何調用Action方法?
訪問Action時,默認調用的時execute()方法
能夠在Action中定義多個業務方法,方法簽名要與execute()方法相同
配置多個<action>標籤,method屬性指定調用的方法
<action name="house_add" class="com.pb.web.action.HouseAction" method="add">
<action name="house_update" class="com.pb.web.action.HouseAction" method=「update">
5 result的type取值有哪些?
type屬性
指定result的類型,不一樣類型的result表明了不一樣的結果輸出
默認取值dispatcher,將請求轉發(forward)到本應用程序裏指定的資源
能夠在struts-default.xml中查看result的類型
redirect: 請求重定向到指定的URL
redirectAction: 請求重定向到指定的Action
chain: Action鏈式處理,將請求轉發(forward)到指定的Action
json: 實現Ajax時返回JSON對象
... ...
能夠自定義結果類型
dispatcher與redirect的區別
dispatcher轉發形式,把參數等資源轉發給本資源
redirect重定向到指定URL,參數等資源丟失
redirect與redirectAction的區別
redirect跳轉頁面或Action; 能夠跳轉到本應用程序內部或者外部
redirectAction跳轉Action; 只能跳轉本應用程序內部
6 全局結果如何進行配置?
全局結果
想想:
場景一:有些操做須要跳轉公共頁面,好比:登陸首頁
場景二:每一個Action進行邏輯控制時,可能都會遇到異常的狀況,須要跳轉到一個公共的錯誤頁面
解決方案:
方案一:在struts.xml中的每一個<action>中都配置一個<result>
方案二:全局結果(global-results):能夠知足多個Action共享一個結果
全局結果小結:
使用<result>來配置,只不過不是在<action>中嵌套,而是在<global-results>中嵌套
當全部Action須要共享某個結果時,能夠定義爲全局結果。好比,相似登陸頁面這樣的公共頁面、錯誤頁面、異常頁面
全局結果的影響範圍爲整個包的全部Action,若是不是對全部Action都有效的結果,不要定義在<global-results>中
7 全局異常處理如何進行配置?
<global-exception-mappings>:全局異常映射
<package>的子元素
要配置一個全局結果<global-results>
<global-results>應該在<global-exception-mappings>以前
能夠聲明到一個父包中,被其它包繼承
8 訪問Servlet API有哪些方式?
Struts2的Action實現了MVC中C層的做用
針對請求向用戶顯示所在城市信息
登陸後保存用戶信息
保存當前的在線人數
傳統Servlet API類型
HttpServletRequest
HttpSession
ServletContext
Struts2中傳統Servlet API類型被處理成Map類型
訪問更方便
不依賴傳統Servlet API類型 -- 解耦合
關於ActionContext
所在包com.opensymphony.xwork2
ActionContext被稱爲Action上下文或Action環境
ActionContext提供每一個Action運行時與之相關的全部信息
訪問Servlet API
ActionContext類提供getContext()方法得到實例
經過ActionContext類的實例可得到Map類型的請求、會話等
經過put()和get()方法在Map類型的對象中存取數據
Action類中聲明request等對象
Map<String, Object> request;
得到ActionContext實例
ActionContext ac = ActionContext.getContext();
獲取request等對象
request = (Map<String, Object>)ac.get("request");
在request等對象中保存數據
request.put("loginAccess","登陸地點是:北京");
request.get("loginAccess");
在頁面中獲取保存數據提倡的方式
<s:property value = "#request.loginAccess" />訪問Servlet API
以前得到Servlet API對象的方式
本身得到request: ac.get("request")
本身得到session: ac.getSession()
讓「別人」爲你提供Servlet API的對象
經過實現相應接口得到Servlet API對象
得到request須要實現RequestAware接口
得到session須要實現SessionAware接口
得到application須要實現ApplicationAware接口
9 值棧存儲了哪些信息?
OGNL能夠直接訪問值棧中的值
值棧(Value Stack)存放數據的內存空間,值棧中存放了Action的實例,如:能夠經過OGNL來訪問Action實例中的屬性值。
10 Stack Context存儲了哪些信息?
Stack Context, 存放數據的內存空間, Stack Context 中存放了
request的參數、屬性
session的屬性、application的屬性
attr:在全部的屬性範圍中獲取值,一次搜索page、request、session和application
11 OGNL如何訪問值棧和Stack Context的內容?
OGNL能夠經過#訪問Stack Context的值。
12 Struts2標籤有哪些分類?
通用標籤(Generic Tags)
數據標籤(Data Tags)
控制標籤(Control Tags)
UI標籤(UI Tags)
Ajax標籤(Ajax Tags)
13 Struts2實現數據驗證有哪幾種方式?
客戶端驗證:
數據提交前在客戶端驗證
可以使用JavaScript或jQuery實現
特色:1.減小客戶的等待時間 2.減小服務器的壓力
服務器端驗證
在數據提交後服務器端驗證
特色:1.防止「繞過」客戶端驗證提交非法數據 2.能夠在服務器端處理數據前確保數據的合法性
14 列舉經常使用的自帶攔截器,並說明其的做用?
params攔截器
負責將請求參數設置爲Action屬性
servletConfig攔截器
將源於Servlet API的各類對象注入到Action
fileUpload攔截器
對文件上傳提供支持
modelDriven攔截器
若是Action實現了ModelDriven接口,則將getModel()返回的結果壓入值棧
validation攔截器
調用驗證框架進行數據驗證
workflow攔截器
調用Action類的validate(),執行編碼驗證
15 文件上傳主要步驟有哪些?
01.在JSP頁面實如今客戶端選擇上傳文件
02.配置struts.xml,攔截器會自動接收上傳的文件
03.在Action中寫代碼把上傳的文件存入服務器中
04.跳轉至新頁面展現上傳的文件
16 Struts2中怎麼實現AJAX?
Ajax
jQuery
JSON
Struts2
json-lib
struts2-json-plugin
public class DataAction extends ActionSupport {
private String name;
private int age;
private User user;
private List<User> users;
//處理請求的方法
public String getData(){
//代碼省略
return SUCCESS;
}
//省略getter和setter
}
<package name="data" namespace="/" extends="json-default">
<action name="getData" class="action.DataAction" method="getData">
<result type="json">
<param name="includeProperties">name,user.*</param>
</result>
</action>
</package>