Struts2技術第三講

一、訪問或添加request/session/application屬性

a) 通過ServletActionContext.類直接獲取

public String rsa() throws Exception{

HttpServletRequest request = ServletActionContext.getRequest();

ServletContext servletContext = ServletActionContext.getServletContext();

request.getSession() 

HttpServletResponse response = ServletActionContext.getResponse();

return "scope";

}

b) 實現指定接口,由struts框架運行時注入

public class HelloWorldAction implements ServletRequestAware, ServletResponseAware, ServletContextAware{

private HttpServletRequest request;

private ServletContext servletContext;

private HttpServletResponse response;

public void setServletRequest(HttpServletRequest req) {

this.request=req;

}

public void setServletResponse(HttpServletResponse res) {

this.response=res;

}

public void setServletContext(ServletContext ser) {

this.servletContext=ser;

}

c) 獲取ActionContext對象,使用該對象訪問serletAPI

public String execute(){

//首先獲取actionContext對戲那個,通過該對象訪問setvletAPI

ActionContext context=ActionContext.getContext();

//模擬application對象存入值

context.getApplication().put("name", "marico");

//模擬session

context.getSession().put("pass", 123456);

//模擬request

context.put("sex", "男");                                        

return SUCCESS;

}

二、文件上傳

a) 把指定的jar加載到項目中,commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar

b) 把form表中的類型enctype設置爲:“multipart/form-data

c) 在指定的Action類中添加對應的屬性 屬性名必須有規定 upload爲自定義的表單中的name屬性

      private File uploadImage;//得到上傳的文件

  private String uploadImageContentType;//得到文件的類型

  private String uploadImageFileName;//得到文件的名稱

D)多個文件的上傳實現

把需要得到的文件的屬性變成數據或者list集合都可以實現,上傳遍歷就可以。

 private File[] uploadImages;//得到上傳的文件

  private String[] uploadImagesContentType;//得到文件的類型

  private String[] uploadImagesFileName;//得到文件的名稱

三、攔截器的介紹

a) 使用攔截器可以實現橫切功能並使這些實現相對action甚至Struts2框架保持獨立。

b) 可以實現和使用自己所需的特性且不用修改框架的底層代碼。

c) 使用攔截器可以達到以下目的:

i. 在調用Action之前,提供預處理邏輯

ii. 與Action進行交互,提供執行信息,比如設置請求中的參數

iii. 在調用Action之後,提供後處理邏輯

iv. 修改返回的結果,進而修改呈現給用戶的內容

v. 捕獲異常從而替換可執行的處理過程或返回一個不同結果

d) 配置一個內置struts2自帶的攔截器

<action>

<interceptor-ref  name="timer" />

<result>/success.jsp</result>

</action>

e) 實現自定義的攔截器,可以實現Interceptor該接口或者繼承AbstractInterceptor這個類,可以重寫的方法有三個:

i. init() 方法用來初始化攔截器

ii. destroy()方法爲攔截器提供清理

iii. intercept(ActionInvocation invocation)方法爲攔截器處理業務規則,參數就可以得到當前的action對象和作用域的對象。然後就可以實現自己需要攔截的內容了。當調用ivoke()方法後返回的結果就是action返回的結果一樣,直接在struts.xml配置的name屬性的值,它就會做指定的操作。

iv. 聲明自定義的攔截器並加載到指定的action當中

<interceptors>

<interceptorname="UserCheckLog“ class="com.redarmy.intercepter.LoginInteceptor"></interceptor>

<!-- 定義攔截器的棧 -->

<interceptor-stack name="mystack">

<interceptor-ref name="MyTimer"></interceptor-ref>

<interceptor-ref name="UserCheckLogin"></interceptor-ref>

<!-- 添加Struts2默認攔截器的支持,否則struts以前的攔截器會失效 -->

<interceptor-ref name="defaultStack"></interceptor-ref>

</interceptor-stack>

</interceptors>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章