- 浏览: 948554 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
使用拦截器
和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()方法。
发表评论
-
各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包
2013-07-16 13:09 2826在开发基于数据库的应 ... -
springmvc rest框架搭建中遇到的问题-xml转换错误
2013-01-18 11:26 2004.bean to xml显示的xml不是我往Model ... -
spring3.5 mvc json view bug MappingJacksonJsonView
2013-01-18 11:27 1541在返回单一model的json的时候。 MappingJa ... -
Spring MVC的多视图解析器配置及与Freemarker的集成
2013-01-18 11:27 3683http://my249645546.iteye.com/ ... -
xStream完美转换XML、JSON
2013-01-17 16:02 1256http://www.cnblogs.com/hoojo/a ... -
SpringMVC 中整合JSON、XML视图一
2013-01-17 16:01 1371http://www.cnblogs.com/hoojo/a ... -
Spring MVC 之 视图解析器ResourceBundleViewResolver
2013-01-17 10:45 1277http://blog.csdn.net/q34982 ... -
spring3mvc自定义多视图解析器
2013-01-17 10:41 1663使用视图名后缀来判断选择相应的视图解析器自定义一个视图解析器 ... -
spring3.0.6 使用context:property-placeholder载不进属性
2012-12-15 14:43 1378我用spring3.0.6+mybatis3.0.6+myba ... -
Spring定时任务的多种使用方法总结
2012-10-18 09:48 1730这里使用的是Spring2.5,需要的jar包:spring. ... -
Spring3.0 + 自定义注解实现操作日志记录功能
2012-03-12 09:34 1491最近项目组长分配给我一个任务,让我完成一个操作日志的管理功能。 ... -
在 Spring Bean 內取得 HttpServletRequest
2011-10-11 16:13 1228使用 Java 去開發 Web 應用程式時,大部份時候都會使用 ... -
spring3+freemark自定义标签
2011-10-09 18:27 2752<bean id="viewResolver& ... -
OpenSessionInViewFilter作用及配置
2011-06-15 10:31 1335摘自:http://www.yybean.com/opense ... -
spring httpinvoke 例子
2011-04-21 17:15 1205http://ajava.org/course/open/11 ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2011-04-02 23:38 2342本文将构建一个普通工程来说明spring注解缓存的使用方式,关 ... -
使用 ActiveMQ 示例
2011-03-30 17:38 1366企业中各项目中相互协作的时候可能用得到消息通知机制。比如有 ... -
使用Spring HTTP invoker进行远程调用
2011-03-30 10:34 1695使用Spring HTTP invoker进行远程调用Spri ... -
Java Spring2.5 Remote Invoke HTTP Invoker远程调用
2011-03-30 08:42 1972近日,一个项目涉及到系统间接口调用,考虑到系统间用的都是j ... -
Spring AOP不能拦截同一个对象内方法的嵌套调用
2011-03-30 08:27 2294在开发基于 Spring 的应用的过程中碰到了一个 ...
相关推荐
标题中的"wa-spring1-SpringProject.zip_spring mvc 例子"表明这是一个关于Spring MVC框架的实际应用示例项目。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,它提供了模型-视图-控制器(MVC)架构...
这个“Spring MVC例子程序”是一个精心整理的示例,旨在帮助开发者了解并掌握如何在实际项目中使用 Spring MVC 进行开发。 在 Spring MVC 中,核心概念包括控制器(Controller)、模型(Model)、视图(View)以及...
spring mvc 例子,spring mvc 例子,spring mvc 例子。
在这个"一个简单的Spring MVC 例子"中,我们可以通过分析标题和描述,理解这是一个基础的实践项目,虽然功能简单,但它包含了Spring MVC框架的核心组件和基本流程。 首先,Spring MVC是Spring框架的一部分,它提供...
标题 "自己做的Spring MVC例子" 暗示我们将探讨一个基于Spring MVC框架的实际项目或教程。Spring MVC是Spring框架的一部分,用于构建Web应用程序,它提供了一个模型-视图-控制器架构,帮助开发者处理HTTP请求、数据...
首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它在Spring框架的基础上,为开发者提供了处理HTTP请求、视图渲染和数据绑定的能力。本示例Demo是基于Spring MVC实现的一个...
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、模块化且松散耦合的Web应用程序。在Spring MVC中,控制器是处理用户请求并协调应用程序逻辑的关键组件。本示例将深入探讨`SimpleFormController`和`...
本实例“spring_aop1.rar”是一个关于Spring AOP入门的教程,旨在帮助开发者更好地理解和运用Spring的AOP特性,同时也涉及到Spring MVC的相关知识。下面我们将深入探讨这两个关键概念。 首先,让我们了解一下Spring...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。...通过学习和实践这样的例子,你可以逐步掌握Spring MVC 4的基本用法和最佳实践。
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用来处理 Web 请求和响应。这个压缩包看起来是一个 Spring MVC 示例项目的存储空间,包含了一些开发环境中常见的文件和目录。 1...
这个例子将深入探讨 Spring MVC 的核心概念和使用方法。 在 Spring MVC 中,模型(Model)负责存储应用的数据,视图(View)用于呈现这些数据,控制器(Controller)处理用户请求并协调模型和视图。这种分层架构...
在“spring MVC myeclipse例子”中,我们通常会经历以下几个关键步骤来创建一个简单的Spring MVC项目: 1. **项目初始化**:首先,我们需要在MyEclipse中创建一个新的Dynamic Web Project,然后通过Spring工具集或...
Spring MVC 是一个强大的Java web...通过这个简单的例子,初学者可以全面地了解Spring MVC的工作原理和流程,为更深入的Web开发打下基础。实践中遇到的问题和解决方法也会加深对Spring MVC的理解,有助于提升开发技能。
在IT行业中,Spring MVC 和 MyBatis 是两个非常重要的框架,它们分别负责Web应用程序的控制器层和数据访问层。Spring MVC 提供了模型-视图-控制器架构模式的实现,而MyBatis则是一个轻量级的SQL映射框架,用于简化...
在这个“最全的Spring MVC注解例子”中,我们将深入探讨Spring MVC的核心注解,以及如何实现异步请求处理和错误管理。 1. **Spring MVC核心注解** - `@Controller`:标记一个类为处理HTTP请求的控制器。这是Spring...