论坛首页 入门技术论坛

struts2疑难之---ActionContext初始化问题

浏览 3734 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-30  
用过Struts2的兄弟们都知道,在action中不需要再使用 response ,request,因为架构设计中已经将Action和servlet解耦,可是如果一旦需要使用response,request等等的时候,怎么办?
比如 需要用session,cookie之类的,remoteAddr等等

一般怎么处理呢

HttpServletRequest request =(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
这样既可得到request

但是ActionContext.getContext()里面一定有HTTP_REQUEST这个值对吗,不一定

简单说 ,如果Http请求没有使用Action请求,那么这个ActionContext.getContext(),其实是个Map,里面的key大概是6个,没有request,response,比如你某个请求是一个jsp,在jsp中使用了某个帮助类,比如CookieUtil来判断并获取cookie,这时候就出问题了
request.getCookies();就有问题了,debug发现request是null

不过如果把这个jsp写成一个没有Action类的action
<action name="testCookie">
<result>testCookiePage.jsp</result>
</action>
这样就可以得到正常的request,一切都正常
debug发现,这个时候ActionContext.getContext()的map中有27个key,包括request,response,
有时间还得把ActionContext初始化过程仔细看看

   发表时间:2009-12-31  
ServletActionContext.getRequest();
0 请登录后投票
   发表时间:2009-12-31  
wangshare 写道
用过Struts2的兄弟们都知道,在action中不需要再使用 response ,request,因为架构设计中已经将Action和servlet解耦,可是如果一旦需要使用response,request等等的时候,怎么办?
比如 需要用session,cookie之类的,remoteAddr等等

一般怎么处理呢

HttpServletRequest request =(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
这样既可得到request

但是ActionContext.getContext()里面一定有HTTP_REQUEST这个值对吗,不一定

简单说 ,如果Http请求没有使用Action请求,那么这个ActionContext.getContext(),其实是个Map,里面的key大概是6个,没有request,response,比如你某个请求是一个jsp,在jsp中使用了某个帮助类,比如CookieUtil来判断并获取cookie,这时候就出问题了
request.getCookies();就有问题了,debug发现request是null

不过如果把这个jsp写成一个没有Action类的action
<action name="testCookie">
<result>testCookiePage.jsp</result>
</action>
这样就可以得到正常的request,一切都正常
debug发现,这个时候ActionContext.getContext()的map中有27个key,包括request,response,
有时间还得把ActionContext初始化过程仔细看看



不知道你那里还需要这两个对象,完全是为了解耦才去掉的,cookie也有对应的发那个发,而你一定要的话,需要你的action实现servletRequestAware 或者 servletResponseAware接口就好了!!
0 请登录后投票
   发表时间:2010-01-04  
楼上正解!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics