博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)...
阅读量:6368 次
发布时间:2019-06-23

本文共 8011 字,大约阅读时间需要 26 分钟。

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     @Override25     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
request; 4 private Map
session; 5 private Map
application; 6 7 8 public ScopeAction01(){ 9 request = (Map
) 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 * 作用域的使用方法214 */15 16 public class ScopeAction2 implements RequestAware,SessionAware,ApplicationAware{17 18     private Map
request;19 private Map
session;20 private Map
application;21 22 23 public void setApplication(Map
application) {24 this.application = application;25 }26 27 public void setSession(Map
session) {28 this.session = session;29 }30 31 public void setRequest(Map
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 
2
3
struts2_20170221
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12 13
14
15
16
struts2
17
18
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
19
20
21
22
23
struts2
24
25
/*
26
27 28

第三步:开发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     @Override24     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()发发一个静态方法,可以直接调用,返回值就是ActionContext45         ActionContext ac=ActionContext.getContext();46         //得到Strust对HttpServletRequest对象进行了封装,封装为了一个Map47         //拿到表示request对象 的map48         Map
request=ac.getContextMap();49 //拿到session对象的map50 Map
session=ac.getSession();51 //拿到application对象的map52 Map
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 
2 5 6
7 8
9
10
11
success.jsp
12
13 14
15
success.jsp
16
17
18 19

方式三:只有开发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
request;21 private Map
session;22 private Map
application;23 24 //struts2运行的时候,会把代表request的map对象注入25 @Override26 public void setRequest(Map
request) {27 this.request=request;28 }29 30 //struts2运行的时候,会把代表session的map注入31 @Override32 public void setApplication(Map
session) {33 this.session=session;34 }35 36 //struts2运行的时候,会把代表application的map注入37 @Override38 public void setSession(Map
application) {39 this.application=application;40 }41 42 @Override43 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 }

 

转载地址:http://vkgma.baihongyu.com/

你可能感兴趣的文章
在MongoDB数据库中查询数据(上)
查看>>
Python import其他文件夹的文件
查看>>
Jvm(22),回收策略-----标记清除算法
查看>>
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
查看>>
UNIX 高手的 10 个习惯
查看>>
传值与传引用
查看>>
HDU 1538 A Puzzle for Pirates(海盗分金问题)
查看>>
C# Web Forms - Using jQuery FullCalendar
查看>>
H5移动端知识点总结
查看>>
Sublime-Text-2-pydocstring --- 自动生成python docstring的插件
查看>>
UNIX进程环境
查看>>
学习面试题Day03
查看>>
我最喜欢的jQuery插件模板
查看>>
【云计算】Docker 多进程管理方案
查看>>
[LeetCode] Best Meeting Point 最佳开会地点
查看>>
基于InstallShield2013LimitedEdition的安装包制作
查看>>
【转】从Shell脚本内部将所有标准输出及标准错误显示在屏幕并同时写入文件的方法...
查看>>
iOS开发小技巧--利用MJExtension解决数据结构复杂的模型转换
查看>>
Python中的图形库
查看>>
Linux操作系统分析 ------------------中国科技大学
查看>>