﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Mark's Java Blog-随笔分类-Struts2</title><link>http://www.blogjava.net/mark1207/category/31761.html</link><description>MyEclipse, Java EE, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript,SOA</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 01:56:42 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 01:56:42 GMT</pubDate><ttl>60</ttl><item><title>Struts2访问隐藏的request和session</title><link>http://www.blogjava.net/mark1207/archive/2008/05/27/203105.html</link><dc:creator>Mark</dc:creator><author>Mark</author><pubDate>Tue, 27 May 2008 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/mark1207/archive/2008/05/27/203105.html</guid><wfw:comment>http://www.blogjava.net/mark1207/comments/203105.html</wfw:comment><comments>http://www.blogjava.net/mark1207/archive/2008/05/27/203105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mark1207/comments/commentRss/203105.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mark1207/services/trackbacks/203105.html</trackback:ping><description><![CDATA[Struts2访问隐藏的request和session <br />
<br />
在Struts1.*中，要想访问request、response以及session等Servlet对象是很方便的，因为它们一直是作为形参在各个方法之间进行传递的，而在Struts2中我们就很难看到它们的芳踪了，因为我们获得表单中的值都是通过预先设置好了的get方法来得到的，那么如果有些参数我们必须通过request.getParametre或者session.getAttribute来得到，那么应该怎么做呢？按照Max的教程上的说法，可以分为两种：IoC方式和非IoC方式，如何理解这两种方式的区别呢？IoC是Spring里面的特征之一，字面意思是反转控制，说白了就是依赖注入，比方说类A依赖类B，那么就主动的给A注入一个类B的对象，下面看一下这两种方法的具体实现。<br />
<br />
1．非Ioc方式<br />
<br />
这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类，具体的方法如下所示。<br />
获得request对象：<br />
<br />
A．HttpServletRequest request = ServletActionContext.getRequest ();<br />
B．ActionContext ct= ActionContext.getContext()<br />
&nbsp;&nbsp; HttpServletRequest request=(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);<br />
<br />
获得session对象：<br />
<br />
在Struts2中底层的session都被封装成了Map类型，我们称之为SessionMap，而平常我们所说的session则是指HttpSession对象，具体的获得方法如下所示。<br />
<br />
A．Map session=ActionContext.getSession();<br />
B．Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);<br />
得到这个SessionMap之后我们就可以对session进行读写了，如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象，然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作，我们不必再去碰底层的session了。<br />
<br />
2．IoC方式<br />
<br />
这种方式相对来说变化就比较少了，具体流程如下所示。<br />
获得request对象：<br />
<br />
第一步：让action实现ServletRequestAware接口<br />
第二步：在action中声明一个HttpServletRequest类型的实例变量<br />
第三步：在action中实现ServletRequestAware接口的setServletRequest方法，实现方式很简单，如下所示。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private HttpServletRequest request;<br />
publicvoid setServletRequest(HttpServletRequest request) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.request = request;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
获得Session对象(注意，此时的session是SessionMap类型)：<br />
<br />
第一步：让action实现SessionAware接口<br />
第二步：在action中声明一个HttpServletRequest类型的实例变量<br />
第三步：在action中实现SessionAware接口的setSession方法，实现方式很简单，如下所示。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Map session;<br />
publicvoid setSession(Map session) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this. session = session;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1721226
 <img src ="http://www.blogjava.net/mark1207/aggbug/203105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mark1207/" target="_blank">Mark</a> 2008-05-27 09:26 <a href="http://www.blogjava.net/mark1207/archive/2008/05/27/203105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>