Struts2访问session的两种方法.docx

上传人:b****1 文档编号:10660239 上传时间:2023-05-27 格式:DOCX 页数:11 大小:21.36KB
下载 相关 举报
Struts2访问session的两种方法.docx_第1页
第1页 / 共11页
Struts2访问session的两种方法.docx_第2页
第2页 / 共11页
Struts2访问session的两种方法.docx_第3页
第3页 / 共11页
Struts2访问session的两种方法.docx_第4页
第4页 / 共11页
Struts2访问session的两种方法.docx_第5页
第5页 / 共11页
Struts2访问session的两种方法.docx_第6页
第6页 / 共11页
Struts2访问session的两种方法.docx_第7页
第7页 / 共11页
Struts2访问session的两种方法.docx_第8页
第8页 / 共11页
Struts2访问session的两种方法.docx_第9页
第9页 / 共11页
Struts2访问session的两种方法.docx_第10页
第10页 / 共11页
Struts2访问session的两种方法.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Struts2访问session的两种方法.docx

《Struts2访问session的两种方法.docx》由会员分享,可在线阅读,更多相关《Struts2访问session的两种方法.docx(11页珍藏版)》请在冰点文库上搜索。

Struts2访问session的两种方法.docx

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();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2