Struts2访问session的两种方法.docx
《Struts2访问session的两种方法.docx》由会员分享,可在线阅读,更多相关《Struts2访问session的两种方法.docx(11页珍藏版)》请在冰点文库上搜索。
Struts2访问session的两种方法
struts2访问session的两种方法
央邦0首付,低押金先就业后付款
[上海央邦]学一送一,超值!
50000年薪起,顶级4G手机开发!
【安博亚威】CCIE考试通过率第一!
Windows高级工程师的培训地
java培训到达内,行业领先品牌
中国IT实验室收集整理
佚名
2012-8-2110:
37:
46
保存本文
推荐给好友
收藏本页
欢迎进入Java社区论坛,与200万技术人员互动交流>>进入
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();
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配置:
…
…
…
…
…………
打开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进行操作了。
Struts2笔记–Struts2中访问Web元素的3中方法本文由arthinking发表于806天前⁄J2EE⁄暂无评论⁄被围观3,422views+
1、通过RequestAware,SessionAware,ApplicationAware获取:
在Struts2中不能直接访问Request,Session,Application元素,但是可以使用Struts2中提供的RequestAware,SessionAware,ApplicationAware。
在这里要分别为三个对象提供setter方法,以便让struts自动执行,使用IoC(控制反转)进行赋值。
下面的LoginAction使用ModelDriven获取User,放入Session中,并在request和application中分别放入“test1”和“test2”。
LoginAction:
publicclassLoginActionextendsActionSupportimplementsModelDriven,RequestAware,SessionAware,ApplicationAware{
privateMaprequest;
privateMapsession;
privateMapapplication;
privateUseruser=newUser();
publicvoidsetSession(Mapsession){
this.session=session;
}
publicvoidsetRequest(Maprequest){
this.request=request;
}
publicvoidsetApplication(Mapapplication){
this.application=application;
}
publicvoidsetUserService(UserServiceImpluserService){
this.userService=userService;
}
publicStringexecute(){
session.put("user",userRe);
request.put("req","test1");
application.put("app","test2");
return"result";
}
}
在页面中读取保存的数据可以用HttpServletRequest,HttpSession,ServletContext等直接访问,也可以使用Struts标签通过StackContext访问。
在页面中可以按照以下方式读取保存的数据:
propertyvalue="#session.user.userPhoto"/>"/>
--userPhoto为User的一个属性-->
--使用标签OGNL表达式的方式访问StackContext中的值,需要加“#”-->
propertyvalue="#request.req"/>
--使用HttpServletRequest方式访问-->
<%=request.getAttribute("req")%>
propertyvalue="#application.app"/><%=application.getAttribute("app")%>
--使用OGNL表达式访问StackContext中的attr获取具体的数据-->
propertyvalue="#attr.user.userPhoto"/>
propertyvalue="#attr.req"/>
propertyvalue="#attr.app"/>
2、通过ActionContext获取Map类型的元素:
privateMaprequest;
privateMapsession;
privateMapapplication;
//可以在构造方法中取值
publicLoginAction1(){
request=(Map)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}
publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
returnSUCCESS;
}
3、通过ServletActionContext获取原始的web元素类型:
privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;
publicLoginAction3(){
request=ServletActionContext.getRequest();
session=request.getSession();
application=session.getServletContext();
}
struts2访问web元素
2011-12-3021:
13:
36|分类:
struts2|标签:
struts2访问web元素|字号订阅
取得Map类型的request、session、application、真实类型的HttpServletRequest、HttpSession、HttpServletApplication
第一种方式:
在Action中取得Map类型的request、session、application依赖于容器的方式
publicclassLoginAction1extendsActionSupport{
privateMaprequest;
privateMapsession;
privateMapapplication;
//构造函数
publicLoginAction1(){
request=(Map)ActionContext.getContext().get("request");
//为什么直接在get里面填写request就可以取得Map类型的request了呢?
这是为什么呢
//我们可以在jsp的页面上使用debug>,就可以发现在debug中有两部分内容
//第一部分:
Valuestack(值栈)其中包含的是一些Action中的属性、errors、fieldErrors、actionErrors等内容
//这些值可以在页面上用propertyvalue="errors.name[0]"/>取出错误信息或propertyvalue="action中的属性"/>
//第二部分:
StackContext也就是ActionContext(action的上下文环境),其中就包括了许多的key和对应的value
//在key的取值中就有request,所以上面用get("request")的方式就会取到Map类型的request值
//还有一点需要注意,在页面上访问ActionContext中的值时需要使用#key的方式。
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}
publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
requestSUCCESS;
}
}
前台jsp页面访问时,可以这样来访问:
propertyvalue="#request.r1"/>|<%=request.getAttribute("r1")%>
propertyvalue="#session.s1"/>|<%=session.getAttribute("s1")%>
propertyvalue="#application.a1"/>|<%=application.getAttribute("a1")%>
propertyvalue="#attr.a1"/>//attr会自动搜索request,session,application范围搜索
第二种方式:
IOC方式
publicclassLoginAction2extendsActionSupportimplementsRequestAware,SessionAware,ApplicationAware{
privateMaprequest;
privateMapsession;
privateMapapplication;
//DIdependencyinjection
//IoCinverseofcontrol
publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
returnSUCCESS;
}
@Override
publicvoidsetRequest(Maprequest){
this.request=request;
}
@Override
publicvoidsetSession(Mapsession){
this.session=session;
}
@Override
publicvoidsetApplication(Mapapplication){
this.application=application;
}
}
其中的aware(得知,知道的意思),需要重写对应的方法
第三种方法:
获得HttpServletRequest、HttpSession、HttpServletApplication依赖于容器的方式
publicclassLoginAction3extendsActionSupport{
privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;
publicLoginAction3(){
request=ServletActionContext.getRequest();
session=request.getSession();
application=session.getServletContext();
}
publicStringexecute(){
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
returnSUCCESS;
}
}
第四种方式:
获得HttpServletRequest、HttpSession、HttpServletApplicationIOC方式
publicclassLoginAction4extendsActionSupportimplementsServletRequestAware{
privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;
publicStringexecute(){
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
returnSUCCESS;
}
@Override
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
this.session=request.getSession();
this.application=session.getServletContext();
}
}