スプリングのAOPブロックはStruts動作に適用されます.
Struts動作をSpringフレームに委託してStrutsとSpringを統合することで、主な利点は、SpringのAOPブロックをStruts動作に適用することができます.SpringスクリーンをStruts動作に適用することで、懸念点を最小の価格で横に切ることができます.
ここでは自分のスクリーンショットを作成してStrutsに適用する動作を紹介します.ブロックを使うためには、次の仕事が必要です.
1,ログブロックを作成します.
2,ログブロックを登録する
Springのプロファイルに以下のコードを追加します.
この例では、Struts動作管理をSpringに委託し、
struts-config.xml
UserActionのコードは以下の通りです.
ページの要求のURLがhttp://localhost:8080/onlinexam/register.do?method=registerを選択すると、UserActionのregisterの方法が実行されます.register方法が実行される前に、定義されたスクリーンセーバがStrutsの動作にブロックされ、before方法が実行される.
具体的な出力結果は以下の通りです.
このようにして、簡単なログ記録ブロックが実現されます.
弟はSpringです Struts初心者の方ですので、以上に漏れや間違いがありましたら、よろしくお願いします.
ここでは自分のスクリーンショットを作成してStrutsに適用する動作を紹介します.ブロックを使うためには、次の仕事が必要です.
1,ログブロックを作成します.
/**
*
*/
package cn.dip.struts.filter;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class LoggingInterceptor implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println("Logging before!");
System.out.println("method.getName():"+method.getName());
System.out.println("method.toString():"+method.toString());
System.out.println("args.length:"+args.length);
System.out.println("args[0].getClass().getName():"+args[0].getClass().getName());
System.out.println("target.getClass().getName():"+target.getClass().getName());
}
}
2,ログブロックを登録する
Springのプロファイルに以下のコードを追加します.
<!-- Struts -->
<bean name="/register" class="cn.dip.struts.action.UserAction" scope="prototype">
<property name="userManager" ref="userManager"/>
</bean>
<bean name="/admin" class="cn.dip.struts.action.AdminAction" scope="prototype">
<property name="userManager" ref="userManager"/>
</bean>
<!-- (1) -->
<bean name="logger"
class="cn.dip.struts.filter.LoggingInterceptor"/>
<!-- bean , 。 , 。 -->
<bean name="loggingAutoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<!-- Struts bean。 Struts , "beanNames" <value> 。 -->
<list>
<value>/register</value>
<value>/admin</value>
</list>
</property>
<property name="interceptorNames">
<!-- , (1) bean 。 "beanNames"。 -->
<list>
<value>logger</value>
</list>
</property>
</bean>
ここでログブロックの準備はもうできました.次にStruts動作を実行したら、どのような結果が得られますか?この例では、Struts動作管理をSpringに委託し、
struts-config
動作マップにエージェントを登録して実装します.エージェントは、Spring環境におけるStruts動作の検索を担当する.Springの制御の下で動作するので、動作のJavaBean属性を充填し、SpringのAOPブロッカーなどの特性を適用することが可能となります.struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans >
<form-bean name="userForm" type="cn.dip.struts.form.UserForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="userForm"
input="register.jsp"
name="userForm"
path="/register"
scope="request"
parameter="method"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="error" path="/register.jsp" />
<forward name="success" path="/success.jsp" />
</action>
</action-mappings>
<message-resources parameter="cn.dip.struts.ApplicationResources" />
</struts-config>
UserActionのコードは以下の通りです.
package cn.dip.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import cn.dip.model.User;
import cn.dip.service.impl.UserManager;
import cn.dip.struts.form.UserForm;
import cn.dip.utils.DateUtil;
public class UserAction extends DispatchAction {
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
private UserManager userManager;
public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
System.out.println("................");
UserForm userForm = (UserForm) form;
User user = new User();
try {
org.apache.commons.beanutils.BeanUtils.copyProperties(user, userForm);
} catch (Exception e) {
e.printStackTrace();
}
userManager.save(user);
return mapping.findForward("success");
}
/**
* @param userManager the userManager to set
*/
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
ページの要求のURLがhttp://localhost:8080/onlinexam/register.do?method=registerを選択すると、UserActionのregisterの方法が実行されます.register方法が実行される前に、定義されたスクリーンセーバがStrutsの動作にブロックされ、before方法が実行される.
具体的な出力結果は以下の通りです.
Logging before!
method.getName():execute
method.toString():public org.apache.struts.action.ActionForward org.apache.struts.actions.DispatchAction.execute(org.apache.struts.action.ActionMapping,org.apache.struts.action.ActionForm,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception
args.length:4
args[0].getClass().getName():org.apache.struts.action.ActionMapping
target.getClass().getName():cn.dip.struts.action.UserAction
................
このようにして、簡単なログ記録ブロックが実現されます.
弟はSpringです Struts初心者の方ですので、以上に漏れや間違いがありましたら、よろしくお願いします.