几种对数据的处理

1、直接获取servletapi

核心类:servletActionContext提供的静态方法

package com.data;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

/*
 * 数据操作
 */
import com.opensymphony.xwork2.ActionSupport;

public class DataAction extends ActionSupport {
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		//1、请求数据封装,2、调用servlet处理业务,拿到结果数据集

		//3、数据保存到域中

		//struts对数据的操作,方式一,直接拿到servletApi,执行操作
		HttpServletRequest request=ServletActionContext.getRequest();
		HttpSession session=request.getSession();
		ServletContext application=request.getServletContext();
		//操作
		request.setAttribute("request_data", "request_data");
		request.setAttribute("session_data", "session_data");
		request.setAttribute("application_data", "application_data");

		return SUCCESS;
	}
}

2、通过ActionContext获取不同的map

(注意:对actionContext的初始化不能再构造方法中执行,因为struts的执行顺序是:先执行Action类的创建,在执行拦截器,拦截器执行完后,在执行action类的业务逻辑方法,会导致数据为空)

package com.data;
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;

public class DataAction1 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub

		/*
		 * 解耦的方式实现对数据的操作
		 */
		ActionContext ac=ActionContext.getContext();
		//得到struts对HttpServletRequest对象进行封装为一个Map对象
		//拿到表示request对象的Map
		Map<String ,Object> request=ac.getContextMap();
		//拿到表示session对象的map
		Map<String , Object> session=ac.getSession();
		//拿到表示ServletContext对象的Map
		Map<String, Object> application=ac.getApplication();

		request.put("request_data", "request_data_ActionContext");
		request.put("session_data", "session_data_ActionContext");
		request.put("application_data", "application_data_ActionContext");
		return SUCCESS;
	}
}

3、实现接口的方法(RequestAware,SessionAware,ApplicationAware)

package com.data;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
/*
 * 数据操作
 */
import com.opensymphony.xwork2.ActionSupport;
/*
 * 方式三:实现接口的方式
 */
public class DataAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
	private Map<String, Object> request;
	private Map<String, Object> session;
	private Map<String, Object> application;

	//在struts运行的时候会把代表application的map注入
	@Override
	public void setApplication(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		this.application=arg0;
	}
	//在struts运行的时候会把代表session的map注入
	@Override
	public void setSession(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		this.session=arg0;
	}
	//在struts运行的时候会把代表request的map注入
	@Override
	public void setRequest(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		this.request=arg0;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		//数据
		request.put("request_data", "request_data_Aware");
		request.put("session_data", "session_data_Aware");
		request.put("application_data", "application_data_Aware");
		return SUCCESS;
	}

}

总结:

  第一种是与servlet的耦合度很高,其余两种都是解耦的方式,第二种和第三种的区别不大,如果action中业务方法很多,最好使用第三种,因为获取的request,session和application几乎都会在业务方法中执行的。

时间: 2024-08-02 23:15:41

几种对数据的处理的相关文章

如何增大二维码种的数据存储

最近在做项目,需求就是要传尽量多的数据,属于一个调研,估计后期会加入到项目里面,二维码其实不推荐放入大量数据,但是需求嘛,拿钱干活,可能后期还会优化,因为目前的画扫描的效率不高,主要直接用的原生的开源库zxing感觉效率不高. 一开始,从数据源下手,进行数据源压缩,首先尝试了hufman编码,huffman主要是一些开源的算法,但是实现从建树到压缩,其实有很大区别,文件我直接上传了,有兴趣的可以看一下: http://download.csdn.net/detail/shidongdong201

55种开源数据可视化工具简介

55种开源数据可视化工具简介 雪姬 2015-04-21 11:47:56 数据可视化 评论(2)   数据时代数据可视化成为理解和表达数据的有效甚至是唯一的手段. 一共56个,盘点最实用的大数据可视化分析工具 工欲善其事必先利其器,本文对55个流行的数据可视化工具开源协议,主页,文档,案例等资源的进行简单介绍,其中包括著名的D3.js,R,Gephi,Raphaël,Processing.js,Tableau Public,Google Chart Tools,Arbor.js等,资料来源ht

Request三种获取数据的方式

今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Request.QueryString: 该方法主要是获取页面路径URL的参数: 2. Request.Form:该方法主要是以post请求方式获取报文体的参数: 3. Request.param:包含上面两种方式,它会在QueryString,Form,ServerVariable中都搜索一遍: 而我今

sas数据读取详解 四种读取数据方式以及数据指针的位置 、读取mess data的两个小工具、特殊的读取技巧、infile语句及其选项(dsd dlm missover truncover obs firstobs)、proc import、自定义缺失值

(The record length is the number of characters, including spaces, in a data line.) If your data lines are long, and it looks like SAS is not reading all your data, then use the LRECL= option in the INFILE statement to specify a record length at least

四种保存数据的方式

转载地址:http://blog.csdn.net/tianyitianyi1/article/details/7713103 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:

ajax有两种提交数据的方式,分别为get和post(转)

ajax有两种提交数据的方式,分别为get和post.post方法可传输大于2K的数据,在Ajax里的应用不同之处在于:"post方法的请求地址与传输的数据是放在两个对象里—-请求地址放在open对象里,传输的数据放在send对象里:并且在传输数据之前定义一个传输文件HTTP头信息(setRequestHeader)" 以下为引用的内容: <SCRIPT LANGUAGE="javascript"> function saveUserInfo(){ //

GPRS GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术

GPRS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术.GPRS可说是GSM的延续.GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输,因此使用者所负担的费用是以其传输资料单位计算,并非使用其整个频道,理论上较为便宜.GPRS的传输速率可提升至56甚至114Kbps.[1]

谈谈Delphi中的类和对象:五、类是一种对数据和操作高度的封装机制;六、类是一种代码重用机制

五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; public Constructor Create; function GetName: String; procedure SetName(AName: String); end; implementation constructor TEmployee.Create; begin FName:= 'Xu

几种Android数据序列化方案

一.引言 数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. 从广义上讲,数据序列化就是将数据结构或者是对象转换成我们可以存储或者传输的数据格式的一个过程,在序列化的过程中,数据结构或者对象将其状态信息写入到临时或者持久性的存储区中,而在对应的反序列化过程中,则可以说是生成的数据被还原成数据结构或对象的过程. 这样来说,数据序列化相当于是将我们原先的对象序列

一种存储数据的方法

写程序就是和逻辑和数据打交道,说的简单一点就是和数据打交道.说到数据,数据的存储当然是很重要的. 数据存储也是有一定的方法,在平常中,我们会用到int型来存储数据,或者bool型(C语言中没有,char型)来存储表示0,1的flag.有时候想想,如果只是简单的存储true和false的话,对于unsigned char型来说是否过于浪费了?信息论告诉我们,1bit数据就可以表示true和false,为什么不能将其存到1bit中? 那么,现在,我们开始将数据压缩. 如果有8个这样的数据,我们可以存