以Struts2+Spring为例,要求必须在登录之后才能实现某一链接。如果未登录则抛出异常,跳转到异常页面。
假设链接为:http://localhost:8080/aop/test.action
Struts2的配置文件struts.xml文件:
- <action name="test" class="testAction" method="test">
-
<result name="success">/succ.jsp</result>
- </action>
<action name="test" class="testAction" method="test">
<result name="success">/succ.jsp</result>
</action>
Spring中的TestAction配置:
- <bean id="testAction" class="action.TestAction"/>
<bean id="testAction" class="action.TestAction"/>
TestAction类中的test方法只是实现简单的跳转,不需要考虑是否登录问题:
- public String test() throws Exception{
-
return "success";
- }
public String test() throws Exception{
return "success";
}
此时点击链接能够跳转到succ.jsp。
加入登录检查
在applicationContext.xml文件中:
- <?xml version="1.0" encoding="UTF-8"?>
-
-
<beans xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:aop="http://www.springframework.org/schema/aop"
-
xmlns:tx="http://www.springframework.org/schema/tx"
-
xsi:schemaLocation="http:
-
http:
-
http:
-
-
-
<bean id="testAction" class="test.TestAction"/>
-
- <!-- 定义通知 -->
-
<bean id="loginCheck" class="aop.LoginCheck" scope="prototype"/>
-
- <!--定义Advisor,即Spring中的切面(由通知和切入点组成)-->
-
<bean id="loginAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
-
<property name="advice" ref="loginCheck"></property>
-
<property name="mappedNames">
- <list>
- <!-- 需要被拦截的方法名,为了清除显示,
- 通过在struts.xml文件中设置method选项,来避免execute方法名 -->
- <value>test</value>
- </list>
- </property>
- </bean>
-
-
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
-
<property name="beanNames">
- <list>
- <!-- 需要被拦截的bean的名称 -->
- <value>testAction</value>
- </list>
- </property>
-
<property name="interceptorNames">
- <list>
- <value>loginAdvisor</value>
- </list>
- </property>
- </bean>
-
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="testAction" class="test.TestAction"/>
<!-- 定义通知 -->
<bean id="loginCheck" class="aop.LoginCheck" scope="prototype"/>
<!--定义Advisor,即Spring中的切面(由通知和切入点组成)-->
<bean id="loginAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="loginCheck"></property>
<property name="mappedNames">
<list>
<!-- 需要被拦截的方法名,为了清除显示,
通过在struts.xml文件中设置method选项,来避免execute方法名 -->
<value>test</value>
</list>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<!-- 需要被拦截的bean的名称 -->
<value>testAction</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>loginAdvisor</value>
</list>
</property>
</bean>
</beans>
LoginCheck类:
- public class LoginCheck implements MethodInterceptor{
-
-
public Object invoke(MethodInvocation invocation) throws Throwable {
- HttpSession session = ServletActionContext.getRequest().getSession();
-
Object obj = session.getAttribute("loginuser");
-
if(obj==null){
-
throw new NoLoginException("您还没有登录!!!");
- }
-
return invocation.proceed();
- }
-
- }
public class LoginCheck implements MethodInterceptor{
public Object invoke(MethodInvocation invocation) throws Throwable {
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("loginuser");
if(obj==null){
throw new NoLoginException("您还没有登录!!!");
}
return invocation.proceed();
}
}
为了在抛出NoLoginException异常时能够跳转到相关页面,可以在web.xml中设置:
- <error-page>
- <exception-type>exception.NoLoginException</exception-type>
- <location>/error.jsp</location>
- </error-page>
分享到:
相关推荐
在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...
以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...
**Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...
### Spring2-AOP入门实例教程知识点详解 #### 一、Spring框架概述 - **轻量级J2EE开发框架**:Spring是一个轻量级的Java应用框架,它为开发复杂的企业级应用提供了一种简化的方法。 - **发展历程**:自2002年发布...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
本教程将通过一个简单的Spring AOP入门案例,帮助初学者理解这一概念。 ### 一、AOP基础 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或数据。在Spring AOP中,切面可以由一个类定义...
本实例将带你深入理解并实践Spring AOP与@AspectJ的结合使用。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、...
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
以上就是 Spring 和 Struts 的基础概念及入门实例的创建流程。这两个框架各有优势,Spring 更注重模块化和灵活性,而 Struts 则更侧重于 MVC 结构的实现。在实际项目中,两者常被一起使用,形成所谓的“Spring + ...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP (Aspect Oriented Programming) 是一种面向切面编程的技术,在Spring框架中得到了良好的支持。通过这种方式,开发者可以更加灵活地组织代码,使得...
在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...
在这个入门实例中,我们将了解如何使用 Spring 操作数据库,特别是通过 JDBC 进行数据库操作。以下是该实例的详细步骤: 1. **创建数据表**: 在 MySQL 数据库中,我们首先创建一个名为 `myspringuser` 的数据表,...
**Spring AOP 入门篇:面向切面编程的注解与XML模式** 在软件开发中,Spring框架因其强大的功能和灵活性而广受欢迎,尤其是在企业级应用开发中。本教程将深入探讨Spring中的核心概念之一——面向切面编程(Aspect-...
** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...
本教程将深入探讨Spring AOP的概念、工作原理以及如何通过实例来理解和应用这一技术。 **一、Spring AOP基本概念** 1. **切面(Aspect)**:切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由...
在这个"spring入门实例"中,我们将探索如何利用Spring和Spring JDBC构建一个简单的登录模块。 首先,我们需要理解Spring框架的基础概念。Spring框架的核心在于IoC(Inversion of Control,控制反转)和DI...
在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...