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/ ...
随机推荐
- jQueryEasyUI中DataGrid的height,width,fit,fitColumns属性
height: 600, //不指定则默认垂直包裹,指定了则固定 width:1200,//不指定则水平100%平铺,指定了则固定 fit:false,//true:高度填充父窗体,忽略height属 ...
- USACO3.42American Heritage(二叉树)
已知中前 求后序 递归一下 有一些小细节 /* ID: shangca2 LANG: C++ TASK: heritage */ #include <iostream> #include& ...
- bzoj1034
贪心 尽可能让最强的赢,最弱的赢,都不行则最弱打最强 感性的想,我肯定要尽可能的赢,而且赢的要对等 实在不能赢就拿最小的拼,所谓的田忌赛马策略 由于总分一定,己方最差即己方最好时对方的分数 ..] o ...
- “面包屑导航”——SiteMapPath控件的使用(ASP.NET)(转)
转自:http://www.cnblogs.com/ball-head/archive/2010/09/28/1837253.html 最近在博客里写了一些日志,主要都是我在实际编程过程中遇到的问题. ...
- (转载)PHP获取客户端、PHP获取服务器相关信息
(转载)http://www.php100.com/html/webkaifa/PHP/PHP/2009/1027/3446.html 服务器变量 $_SERVER 详解: 1.$_SESSION[' ...
- RobotFramework+Selenium2library+Appium+Python+RIDE安装指南
最近在测试APP+WEB,想找一个好的自动化测试工具.然后发现RIDE这工具,框架比较自由,支持中文,有测试报告. 一个好的自动化测试就应该包含:Case管理+脚本的编写+自动生产报告. 如此一想,这 ...
- 让你的Git水平更上一层楼的10个小贴士
注意:本文中,一些命令包含含有方括号的部分(e.g.git add -p [file_name]).在这些例子中,您要在该处插入所需的数字,标示符等.而不需要保留方括号. 1.Git自动补全 如果你在 ...
- 让IE6兼容position:fixed
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- nyoj 483 Nightmare【bfs+优先队列】
Nightmare 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Ignatius had a nightmare last night. He found him ...
- oc学习之路-----搞死指针之内存存储int类型
关于每个数据类型个字节在内存中的存储地址(以int为例) 先上图 如题,为什么说好的*p = &c是1啊,为什么是513呢,一开始,我也觉得挺惊讶的,后面听老师分析了一下才知道怎么回事,但是还 ...