Struts2中的數據處理的三種方式對比(Action中三種作用域request,session,application對象)


1:在Action中如何獲得作用域(request,session,application)對象;

  取得Map(鍵值對映射集)類型的requet,session,application;

對數據操作的所有方法:(即把數據保存到域中)

主要使用的是方式2和方式3;

方式1:直接獲取ServletApi,核心類是ServletActionContext提供的靜態的方法;

 1 package com.bie.lesson04;
 2 
 3 import javax.servlet.ServletContext;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpSession;
 6 
 7 import org.apache.struts2.ServletActionContext;
 8 
 9 import com.opensymphony.xwork2.ActionSupport;
10 
11 /** 
12 * @author  Author:別先生 
13 * @date Date:2017年9月11日 下午10:06:41 
14 *
15 *
16 */
17 public class StrutsData extends ActionSupport{
18 
19     /**
20      * 
21      */
22     private static final long serialVersionUID = 1L;
23 
24     @Override
25     public String execute() throws Exception {
26         
27         //數據保存到域中
28         //方式一,直接拿到servletApi執行操作
29         HttpServletRequest request = ServletActionContext.getRequest();
30         HttpSession session = request.getSession();
31         ServletContext application = ServletActionContext.getServletContext();
32         //操作
33         request.setAttribute("request_data", "request_data");
34         session.setAttribute("session_data", "session_data");
35         application.setAttribute("application_data", "application_data");
36         
37         
38         return SUCCESS;
39     }
40 }
View Code

 方式2:通過ActionContext獲取不同(代表request/session/application)的map;

 1 public class ScopeAction01 {
 2 
 3     private Map<String,Object> request;
 4     private Map<String,Object> session;
 5     private Map<String,Object> application;
 6     
 7     
 8     public ScopeAction01(){
 9         request = (Map<String, Object>) ActionContext.getContext().get("request");
10         session = ActionContext.getContext().getSession();
11         application = ActionContext.getContext().getApplication();
12         
13     }
14     
15     
16     public String execute(){
17         //向作用域中存儲數據
18         request.put("requestKey", "requestValue");
19         session.put("sessionKey", "sessionValue");
20         application.put("applicationKey", "applicationValue");
21         
22         return "success";
23     }
24     
25 }
關鍵代碼

方式3:實現接口的方法:(RequestAware/SessionAware/ApplicationAware);

 1 package com.bie.action01;
 2 
 3 import java.util.Map;
 4 
 5 import org.apache.struts2.interceptor.ApplicationAware;
 6 import org.apache.struts2.interceptor.RequestAware;
 7 import org.apache.struts2.interceptor.SessionAware;
 8 
 9 /** 
10 * @author 作者:別先生
11 * @version 創建時間:2017年5月7日 上午8:37:05 
12 * 類說明 
13 * 作用域的使用方法2
14 */
15 
16 public class ScopeAction2 implements RequestAware,SessionAware,ApplicationAware{
17 
18     private Map<String,Object> request;
19     private Map<String,Object> session;
20     private Map<String,Object> application;
21     
22     
23     public void setApplication(Map<String, Object> application) {
24         this.application = application;
25     }
26 
27     public void setSession(Map<String, Object> session) {
28         this.session = session;
29     }
30 
31     public void setRequest(Map<String, Object> request) {
32         this.request = request;
33     }
34 
35     public String execute(){
36         //map使用put設置值
37         request.put("requestKey", "requestValue");
38         session.put("sessionKey", "sessionbValue");
39         application.put("applicationKey", "applicationValue");
40         
41         return "success";
42     }
43     
44     
45 }
關鍵代碼

方式1和方式2簡介:

第一步: 引包,省去

第二步:配置Struts2的過濾器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3   <display-name>struts2_20170221</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   
13   <!-- struts2過濾器 -->
14   <filter>
15       <!-- 過濾器名稱 -->
16       <filter-name>struts2</filter-name>
17       <!-- 過濾器類 -->
18       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
19   </filter>
20   <!-- struts2過濾器映射 -->
21   <filter-mapping>
22       <!-- 過濾器名稱 -->
23       <filter-name>struts2</filter-name>
24       <!-- 過濾器映射 -->
25       <url-pattern>/*</url-pattern>
26   </filter-mapping>
27   
28 </web-app>

第三步:開發Action,方式一和方式二的對比

 1 package com.bie;
 2 
 3 import java.util.Map;
 4 
 5 import javax.servlet.ServletContext;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpSession;
 8 
 9 import org.apache.struts2.ServletActionContext;
10 
11 import com.opensymphony.xwork2.ActionContext;
12 import com.opensymphony.xwork2.ActionSupport;
13 
14 /** 
15 * @author BieHongLi 
16 * @version 創建時間:2017年2月21日 下午4:46:14 
17 * 
18 */
19 public class FinalAction extends ActionSupport{
20 
21     private static final long serialVersionUID = 1L;
22     
23     @Override
24     public String execute() throws Exception {
25         //1:請求數據封裝       2:調用service處理業務邏輯,拿到結果數據
26         //3:數據保存到域中
27         
28         //【struts2和servlet耦合的方法,
29         //    比如獲取目錄application.getRealPath("");等等】
30         //Struts中對數據操作,方式1:直接拿到ServletApi,執行操作
31         /*HttpServletRequest  request=ServletActionContext.getRequest();
32         HttpSession session=request.getSession();
33         ServletContext application=ServletActionContext.getServletContext();
34         
35         request.setAttribute("request_data", "request請求的數據");
36         session.setAttribute("session_data", "session請求的數據");
37         application.setAttribute("application_data", "application請求的數據");*/
38         
39         
40         
41         //[推薦:解耦的方式實現對數據的操作,沒有和servlet有耦合,
42         //  向域對象中存儲值推薦]
43         //Struts中對數據操作,方式2:直接拿到ActionContext,執行操作
44         //getContext()發發一個靜態方法,可以直接調用,返回值就是ActionContext
45         ActionContext ac=ActionContext.getContext();
46         //得到Strust對HttpServletRequest對象進行了封裝,封裝為了一個Map
47         //拿到表示request對象 的map
48         Map<String, Object>  request=ac.getContextMap();
49         //拿到session對象的map
50         Map<String, Object> session=ac.getSession();
51         //拿到application對象的map
52         Map<String, Object> application=ac.getApplication();
53         
54         //數據
55         request.put("request_data", "request_data_actionContext");
56         session.put("session_data", "session_date_actionContext");
57         application.put("application_data", "application_date_actionContext");
58         return SUCCESS;
59     }
60     
61 }

第四步:Struts2的配置文件。

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7     
 8     <!-- 聲明包 -->
 9     <package name="finalPackage" extends="struts-default">
10         <action name="requestAction" class="com.bie.FinalAction">
11             <result name="success">success.jsp</result>
12         </action>
13         
14         <action name="ImplAction" class="com.bie.ImplAction">
15             <result name="success">success.jsp</result>
16         </action>
17     </package>
18     
19 </struts>

方式三:只有開發Action的過程不一樣,其他一樣,這里只寫了開發Action的代碼

 1 package com.bie;
 2 
 3 import java.util.Map;
 4 
 5 import org.apache.struts2.interceptor.ApplicationAware;
 6 import org.apache.struts2.interceptor.RequestAware;
 7 import org.apache.struts2.interceptor.SessionAware;
 8 
 9 import com.opensymphony.xwork2.ActionSupport;
10 
11 /** 
12 * @author BieHongLi 
13 * @version 創建時間:2017年2月21日 下午7:40:02 
14 * 
15 */
16 public class ImplAction extends ActionSupport 
17     implements RequestAware,SessionAware,ApplicationAware{
18 
19     private static final long serialVersionUID = 1L;
20     private Map<String, Object> request;
21     private Map<String, Object> session;
22      private Map<String,Object> application;
23     
24     //struts2運行的時候,會把代表request的map對象注入
25     @Override
26     public void setRequest(Map<String, Object> request) {
27         this.request=request;
28     }
29 
30     //struts2運行的時候,會把代表session的map注入
31     @Override
32     public void setApplication(Map<String, Object> session) {
33         this.session=session;
34     }
35     
36     //struts2運行的時候,會把代表application的map注入
37     @Override
38     public void setSession(Map<String, Object> application) {
39         this.application=application;
40     }
41 
42     @Override
43     public String execute() throws Exception {
44         request.put("request_data", "request_dataAware");
45         session.put("session_data", "session_dataAware");
46         application.put("application_data","application_dataAware");
47         return SUCCESS;
48     }
49 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM