<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lovechina</title>
    <description>程序是越简单的越好</description>
    <link>http://lovechina.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>总结webwork里通过ActionContext以及Aware接口访问数据</title>
        <author>lovechina</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovechina.javaeye.com">lovechina</a>&nbsp;
          链接：<a href="http://lovechina.javaeye.com/blog/88097" style="color:red;">http://lovechina.javaeye.com/blog/88097</a>&nbsp;
          发表时间: 2007年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br />
//通过ActionContext访问数据<br />
//davy ,2007-06-08<br />
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br />
0.ActionContext的缺陷：<br />
我们通过静态方法访问ActionContext的，而它本身是ThreadLocal的实现，所以对<br />
action进行自动的单元测试将需要更多的工作;此外，由于能在线程调用栈的任意位<br />
置访问ActionContext,因此你能与任意ThreadLocal协作，但请不要依赖这一点，如<br />
过多依赖这一点，则你会陷入深层次的代码，而对你的action没有一的好处！<br />
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br />
00.好多方案是让你的action Class实现SessionAware接口，当然你可以认为此action<br />
依赖于CompleteStack.代码如下：</font></p>
<p><font face="Arial">public class Login extends ActionSupoort implements SessionAware,UserDaoAware<br />
{<br />
&nbsp; Map session;<br />
&nbsp; User user;<br />
&nbsp; UserDao userDao;<br />
&nbsp; //设置session,SessionAwear接口保证在action执行以前，先设置好session Map;<br />
&nbsp; public void setSession(Map session)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.session = session;<br />
&nbsp; }<br />
&nbsp; //用户登陆<br />
&nbsp; public String execute() throws Exception<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; user = this.control.getUser(user.getName,user.getPassword);<br />
&nbsp;&nbsp;&nbsp; if(user == null)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return INPUT;<br />
&nbsp;&nbsp;&nbsp; }else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.put(&quot;user&quot;,user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
}</font></p>
<p><font face="Arial">+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br />
01.获取session.<br />
&nbsp; Map session = ActionContext.getContext().getSession();<br />
&nbsp; session.put(&quot;user&quot;,user);<br />
&nbsp; return SUCCESS;<br />
&nbsp; 注意：这里得到的session已经不是servlet特有的HttpSession了，此session表现为<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map,此Map中封装了HttpSession.<br />
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br />
02.获得HttpSession.<br />
(1).<br />
&nbsp;&nbsp; ActionContext context&nbsp; = ActionContext.getContext();<br />
&nbsp;&nbsp; HttpServletRequest req = context.get(ServletActionContext.HTTP_REQUEST);<br />
&nbsp;&nbsp; HttpSession session = req.getSession();<br />
&nbsp;&nbsp; session.put(&quot;user&quot;,user);<br />
&nbsp;&nbsp; return SEUCCESS;<br />
&nbsp;&nbsp; 注意：不到万不得以，不要同时使用ActionContext和ServletActionContext这两个类.<br />
(2).这是在下常用的方法.<br />
&nbsp;&nbsp; HttpServletRequest req = ServeletActionContext.getRequest();<br />
&nbsp;&nbsp; HttpSession session = req.getSession();<br />
&nbsp;&nbsp; session.put(&quot;user&quot;,user);<br />
&nbsp;&nbsp; return SUCCESS;<br />
(3).以下才是最推荐的方式，通过让你的action class实现ServletRequestAwear接口.<br />
&nbsp;&nbsp; public class Login extends ActionSupport implements ServletRequestAwear,UserDaoAwear<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest req;<br />
&nbsp;&nbsp;&nbsp;&nbsp; User user;<br />
&nbsp;&nbsp;&nbsp;&nbsp; UserDao userDao;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; public void setServletRequest(HttpServletRequest req)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;this.req = req;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; public String execute() throws Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user = userDao.findUser(user.getName(),user.getPassword());<br />
&nbsp;if(user == null)<br />
&nbsp;{<br />
&nbsp;&nbsp; return INPUT;<br />
&nbsp;}else<br />
&nbsp;{<br />
&nbsp;&nbsp; HttpSession session = req.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.put(&quot;user&quot;,user);<br />
&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font face="Arial">&nbsp;&nbsp; }<br />
</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://lovechina.javaeye.com/blog/88097#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Jun 2007 11:44:32 +0800</pubDate>
        <link>http://lovechina.javaeye.com/blog/88097</link>
        <guid>http://lovechina.javaeye.com/blog/88097</guid>
      </item>
  </channel>
</rss>