Actioncontext跟ServletActionContext的区别---未完待续
//
public class BaseAction extends ActionSupport{
public static HttpServletRequest getRequest(){
return ServletActionContext.getRequest();
}
public static HttpServletResponse getResponse(){
return ServletActionContext.getResponse();
}
public static HttpSession getSession(){
return ServletActionContext.getRequest().getSession();
}
public static ServletContext getApplication(){
return ServletActionContext.getServletContext();
}
}
////一个博客看到的想法
Map request=(Map)ActionContext.getContext().get("request");
Map request=(Map)ActionContext.getContext().get("session");
ActionContext().getContext().get("request");//
ActionContext().getContext().getSession()//获取的是session,然后用put存入相应的值,只要在session有效状态下,这个值一直可用
ActionContext().getContext().getSession().put("x",x);//对象默认的放入map中
ActionContext().getContext().getValueStack().push(x);//在Struts2中,一个请求在最终到达Action的方法之前,Action对象本身会被压入ValueStack,可以把一个对象直接压入到valuestack中
//关于ActionContext.getContext()的用法心得
ActionContext context=ActionContext.getContext();
Map request=context.get("request");
Map session=context.getSession();
Map application=context.getApplication();
request.put("greeting","欢迎访问曾志伟的空间");//在请求中保存信息
session.put("user",user);//在session中保存user对象
application("counter",count);
在jsp页面中直接使用
<body>
<h3>${sessionScope.user.username},${requestScope.greeting}。<br>本站的访问量是:${applicationScope.counter}</h3>
</body>
当然也可以直接使用
ActionContext.getContext().put("greeting","欢迎你来访问我的网站");
${requestScope.greeting}或者<%=request.getAttribute("greeting")%>
//百度百科:actioncontext和servletContext有什么区别
ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,
该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,
那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象.
注意:在使用ActionContext时有一点要注意:
不要在Action的构造函数里使用ActionContext.getContext(),
因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null;
同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,
也不要直接将req作为类变量给其赋值。至于原因,我想是因为前面讲到的static ThreadLocal actionContext = new ActionContextThreadLocal(),
从这里我们可以看出ActionContext是线程安全的,而ServletActionContext继承自ActionContext,所以ServletActionContext也线程安全,
而线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,
也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立
了一个req。
//http://www.cnblogs.com/ningvsban/p/3740717.html
http://www.cnblogs.com/xwdreamer/archive/2010/09/26/2297083.html
Actioncontext跟ServletActionContext的区别---未完待续的更多相关文章
- Java枚举类型getClass和getDeclaringClass区别(未完待续)
Java中的枚举类型有getClass()和getDeclaringClass()两个方法,在通常情况下这两个方法返回的类型一样,在某些场景下会有不同的表现 参照 http://stackoverfl ...
- Avro和Thrift区别(未完待续)
两者都是优秀的序列化框架: Avro创造之初是Hadoop之父Doug为了创造一种更加快捷的序列化方案(此时已经有了thrift),用于Hadoop的HDFS的文件序列化问题. Thrift一个成熟的 ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- MVC丶 (未完待续······)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
- 一篇文章让Oracle程序猿学会MySql【未完待续】
一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...
- IOS之KVC和KVO(未完待续)
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)
计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...
- 阿里云服务器:IIS网站的架设(一、环境设置与安装IIS网站 二、网站的基本设置 三、建立新网站(未完待续))
Windows Server 2012 R2的Internet Information Services (IIS)网站的模块化设计,可以减少被攻击面并减轻管理负担,让系统管理员更容易架设安全的具备高 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
随机推荐
- 如用使用高版本framework,比如支持iOS5及以上的工程中使用Social.framework
在Targets -> Build Phases里的 Link Binary With Libraries项中,将高版本的framework,如Social.framework 设置成Optio ...
- [PeterDLax著泛函分析习题参考解答]第6章 Hilbert 空间
1. 证明满足 (6) 的范数可以由一个内积诱导出来. 这个结论属于 von Neumann. 证明: 以实线性空间为例, 取内积 $$\bex \sex{x,y}=\cfrac{1}{4}[\sen ...
- attribute section的用法
1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或 ...
- RHEL7 -- Linux搭建FTP虚拟用户
安装vsftpd软件包[root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum install db4 db4-utils 建 ...
- RHEL7磁盘分区挂载和格式化
安装大数据平台,每台机器需要挂载10个磁盘,用JBOD模式,操作系统为RHEL7.2. 写了两个脚本,format_disk.sh和mount_disk.sh实现磁盘自动分区格式化以及挂载,修改fst ...
- 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!
我以为我会是最坚强的那一个 我还是高估了自己 我以为你会是最无情的那一个 还是我贬低了自己 就算不能够在一起 我还是为你担心 就算你可能听不清 也代表我的心意 那北极星的眼泪 闪过你曾经的眼角迷离 那 ...
- 394. Coins in a Line
最后更新 一刷. 用数学方法是看是不是3的倍数. 不用数学方法的话要动态规划. 当前玩家,dp[i]行不行取决于dp[i-1]和dp[i-2],代表下一个玩家能不能赢,另一个玩家能赢的话当前就不能赢: ...
- 微信开发第2章 通过appid appsecret获取accesstoken
通过 appid appsecret是可以获取accesstoken的 ,请不要一直获取,不然会把token的机会浪费掉,获取到后7200秒后失效,建议保存为6000秒到7000秒左右,具体可以查看微 ...
- PHP面试题二
1.抓取远程图片到本地,你会用什么函数? fsockopen, A 2.用最少的代码写一个求3值最大值的函数. function($a,$b,$c){ * W0 z* u6 k+ e. L a: } ...
- MyEclipse10搭建Strust2开发环境
一.创建一个JavaWeb项目 启动MyEclipse10 ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProjec ...