Struts2的Action访问Session对象的两种方式及原理
2013-10-29 10:39
399 查看
标题: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
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
相关文章推荐
- java 使用hibernate访问sqlserver如何配置hibernate.cfg.xml
- Spring事务处理时自我调用的解决方案 嵌套AOP
- Java读取properties文件
- 关于myeclipse打开jsp巨慢解决方案
- 55 New Features in JDK 7 - NIO2
- 如何利用eclipse查看cloudstack某个分支代码
- 如何利用eclipse查看cloudstack某个分支代码
- Struts2常用标签总结
- java 类变量 成员变量 局部变量
- JAVA用jdbc连接SQLServer2005
- eclipse 中调试android的信息解读 reed 199K, 53% free 3023K/6343K,external 0K/0K, paused 2ms+2ms
- eclipse关于Unable to install breakpoint in due to missing line number
- Android eclipse中程序调试
- java IO流的使用方式
- Spring MVC 3 深入总结 .
- mybatis + mysql +spring mvc date字段报错java.lang.NumberFormatException
- java基础每日学习20131029--序列化
- Java中强软弱虚四种引用
- android 框架androidannotations在Eclipse中的配置
- JVM笔记4:Java内存分配策略及配置参数