Struts2問題總結

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>

相關文章
相關標籤/搜索