Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)
1:在Action中如何获得作用域(request,session,application)对象;
取得Map(键值对映射集)类型的requet,session,application;
对数据操作的所有方法:(即把数据保存到域中)
主要使用的是方式2和方式3;
方式1:直接获取ServletApi,核心类是ServletActionContext提供的静态的方法;
package com.bie.lesson04; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /**
* @author Author:别先生
* @date Date:2017年9月11日 下午10:06:41
*
*
*/
public class StrutsData extends ActionSupport{ /**
*
*/
private static final long serialVersionUID = 1L; @Override
public String execute() throws Exception { //数据保存到域中
//方式一,直接拿到servletApi执行操作
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext application = ServletActionContext.getServletContext();
//操作
request.setAttribute("request_data", "request_data");
session.setAttribute("session_data", "session_data");
application.setAttribute("application_data", "application_data"); return SUCCESS;
}
}
方式2:通过ActionContext获取不同(代表request/session/application)的map;
public class ScopeAction01 { private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application; public ScopeAction01(){
request = (Map<String, Object>) ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication(); } public String execute(){
//向作用域中存储数据
request.put("requestKey", "requestValue");
session.put("sessionKey", "sessionValue");
application.put("applicationKey", "applicationValue"); return "success";
} }
关键代码
方式3:实现接口的方法:(RequestAware/SessionAware/ApplicationAware);
package com.bie.action01; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; /**
* @author 作者:别先生
* @version 创建时间:2017年5月7日 上午8:37:05
* 类说明
* 作用域的使用方法2
*/ public class ScopeAction2 implements RequestAware,SessionAware,ApplicationAware{ private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application; public void setApplication(Map<String, Object> application) {
this.application = application;
} public void setSession(Map<String, Object> session) {
this.session = session;
} public void setRequest(Map<String, Object> request) {
this.request = request;
} public String execute(){
//map使用put设置值
request.put("requestKey", "requestValue");
session.put("sessionKey", "sessionbValue");
application.put("applicationKey", "applicationValue"); return "success";
} }
关键代码
方式1和方式2简介:
第一步: 引包,省去
第二步:配置Struts2的过滤器
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>struts2_20170221</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <!-- struts2过滤器 -->
<filter>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- struts2过滤器映射 -->
<filter-mapping>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器映射 -->
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>
第三步:开发Action,方式一和方式二的对比
package com.bie; import java.util.Map; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 下午4:46:14
*
*/
public class FinalAction extends ActionSupport{ private static final long serialVersionUID = 1L; @Override
public String execute() throws Exception {
//1:请求数据封装 2:调用service处理业务逻辑,拿到结果数据
//3:数据保存到域中 //【struts2和servlet耦合的方法,
// 比如获取目录application.getRealPath("");等等】
//Struts中对数据操作,方式1:直接拿到ServletApi,执行操作
/*HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext(); request.setAttribute("request_data", "request请求的数据");
session.setAttribute("session_data", "session请求的数据");
application.setAttribute("application_data", "application请求的数据");*/ //[推荐:解耦的方式实现对数据的操作,没有和servlet有耦合,
// 向域对象中存储值推荐]
//Struts中对数据操作,方式2:直接拿到ActionContext,执行操作
//getContext()发发一个静态方法,可以直接调用,返回值就是ActionContext
ActionContext ac=ActionContext.getContext();
//得到Strust对HttpServletRequest对象进行了封装,封装为了一个Map
//拿到表示request对象 的map
Map<String, Object> request=ac.getContextMap();
//拿到session对象的map
Map<String, Object> session=ac.getSession();
//拿到application对象的map
Map<String, Object> application=ac.getApplication(); //数据
request.put("request_data", "request_data_actionContext");
session.put("session_data", "session_date_actionContext");
application.put("application_data", "application_date_actionContext");
return SUCCESS;
} }
第四步:Struts2的配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 声明包 -->
<package name="finalPackage" extends="struts-default">
<action name="requestAction" class="com.bie.FinalAction">
<result name="success">success.jsp</result>
</action> <action name="ImplAction" class="com.bie.ImplAction">
<result name="success">success.jsp</result>
</action>
</package> </struts>
方式三:只有开发Action的过程不一样,其他一样,这里只写了开发Action的代码
package com.bie; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 下午7:40:02
*
*/
public class ImplAction extends ActionSupport
implements RequestAware,SessionAware,ApplicationAware{ private static final long serialVersionUID = 1L;
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String,Object> application; //struts2运行的时候,会把代表request的map对象注入
@Override
public void setRequest(Map<String, Object> request) {
this.request=request;
} //struts2运行的时候,会把代表session的map注入
@Override
public void setApplication(Map<String, Object> session) {
this.session=session;
} //struts2运行的时候,会把代表application的map注入
@Override
public void setSession(Map<String, Object> application) {
this.application=application;
} @Override
public String execute() throws Exception {
request.put("request_data", "request_dataAware");
session.put("session_data", "session_dataAware");
application.put("application_data","application_dataAware");
return SUCCESS;
}
}
Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)的更多相关文章
- Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比
Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比 上一篇文章: Android自动化测试中AccessibilityService获取控件信息(1 ...
- 在单文件组件中,引入安装模块里的css的2种方式:script中引入、style中引入
在单文件组件中,引入安装模块里的css的2种方式:script中引入.style中引入 1.script中引入 <script> import 'bulma/css/bulma.css' ...
- struts2 2.5.16 通配符方式调用action中的方法报404
1.问题描述 在struts.xml中配置用通配符方式调用action中的add()方法,访问 http://localhost:8080/Struts2Demo/helloworld_add.act ...
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...
- Linux上删除大量文件几种方式对比
目录 Linux上删除大量文件几种方式对比 1. rm删除:因为文件数量太多,rm无法删除(报错) 2. find查找删除:-exec 3. find查找删除:xargs 4. find调用-dele ...
- Struts2里如何取得request,session,application
第一种:取得MAP类型的request,session,application在java文件里写 package com.xjtu.st; import java.util.Map; import c ...
- Struts2初学 Struts2在Action获取内置对象request,session,application(即ServletContext)
truts2在Action中如何访问request,session,application(即ServletContext)对象???? 方式一:与Servlet API解耦的方式 可以使用 ...
- Strut2 ognl取出存放在request,session,application和对象栈的中的值
1.取出request,session,applicaiton中的值 a.往里面加入request,session,application中加入值 public String testServlet( ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
随机推荐
- CentOS6.8下Jenkins+maven+tomcat+git+shell自动构建、部署web应用环境的搭建
参考资料:http://www.cnblogs.com/cheng95/p/6542036.html http://www.cnblogs.com/software-test/p/7068278.ht ...
- 02-里氏替换原则(LSP)
1. 背景 有一个功能p1,由类A完成,现在需要将功能p1进行扩展,扩展后的功能为p3,p3由原功能p1和新功能p2组成,而新功能p3和p2均由类A的子类B来完成,子类B在完成新功能p2的同时,可能会 ...
- 在O(N)时间内求解 正数数组中 两个数相加的 最大值
一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: max ...
- 【BZOJ4827】【HNOI2017】礼物
强省HN弱省HA……(读作强省湖南弱省蛤 原题: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个 ...
- Nginx GZIP 压缩
[ HTTP 开启gzip ] gzip on; // 开启 nginx在线实时压缩数据流: gzip_min_length 1k; // 允许压缩的页面最小字节 gzip_buffers 32k; ...
- DSO windowed optimization 代码 (1)
这里不想解释怎么 marginalize,什么是 First-Estimates Jacobian (FEJ).这里只看看代码,看看Hessian矩阵是怎么构造出来的. 1 优化流程 整个优化过程,也 ...
- python中的%s%是什么意思
它是一个字符串格式化语法(它从C借用). 请参阅 “格式化字符串”: Python支持将值格式化为字符串.虽然这可以包括非常复杂的表达式,但最基本的用法是将值插入到%s 占位符的字符串中 . 编辑 ...
- Java 文本I/O 处理
File类包含获得一个文件/目录的属性,以及对文件/目录进行改名和删除的方法. File类包含许多获取文件属性的方法,以及重命名和删除文件和目录的方法,但是,File类不包含读写文件内容的方法 Fil ...
- 【BARTS计划】【Tips_Week1】20190331更新
BARTS计划 · Review :每周学习至少一个技术技巧. 一.快捷键 1. 快速批量注释代码的方法:选中需要注释的代码,按 ctrl+/ 二.重要命令行命令 1. 新增文件:git add a. ...
- SpringBoot三种配置Dubbo的方式
*必须首先导入dubbo-starter (1).使用SpringBoot配置文件(application.properties或application.yml) dubbo.application. ...