`
softkid
  • 浏览: 101673 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

spring的AOP拦截器应用于Struts动作

阅读更多

       通过将 Struts 动作委托给 Spring 框架而整合 Struts 和 Spring 的一个主要的优点是:您可以将 Spring 的 AOP 拦截器应用于您的 Struts 动作。通过将 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的初学者,所以以上有什么遗漏和纰漏之处,还请大家多多指教。

 

 

 

 

 

 

8
0
分享到:
评论
5 楼 softkid 2010-05-31  
frenchleaf 写道
楼主 能不能把完整代码分享一下啊,没成功

很不好意思啊,源码找不到了。
4 楼 frenchleaf 2010-05-27  
楼主 能不能把完整代码分享一下啊,没成功
3 楼 gavinxixi 2009-08-10  
楼主~我想看看你的web.xml配置。
我是用spring作为struts的插件方式整合的,不知道这样能不能像楼主那样拦截action~~
2 楼 softkid 2008-12-22  
xyn0563 写道

楼主你好,我完全按照你所说的来配置,但是就是拦截不到action,请问有还有其他什么需要注意的地方么?

我所知道的也就这么多了,按理来说应该没有问题,也许是版本问题吧。
我的struts是1.3.8,Spring是2.5。
1 楼 xyn0563 2008-12-21  
楼主你好,我完全按照你所说的来配置,但是就是拦截不到action,请问有还有其他什么需要注意的地方么?

相关推荐

    struts2整合spring实现拦截器

    在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...

    struts2+spring4+mybatis3,登录jquery ajax,struts拦截器,springAOP的例子

    本项目示例涵盖了这些框架的整合使用,以及jQuery AJAX登录、Struts拦截器和Spring AOP(面向切面编程)的应用。 1. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了...

    Spring-Struts-IBatis-AOP-Transaction

    它继承了 Struts 1 的优点,并引入了许多改进,如拦截器机制,使开发者可以更加灵活地处理请求和响应。Struts 2 与 Spring 的整合提供了更强大的功能,例如利用 Spring 的 DI 来管理 Struts 2 的动作类,以及事务...

    ssh+aop+log4j+日志拦截器+注解

    标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...

    struts拦截器jar 包

    总结来说,"struts拦截器jar包"是指专门为Struts 1.x框架提供拦截器功能的第三方库,`saif-0.1.jar`和`saif-spring.jar`可能是用于实现特定拦截逻辑或整合Spring框架的扩展库。了解并正确使用这些jar包能够有效地...

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    struts2+hirbenate+SpringAOP

    - **工作原理**:Struts2基于拦截器(Interceptor)模式,通过配置Action和结果来处理请求并展示相应的视图。 - **Action**:它是业务逻辑的载体,负责接收请求,执行业务操作,并返回结果。 - **结果映射**:...

    拦截器+ognl+aop

    拦截器是一种设计模式,常用于框架中,如Spring MVC或Struts2,它允许在业务逻辑执行前后插入自定义的行为。拦截器可以理解为一种过滤机制,它可以在请求到达目标方法之前或之后执行特定的操作,例如日志记录、性能...

    aven2+spring(ioc aop)+struts+mybatis

    此外,Spring可以提供全局的事务管理,与Struts2的拦截器协同工作,以确保数据的一致性。 **Struts2** Struts2 是基于Model-View-Controller设计模式的Web应用框架,它的核心是Action类和ActionForm。Action负责...

    使用Spring更好地处理Struts动作

    Spring AOP 允许您使用拦截器 在一个或多个执行点上拦截应用程序逻辑。加强应用程序在拦截器中的日志记录逻辑会产生一个更可读的、实用的代码基础,所以拦截器广泛用于日志记录。您很快就会看到,为了处理横切关注点...

    struts1拦截器实现所需saif.jar包

    总的来说,`struts1拦截器实现所需saif.jar包`提供了Struts1与Spring框架整合的能力,特别是利用Spring的AOP特性来实现拦截器功能。这使得开发者能够在Struts1项目中享受到Spring带来的便利,同时通过拦截器优化和...

    spring 配置aop时需要的jar包

    这个库包括了如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`等接口,它们定义了拦截器和通知(advice)的基本行为。在Spring AOP中,你需要实现这些接口来创建自定义的切面...

    struts2拦截器实现权限控制

    在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外的功能,如日志记录、事务管理、权限验证等。对于权限控制,拦截器可以在请求到达Action之前检查用户的登录状态...

    org.springframework.web.struts-3.1.0.M2.jar

    3. **AOP(面向切面编程)**:Spring的AOP支持可以帮助开发者定义拦截器,实现在不修改原有代码的情况下,对特定操作进行增强,如日志记录、事务管理等。 4. **模型驱动**:Spring的ModelAndView对象可以用来封装...

    Struts1 拦截器(SAIF)的使用

    拦截器在Struts1中扮演着重要角色,它允许开发者在动作执行前后插入自定义的逻辑,比如日志记录、权限验证、事务管理等。SAIF插件是Struts1中一个特定的拦截器实现,用于增强框架的功能。 **1. Struts1 拦截器原理*...

    struts2+spring集成bug——使用AOP时可能遇到的问题分析

    同时,Struts2的拦截器链可以通过Spring的AOP机制进行扩展,以实现更灵活的功能。 然而,当在AOP中遇到问题时,可能的原因有以下几点: 1. **配置错误**:确保`struts.xml`和`applicationContext.xml`中的配置正确...

    Spring+proxool+hibernate+struts2+aop_Jar包

    Struts2通过拦截器机制实现了灵活的控制流程,支持插件扩展,并与各种视图技术如JSP、FreeMarker等良好集成。此外,Struts2还提供了强大的数据验证和国际化等功能。 5. **SSH2整合**:SSH2是Spring、Struts2和...

    spring &struts整合

    - 集成拦截器:在 Struts2 的配置中添加 Spring AOP 拦截器,或者自定义拦截器实现特定功能。 - 测试:确保所有配置正确无误,进行功能测试。 通过整合 Spring 和 Struts2,我们可以利用 Spring 的强大功能来管理...

    spring security3,spring3.0,hibernate3.5,struts2

    接着,Spring Security可以与Struts2集成,通过拦截器来控制Action的访问。例如,可以使用Spring Security的FilterSecurityInterceptor来检查每个请求的权限。 在数据层,Hibernate可以用来管理用户账户信息,如...

    Spring,hibernate,struts jar 最新jar包

    Spring、Hibernate和Struts是Java开发中非常重要的三个框架,它们构成了经典的MVC(Model-View-Controller)架构,被广泛应用于企业级Web应用开发。这些框架极大地简化了开发过程,提高了开发效率,并且提供了良好的...

Global site tag (gtag.js) - Google Analytics