Struts2的Action访问Session对象的两种方式及原理
标题:Struts2的Action访问Session对象的两种方式及原理
Struts2的Action中若希望访问Session对象,可采用两种方式:
1、从ActionContext中获取;
2、实现SessionAware接口。
1、从ActionContext中获取:
importjava.util.Map;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclassSessionTestActionextendsActionSupport{
publicStringexecute(){
ActionContextactionContext=ActionContext.getContext()//先获得ActionContext实例
Mapsession=actionContext.getSession();
session.put("USER_NAME","TestUser");
returnSUCCESS;
}
}
importjava.util.Map;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;publicclassSessionTestActionextendsActionSupport{publicStringexecute(){ActionContextactionContext=ActionContext.getContext();Mapsession=actionContext.getSession();session.put("USER_NAME","TestUser");returnSUCCESS;}}
2、实现SessionAware接口:
[java]viewplaincopyprint?
importjava.util.Map;
importorg.apache.struts2.interceptor.SessionAware;
importcom.opensymphony.xwork2.ActionSupport;
publicclassSessionTest1ActionextendsActionSupportimplementsSessionAware{
privateMapsession;
publicvoidsetSession(Mapsession){
this.session=session;
}
publicStringexecute(){
this.session.put("USER_NAME","TestUser1");
returnSUCCESS;
}
}
importjava.util.Map;importorg.apache.struts2.interceptor.SessionAware;
importcom.opensymphony.xwork2.ActionSupport;
publicclassSessionTest1ActionextendsActionSupportimplementsSessionAware{
privateMapsession;
publicvoidsetSession(Mapsession){
this.session=session;
}
publicStringexecute(){
this.session.put("USER_NAME","TestUser1");
returnSUCCESS;
}
}
进一步阅读Struts2.1.8.1源码,SessionAware接口的实现方式如下:
struts-default.xml配置:
<interceptors>
…
<interceptorname="servletConfig"class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
…
</interceptors>
<interceptor-stackname="defaultStack">
…
<interceptor-refname="servletConfig"/>
…
</interceptor-stack>
<interceptors>…<interceptorname="servletConfig"class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
…</interceptors><interceptor-stackname="defaultStack">…<interceptor-refname="servletConfig"/>…</interceptor-stack>
打开ServletConfigInterceptor.java源码:
publicStringintercept(ActionInvocationinvocation)throwsException{
finalObjectaction=invocation.getAction();
finalActionContextcontext=invocation.getInvocationContext();
…
if(actioninstanceofSessionAware){
((SessionAware)action)。setSession(context.getSession());
}
…
returninvocation.invoke();
}
publicStringintercept(ActionInvocationinvocation)throwsException{finalObjectaction=invocation.getAction();
finalActionContextcontext=invocation.getInvocationContext();…if(actioninstanceofSessionAware){
((SessionAware)action)。setSession(context.getSession());}…returninvocation.invoke();}
即在拦截器处理过程中发现目标Action实现了SessionAware接口,便会调用Action中已经实现的setSession(…)方法,
将ActionContext中包装的Session注入目标Action中。目标Action也就可以进一步对Session进行操作了。
文章来源:http://java.chinaitlab.com/Struts/896689.html
转载于:https://blog.51cto.com/wht6650/1316614
Struts2的Action访问Session对象的两种方式及原理相关推荐
- CAD框选对象的两种方式、AUTOCAD——删除重复线段
今天就用CAD梦想画图软件来说明一下用鼠标框选对象的两种方式的区别. 操作工具 操作系统:Windows10 CAD软件:CAD梦想画图 步骤 1.第一种方式是鼠标往左移动框选对象,会出现一个绿色的虚 ...
- putextra 传递对象_intent.putextra用法 使用Intent传递对象的两种方式 - 电脑常识 - 服务器之家...
intent.putextra用法 使用Intent传递对象的两种方式 发布时间:2017-05-22 来源:服务器之家 Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播. ...
- (9) hibernate加载持久化对象的两种方式——get、load
一.get与load对比 在hibernate中get和load方法是根据id取得持久化对象的两种方法,但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更 ...
- Asp.net Web API 返回Json对象的两种方式
这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...
- Struts2中Action访问Servlet API的三种方法
Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,能更轻松的测试该Action.但如何访问? ...
- struts2学习之表单校验的两种方式
基于覆盖validate方法的表单校验 Action类一般都继承ActionSupport类. 通过覆盖ActionSupport类的validate方法即可在自己的Action类中校验输入项的值. ...
- hibernate加载持久化对象的两种方式---------------load方式和get方式
2019独角兽企业重金招聘Python工程师标准>>> 参考:http://my.oschina.net/u/1169535/blog/282483 1. Hibernate get ...
- QT之在QML中使用C++类和对象的两种方式
一 类的方式实现在QML中使用C++对象 二 对象的方式实现在QML中使用C++对象 QML其实是对ECMAScript的扩展,融合了Qt object系统,它是一种新的解释性语言,QML引擎虽然由Q ...
- 【url传参】之 获取url?后面的参数,对应参数名获取值 和 全量获取转换为对象结构两种方式
访问你挚爱的强哥_百度搜索https://www.baidu.com/s?wd=%E4%BD%A0%E6%8C%9A%E7%88%B1%E7%9A%84%E5%BC%BA%E5%93%A5&r ...
- 访问HTTP网址的两种方式
2019独角兽企业重金招聘Python工程师标准>>> 一.使用HttpClient: NameValuePair username = new BasicNameValuePair ...
最新文章
- netapp学习(十三)---Snapshot基础知识(上)
- Java基础案例教程
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
- 100份Spring面试问答-最终名单(PDF下载)
- Solr单机安装Version5.5.2
- java redis db0 db1_SpringBoot-技术专区-Redis同数据源动态切换db
- 云计算项目实战——系统API模块
- C# 之 Win32 Api使用
- 开源办公系统:支持在线Office在线编辑、文档协同
- C# 如何插入、编辑和删除Excel批注
- 瞬时视场、识别距离、mrtd
- 使用svg实现的曲线时间线 2022-01-09
- c语言三位数中有多少素数,输出所以三位数的素数,并求素数的个数,每行输出10个数...
- php开发游戏玩家属性,游戏数值策划属性篇(一)
- mysql设置外部ip访问
- 解决在uniapp项目中小程序调用获取微信绑定手机号
- 《5G网络协议与客户感知》读书笔记 | 会话管理信令序列
- Linux驱动之platform设备驱动
- 云顶之弈怎么防止被机器人拉_云顶之奕机器人勾人规律和原理-云顶之奕机器人勾人技巧讲解...
- UGUI优化:使用镜像图片
热门文章
- Qt——菜单栏、工具栏、状态栏
- tensorflow中命名空间、变量命名的问题
- How to add libraries to “External Libraries” in WebStorm/PhpStorm/Intellij
- vue项目下,webpack.js/package.json配置
- 迭代器模式(Iterator)和组合模式(Composite)
- STORM的三种事务
- 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
- ActiveMQ笔记(二)
- 《Asp.Net 2.0 揭秘记(十四)
- Repost: An introduction to Linux IPC by Michael Kerrisk -- IPC 分类