- 浏览: 1064844 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
23.4 使用拦截器
和Struts2一样,Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。
【示例23-9】HandlerInterceptor接口的代码如下:
下面对代码中的三个方法进行解释。
preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进 行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。
afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
下面通过一个例子来说明如何使用Spring MVC框架的拦截器。
【示例23-10】要求编写一个拦截器,拦截所有不在工作时间的请求,把这些请求转发到一个特定的静态页面,而不对它们的请求进行处理。
首先编写TimeInterceptor.Java,代码如下:
可以看出,上面的代码重载了preHandle()方法,该方法在业务处理器处理请求之前被调用。在该方法中,首先获得当前的时间,判断其是否在 openingTime和closingTime之间,如果在,返回true,这样才会调用业务控制器去处理该请求;否则直接转向一个静态页面,返回 false,这样该请求就不会被处理。
下面是在dispatcherServlet-servlet.xml中对拦截器进行的配置,代码如下:
可以看出,上面代码用bean标签去定义TimeInterceptor,令其id为officeHoursInterceptor,并给它的3个 属性赋值。在urlMapping中通过<property name="interceptors">去指定officeHoursInterceptor为一个拦截器,读者可以在<list> 和</list>之间定义多个拦截器。
outsideOfficeHours.html的代码很简单,只是输出一句提示语。
运行程序,在浏览器中随便访问一个页面,如果请求的时间在9点~18点之间,则该请求可以被处理;否则,返回一句提示语,如图23-5所示。
(点击查看大图)图23-5 请求被拦截效果图
说 明:在第22章中介绍过控制反转是Spring框架的核心思想,即用一个接口去定义一些操作,在接口的实现类中去重写这些操作,然后在Spring的配置 文件中去把该接口的实现类注入到应有框架中,这样就可以通过调用接口去调用接口的实现类。本节讲的拦截器就体现了这种思想,即实现 HandlerInterceptorAdapter接口,重写preHandle()方法并在配置文件中实现TimeInterceptor的注入。这 样当框架调用HandlerInterceptorAdapter时,就可以调用到TimeInterceptor类的preHandle()方法。
和Struts2一样,Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。
【示例23-9】HandlerInterceptor接口的代码如下:
package org.springframework.web.servlet; import Javax.servlet.http.HttpServletRequest; import Javax.servlet.http.HttpServletResponse; public interface HandlerInterceptor { // preHandle()方法在业务处理器处理请求之前被调用 boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; // postHandle()方法在业务处理器处理请求之后被调用 void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; // afterCompletion()方法在DispatcherServlet完全处理完请求后被调用 void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; }
下面对代码中的三个方法进行解释。
preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进 行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。
afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
下面通过一个例子来说明如何使用Spring MVC框架的拦截器。
【示例23-10】要求编写一个拦截器,拦截所有不在工作时间的请求,把这些请求转发到一个特定的静态页面,而不对它们的请求进行处理。
首先编写TimeInterceptor.Java,代码如下:
package com.examp.ch23; import Java.util.Calendar; import Javax.servlet.http.HttpServletRequest; import Javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class TimeInterceptor extends HandlerInterceptorAdapter { //继承HandlerInterceptorAdapter类 private int openingTime; //openingTime 属性指定上班时间 private int closingTime; //closingTime属性指定下班时间 private String outsideOfficeHoursPage; //outsideOfficeHoursPage属性指定错误 提示页面的URL public void setOpeningTime(int openingTime) { this.openingTime = openingTime; } public void setClosingTime(int closingTime) { this.closingTime = closingTime; } public void setOutsideOfficeHoursPage(String outsideOfficeHoursPage) { this.outsideOfficeHoursPage = outsideOfficeHoursPage; } //重写 preHandle()方法,在业务处理器处理请求之前对该请求进行拦截处理 public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); //获取当前时间 if (openingTime<=hour && hour<closingTime) { //判断当前是否处于工作 时间段内 return true; } else { response.sendRedirect(outsideOfficeHoursPage); //返回提示页面 return false; } } }
可以看出,上面的代码重载了preHandle()方法,该方法在业务处理器处理请求之前被调用。在该方法中,首先获得当前的时间,判断其是否在 openingTime和closingTime之间,如果在,返回true,这样才会调用业务控制器去处理该请求;否则直接转向一个静态页面,返回 false,这样该请求就不会被处理。
下面是在dispatcherServlet-servlet.xml中对拦截器进行的配置,代码如下:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.Simple- UrlHandlerMapping"> <property name="mappings"> <props> <prop key="helloWorld.do">helloWorldAction</prop> <prop key="login.do">loginController</prop> </props> </property> <property name="interceptors"> <!--在interceptors 属性中定义所有的拦截器--> <list> <ref bean="officeHoursInterceptor"/> <!--引用officeHoursInterceptor 拦截器--> </list> </property> </bean> <!--定义TimeInterceptor拦截器,id为officeHoursInterceptor --> <bean id="officeHoursInterceptor" class="com.examp.ch23.TimeInterceptor"> <!--openingTime 属性指定上班时间--> <property name="openingTime"><value>9</value></property> <!--closingTime属性指定下班时间--> <property name="closingTime"><value>18</value></property> <!--outsideOfficeHoursPage属性指定提示页面的URL--> <property name="outsideOfficeHoursPage"><value>http://localhost:8080/ ch23/outsideOfficeHours.html</value></property> </bean>
可以看出,上面代码用bean标签去定义TimeInterceptor,令其id为officeHoursInterceptor,并给它的3个 属性赋值。在urlMapping中通过<property name="interceptors">去指定officeHoursInterceptor为一个拦截器,读者可以在<list> 和</list>之间定义多个拦截器。
outsideOfficeHours.html的代码很简单,只是输出一句提示语。
运行程序,在浏览器中随便访问一个页面,如果请求的时间在9点~18点之间,则该请求可以被处理;否则,返回一句提示语,如图23-5所示。
(点击查看大图)图23-5 请求被拦截效果图
说 明:在第22章中介绍过控制反转是Spring框架的核心思想,即用一个接口去定义一些操作,在接口的实现类中去重写这些操作,然后在Spring的配置 文件中去把该接口的实现类注入到应有框架中,这样就可以通过调用接口去调用接口的实现类。本节讲的拦截器就体现了这种思想,即实现 HandlerInterceptorAdapter接口,重写preHandle()方法并在配置文件中实现TimeInterceptor的注入。这 样当框架调用HandlerInterceptorAdapter时,就可以调用到TimeInterceptor类的preHandle()方法。
发表评论
-
Spring MVC 3.1新特性 生产者、消费者请求限定
2015-06-15 07:42 715参考地址: http://www.iteye.com/to ... -
CSRF TOKEN
2015-02-14 18:02 1146package com.uncle5.pubrub.web.c ... -
Spring MVC Controller单例陷阱
2014-06-27 08:51 682Spring MVC Controller默认是 ... -
[Spring] Hessian权限认证,加密前面
2014-03-06 09:52 1617Hessian的一些基本简介已经在上一节已经全部介绍了,上一节 ... -
FieldRetrievingFactoryBean 和 MethodInvokingFactoryBean
2014-01-09 18:36 1021spring提供了filed的值注入和method的返回值注入 ... -
Spring中ApplicationContext的事件机制(二 内定事件)
2014-01-09 11:08 12343在Spring中已经定义了五个标准事件,分别介绍如下: 1) ... -
当spring 容器初始化完成后执行某个方法 .
2014-01-08 17:40 1444在某些应用中,我们希望,当spring 容器将所有的bea ... -
spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
2013-09-12 10:43 1216spring mvc处理方法支持如下的返回方式:ModelA ... -
JSR-303
2013-09-12 00:22 934JSR-303 是JAVA EE 6 中的一项子规范,叫做Be ... -
EHCACHE分布式缓存
2013-09-06 17:26 1314从1.2版本开始,Ehcache可 ... -
springMVC+freemarker整合
2013-09-06 16:39 1436springMVC整合大家都比较熟悉了吧主要有以下几个步骤: ... -
Spring MVC 学习笔记 Viewresol和View
2013-09-06 15:34 931Spring MVC使用ViewResolver来根据cont ... -
Spring的PropertyPlaceholderConfigurer应用
2013-09-06 15:04 3224Spring 利用PropertyPlaceholderCon ... -
SpringSecurity3_Logout
2013-08-22 16:07 2584Logout¶•退出登录的链接 <a href=&quo ... -
spring的default-lazy-init参数 .
2013-04-23 20:08 979spring在启动的时候,会默认加载会默认加载整个对象实例图, ... -
Spring MVC 如何防止XSS、SQL注入攻击
2013-04-16 15:40 1684在Web项目中,通常需要处理XSS,SQL注入攻击,解决这个问 ... -
Spring JMS
2013-01-08 10:48 986http://blog.csdn.net/shiqiang12 ... -
给spring jdbctemplate加上一层“绮丽外衣”-动态SQL&&SQL语句以文件存放
2013-01-07 16:00 3309给spring jdbctemplate加上一层“华丽外衣”- ... -
使用Spring的NamedParameterJdbcTemplate完成DAO操作 .
2013-01-07 14:54 1186NamedParameterJdbcTemplate内部包含了 ... -
cron表达式(quartz中时间表达式)
2012-12-20 15:54 1007http://sosuny.iteye.com/blog/46 ...
相关推荐
此外,为了使项目更具可扩展性,我们还可以引入其他Spring-MVC特性,如拦截器(Interceptor)来处理全局请求,AOP(面向切面编程)来实现跨切面的逻辑,以及数据绑定和验证机制。 总的来说,Spring-MVC提供了强大的...
项目名称“spring-mvc-showcase”暗示这是一个示例或演示项目,可能会包含各种Spring MVC的功能示例,如RESTful API、表单处理、异常处理、国际化、视图解析、拦截器、模型绑定等。开发者可以通过这个项目学习和理解...
通过理解并实践Spring MVC的拦截器,你可以有效地扩展和优化应用程序的功能,同时保持代码的整洁和模块化。这不仅有助于提高开发效率,也能为系统的维护和升级带来便利。所以,学习和掌握Spring MVC的拦截器对于任何...
在实际开发中,Spring MVC提供了许多高级特性,如数据绑定、模型验证、本地化、主题支持、拦截器等,使得构建复杂的Web应用程序变得更加容易和灵活。通过深入学习和实践,你可以逐步掌握Spring MVC的更多功能,提升...
2. **配置Spring MVC**:在`web.xml`中配置`DispatcherServlet`,并添加Spring MVC的配置文件,如`spring-mvc.xml`,在这里定义视图解析器、拦截器、bean等。 3. **编写Controller**:创建一个控制器类,使用`@...
Spring MVC 是一个强大的Java web开发框架,用于构建高效、可维护...通过深入学习和实践,你可以进一步了解Spring MVC的高级特性,如拦截器、模型绑定、数据验证等,从而更好地利用Spring MVC构建复杂的企业级Web应用。
- **拦截器与AOP**:探索Spring的拦截器机制以及面向切面编程(AOP)在Spring MVC中的应用。 - **异常处理**:如何优雅地处理应用运行时可能出现的异常。 - **国际化与本地化**:支持多语言环境的实现方法。 - **...
5. **拦截器**:允许在请求处理前后插入自定义逻辑,如权限检查、日志记录等。 二、Portlet框架 Portlet框架是为portlet容器(如Liferay、WebSphere Portal)提供的一套标准,它定义了portlet的生命周期、渲染机制...
在 Spring 中,可以使用 Advisor 或拦截器(Interceptor)来实现方面。 - **连接点(Joinpoint)**:连接点是程序执行中的一个特定点,如方法的调用。Spring 支持在这些点插入 AOP 代码。 - **通知(Advice)**:...
拦截器在Spring和其他基于拦截的AOP框架中广泛使用,它们在处理如事务管理、日志记录等跨切关注点时发挥着重要作用。 总之,Spring-MVC中的AOP提供了强大的工具,用于解耦业务逻辑与系统服务,提高代码的可复用性...
在Spring MVC框架中,拦截器是基于AOP(面向切面编程)的概念实现的。我们可以通过实现`HandlerInterceptor`接口或继承`AbstractHandlerMethodInterceptor`抽象类来自定义拦截器。最常见的方法是实现`...
下面是一个简单的日志拦截器示例: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.controller.*.*(..))") public void logBefore(JoinPoint joinPoint) { String...
通过学习这个“spring MVC(新增拦截器demo)”项目,你不仅能够理解Spring MVC拦截器的基本使用,还能掌握如何将拦截器应用于实际的需求场景。拦截器的灵活运用可以大大提高代码的复用性和维护性,使得Spring MVC应用...
在Spring中,方面可以通过Advisor或拦截器来实现。 2. **连接点(Joinpoint)**:程序执行流程中的特定点,如方法的调用或异常的抛出。Spring允许在这些点插入通知。 3. **通知(Advice)**:在特定连接点上执行的...
Spring MVC拦截器实现和用户登陆例子 Spring MVC框架中,拦截器是一种非常重要的机制,能够在请求处理的不同阶段进行拦截和处理。下面,我们将详细介绍Spring MVC拦截器的实现和用户登陆例子。 一、拦截器的实现 ...
在Spring Boot应用中,登录拦截器是一个至关重要的组件,它用于保护特定的Web资源,确保只有经过身份验证的用户才能访问。Spring Boot结合了Spring MVC框架,提供了方便的方式来实现这样的拦截器。本篇文章将深入...
标题中的"wa-spring1-SpringProject.zip_spring mvc 例子"表明这是一个关于Spring MVC框架的实际应用示例项目。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,它提供了模型-视图-控制器(MVC)架构...
在这个简单的例子中,我们将探讨如何在 Spring 中配置和使用拦截器。 首先,我们需要创建一个自定义的拦截器类,该类需要实现 `HandlerInterceptor` 接口。这个接口提供了三个方法:`preHandle()`、`postHandle()` ...
下面将详细解释Spring MVC拦截器的工作原理、配置和实际应用。 1. **工作原理**: - 拦截器是基于AOP(面向切面编程)思想实现的,它通过预处理器和后处理器模式,对HTTP请求进行拦截。 - 当一个请求到达Spring ...