码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2中的ActionContext和ServletActionContext的区别和用法

时间:2014-08-02 23:31:28      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:struts   struts2   线程安全   线程   

今天学习Struts2的时候遇到“访问和添加属性”的问题,然后就学到了ActionContext和ServletActionContext之间的区别和用法,然后又在网上搜了下别人的文章大致了解了一下,就想着总结一下。

参考文章1:http://www.cnblogs.com/tanglin_boy/archive/2010/01/18/1650871.html

参考文章2:http://blog.csdn.net/woshixuye/article/details/8172777

相信稍微了解的看看这三篇文章应该能够弄懂其中的意思。

下面写下我的总结以及写的代码。

一、ActionContext

xwork框架的ActionContext是Action执行时的上下文,存放Action执行时需要用到的对象。可以把ActionContext看成是一个容器(Map),在这个容器中存放的对象就是我们在执行Action的时候需要用到的对象(Application,session,request等,在下边我会介绍如何获得)。
一般情况我们的ActionContext都是通过:ActionContext context = (ActionContext) actionContext.get()来获取的。
actionContext对象的创建过程是:static ThreadLocal actionContext = new ActionContextThreadLocal()。
ActionContextThreadLocal是实现ThreadLocal的一个内部类。ThreadLocal可以命名为"线程局部变量",它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。这样ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的。
下边的java代码是通过ActionContext对象来添加属性
public class Hello extends ActionSupport {
	public String execute(){
		ActionContext ctx = ActionContext.getContext(); //创建ActionContext对象
		ctx.getApplication().put("app", "Application范围");//向servletContext里放入app属性,内容是"Application范围"
		ctx.getSession().put("ses", "session范围"); //向session里面放入ses属性,内容是"Session范围"
		ctx.put("req", "request范围");//往request里放入req属性,内容是"request范围"
		
		return SUCCESS;
	}
}
在我们取得Application、Session、Request对象之后,用put()方法添加属性,是因为得到的对象被框架封装成了Map对象
下边的java代码是通过ActionContext对象访问前台传进来的属性
//在Action中取得request请求参数"username"的值:
public class test extends ActionSupport{
	public String execute(){
		ActionContext ctx = ActionContext.getContext(); //得到ActionContext对象
		Map param = ctx.getParameters(); //通过getParameters()方法返回一个Map对象
			
		//通过param.get("username")可以取值。值得注意的是param.get("username")是一个String数组
		//既然是String数组就需要这样取值
		String value[] = (String[])param.get("username");
		String username = "";
		for(int i=0;i<value.length;i++)
		{
			username +=value[i];
		}
		System.out.println(username);
		
		return SUCCESS;
	}
}





Struts2中的ActionContext和ServletActionContext的区别和用法,布布扣,bubuko.com

Struts2中的ActionContext和ServletActionContext的区别和用法

标签:struts   struts2   线程安全   线程   

原文地址:http://blog.csdn.net/u010800530/article/details/38351451

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!