Struct2中Session的获取及数据共享原理
来源:互联网 发布:mysql 树查询 编辑:程序博客网 时间:2024/04/28 11:13
Struct2中的Session一般有三种获取方式,网上一搜就大把的是,这里说一种比较常用的是实现SessionAware接口,这种方式更符合面向接口的编程思想,使用这种方式需要创建一个MAP类型的成员变量Session,并实现SetSession方法:
Session一般不用于前台往后台传数据,往Session中放置数据一般在后台来做,一旦在Session中放置了某些数据,则在Session超过最大有效期前,Session中的这些数据是一直存在的,并且在浏览器关闭前,不管在哪个方法中都能取到Session中的值.
扩展:当然在浏览器关闭后可以通过将Cookie保存在本地,实现再次打开浏览器时获取之前已经生成的Session(Cookie中保存的有Session的ID,再次请求服务器时,服务器会根据SessionId寻找Session),详情请参照另一片博客:Cookie的保存形式及Session的实现机制.
即使是在多例模式先的Action中,Session也是共享的.有人会疑惑:在struct2默认的多例Action中,每一次请求就
会创建一个新的action,新创建的action中并不可能存在先前的Session啊?
其实,是存在的,比如通过实现SessionAware来得到Session,是因为实现了SetSession这个方法,SessionAware
的实现方式如下:
图中的ActionContext.getSession()这个方法会先搜索session,如果有session则返回,如果没有才创建.
图中SessionAware是作为拦截器存在,在这里需要了解一下struct的执行流程,看一下将SessionAware配置
在拦截器中有什么作用:
(1) 客户端(Client)向Action发用一个请求(Request)
(2) Container通过web.xml映射请求,并获得控制器(Controller)的名字
(3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在
Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
(4) 控制器(Controller)通过ActionMapper获得Action的信息
(5) 控制器(Controller)调用ActionProxy
(6) ActionProxy读取Struts.xml文件获取Action和Interceptor stack的信息。
(7) ActionProxy把request请求传递给ActionInvocation
(8) ActionInvocation依次调用action和interceptor
(9) 根据action的配置信息,产生result
(10) Result信息返回给ActionInvocation
(11) 产生一个HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
由此可见,Struct2的执行机制总是先new Action,然后才走拦截器,在Action被创建后,拦截器会判断Action是否实现了SessionAware接口,如果实现了,则会调用Action中已经实现的SetSession方法,同时将 ActionContext.getSession()做为参数传递进去,从而得到Session.
以上纯属个人总结,写下备忘,如果错误请大神即使指出,免得误人子弟...
- Struct2中Session的获取及数据共享原理
- session原理及集群中session共享实现原理
- session原理及集群中session共享实现原理
- struct2 中获取 ServeltConfig对象的实现
- session原理及实现共享
- session原理及实现共享
- session原理及实现共享
- session原理及实现共享
- session原理及实现共享
- session原理及实现共享
- struct2获取request,session,以及显示
- session原理及实现共享 (精简)
- spring boot实现session 同步共享及 根据sessionid 获取相应的session
- struct2的配置及理解
- struct2 的application,request,session 的使用
- SharePreference原理及跨进程数据共享的问题
- Struct2设置全局共享的action
- android中HttpClient获取Session然后使用 WebView共享session的解决办法(转)
- javamail设置多个收件人发送简单文本邮件
- js对象字面量的使用
- java开发超级简单技巧
- Ehcache 分布式缓存 -springMVC
- iOS 人民币符号与日圆符号的混淆
- Struct2中Session的获取及数据共享原理
- 用Java打印空心菱形
- CE是什么?
- LeetCode-513. Find Bottom Left Tree Value (JAVA)(最左下结点)
- sift特征提取
- linux网络编程(9)——UDP编程
- 2017 Wuhan University Programming Contest 现场赛G. Room
- 哥德巴赫猜想
- c#的默认访问权限