﻿<?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-石头，剪子，布-文章分类-ssh相关</title><link>http://www.blogjava.net/xiaoshi/category/27333.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 08 Jan 2011 23:07:49 GMT</lastBuildDate><pubDate>Sat, 08 Jan 2011 23:07:49 GMT</pubDate><ttl>60</ttl><item><title>spring拦截器拦截struts</title><link>http://www.blogjava.net/xiaoshi/articles/169824.html</link><dc:creator>小石~~</dc:creator><author>小石~~</author><pubDate>Sun, 23 Dec 2007 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoshi/articles/169824.html</guid><wfw:comment>http://www.blogjava.net/xiaoshi/comments/169824.html</wfw:comment><comments>http://www.blogjava.net/xiaoshi/articles/169824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoshi/comments/commentRss/169824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoshi/services/trackbacks/169824.html</trackback:ping><description><![CDATA[<ol>
    <li>创建拦截器。
    </li>
    <li>注册拦截器。
    </li>
    <li>声明在何处拦截代码。 </li>
</ol>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">package ca.nexcel.books.interceptors;
            import org.springframework.aop.MethodBeforeAdvice;
            import java.lang.reflect.Method;
            public class LoggingInterceptor implements MethodBeforeAdvice {
            public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("logging before!");
            }
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>这个拦截器非常简单。<code>before()</code> 方法在拦截点中每个方法之前运行。在本例中，它打印出一句话，其实它可以做您想做的任何事。下一步就是在 Spring 配置文件中注册这个拦截器，如清单 8 所示：</p>
<br />
<a name="N1024C"><strong>清单 8. 在 Spring 配置文件中注册拦截器</strong></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
            &lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
            "http://www.springframework.org/dtd/spring-beans.dtd"&gt;
            &lt;beans&gt;
            &lt;bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/&gt;
            &lt;bean name="/searchSubmit"
            class="ca.nexcel.books.actions.SearchSubmit"&gt;
            &lt;property name="bookService"&gt;
            &lt;ref bean="bookService"/&gt;
            &lt;/property&gt;
            &lt;/bean&gt;
            &lt;!--  Interceptors --&gt;
            &lt;bean name="logger"
            class="ca.nexcel.books.interceptors.LoggingInterceptor"/&gt; <span class="boldcode">|(1)</span>
            &lt;!-- AutoProxies --&gt;
            &lt;bean name="loggingAutoProxy"
            class="org.springframework.aop.framework.autoproxy.
            BeanNameAutoProxyCreator"&gt; <span class="boldcode">|(2)</span>
            &lt;property name="beanNames"&gt;
            &lt;value&gt;/searchSubmit&lt;/valuesgt; <span class="boldcode">|(3)</span>
            &lt;/property&gt;
            &lt;property name="interceptorNames"&gt;
            &lt;list&gt;
            &lt;value&gt;logger&lt;/value&gt; <span class="boldcode">|(4)</span>
            &lt;/list&gt;
            &lt;/property&gt;
            &lt;/bean&gt;
            &lt;/beans&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>您可能已经注意到了，清单 8 扩展了 <a href="http://www.ibm.com/developerworks/cn/java/j-sr2.html#code6">清单 6</a> 中所示的应用程序以包含一个拦截器。具体细节如下：</p>
<ul>
    <li>在 (1) 处，我注册了这个拦截器。
    </li>
    <li>在 (2) 处，我创建了一个 bean 名称自动代理，它描述如何应用拦截器。还有其他的方法定义拦截点，但是这种方法常见而简便。
    </li>
    <li>在 (3) 处，我将 Struts 动作注册为将被拦截的 bean。如果您想要拦截其他的 Struts 动作，则只需要在 "beanNames" 下面创建附加的 <code>&lt;value&gt;</code> 标记。
    </li>
    <li>在 (4) 处，当拦截发生时，我执行了在 (1) 处创建的拦截器 bean 的名称。这里列出的所有拦截器都应用于&#8220;beanNames&#8221;。 </li>
</ul>
<img src ="http://www.blogjava.net/xiaoshi/aggbug/169824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoshi/" target="_blank">小石~~</a> 2007-12-23 17:26 <a href="http://www.blogjava.net/xiaoshi/articles/169824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载 我的struts2配置，间接实现零配置 </title><link>http://www.blogjava.net/xiaoshi/articles/160625.html</link><dc:creator>小石~~</dc:creator><author>小石~~</author><pubDate>Wed, 14 Nov 2007 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoshi/articles/160625.html</guid><wfw:comment>http://www.blogjava.net/xiaoshi/comments/160625.html</wfw:comment><comments>http://www.blogjava.net/xiaoshi/articles/160625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoshi/comments/commentRss/160625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoshi/services/trackbacks/160625.html</trackback:ping><description><![CDATA[<p>所谓间接实现零配置，是指只要做些初始化的配置之后，在以后的开发中基本上不用再对每个Action做配置 </p>
<p>struts.xml这样配置 <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"*/*"</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">"{2}"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"workbench.web.actions.{1}Action"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"custom"</span><span class="tag">&gt;</span><span>/view/{1}/${target}.jsp</span><span class="tag">&lt;/</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
<script>render_code();</script>
<p>&nbsp;</p>
<p>struts.properties的配置： <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>struts.objectFactory&nbsp;=&nbsp;spring &nbsp;&nbsp;</span></span></li>
    <li class=""><span>struts.objectFactory.spring.autoWire&nbsp;=&nbsp;name &nbsp;&nbsp;</span></li>
    <li class="alt"><span>struts.devMode&nbsp;=&nbsp;</span><span class="keyword">true</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>struts.enable.DynamicMethodInvocation&nbsp;=&nbsp;</span><span class="keyword">false</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>struts.action.extension&nbsp;=&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>struts.enable.SlashesInActionNames&nbsp;=&nbsp;</span><span class="keyword">true</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
<script>render_code();</script>
<p>&nbsp;</p>
<p>然后写一个BaseAction: <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BaseAction&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CUSTOM&nbsp;=&nbsp;</span><span class="string">"custom"</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;target; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;Log&nbsp;logger&nbsp;=&nbsp;LogFactory.getLog(getClass()); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getTarget()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;target; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setTarget(String&nbsp;target)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.target&nbsp;=&nbsp;target; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;String&nbsp;render(String&nbsp;_target){ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTarget(_target); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;CUSTOM; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<script>render_code();</script>
<p>&nbsp;</p>
<p>这样其余的Action都可以直接继承BaseAction，不用再做任何配置 <br />
通过return render(target)转发到指定的jsp页面,从而间接实现零配置 </p>
<p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;UserAction&nbsp;</span><span class="keyword">extends</span><span>&nbsp;BaseAction{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;UserService&nbsp;userService; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUserService(UserService&nbsp;userService)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.userService&nbsp;=&nbsp;userService; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User&nbsp;getUser()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;user; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUser(User&nbsp;user)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.user&nbsp;=&nbsp;user; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;test(){ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;userService.get(1l); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;render(</span><span class="string">"test"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/xiaoshi/aggbug/160625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoshi/" target="_blank">小石~~</a> 2007-11-14 20:50 <a href="http://www.blogjava.net/xiaoshi/articles/160625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>