Spring MVC handler interceptors example--转载
2015-10-14 12:55
288 查看
原文地址:http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/
Spring MVC allow you to intercept web request through handler interceptors. The handler interceptor have to implement the HandlerInterceptor interface, which contains three methods :
preHandle() – Called before the handler execution, returns a boolean value, “true” : continue the handler execution chain; “false”, stop the execution chain and return it.
postHandle() – Called after the handler execution, allow manipulate the ModelAndView object before render it to view page.
afterCompletion() – Called after the complete request has finished. Seldom use, cant find any use case.
In this tutorial, you will create two handler interceptors to show the use of the HandlerInterceptor.
ExecuteTimeInterceptor – Intercept the web request, and log the controller execution time.
MaintenanceInterceptor – Intercept the web request, check if the current time is in between the maintenance time, if yes then redirect it to maintenance page.
Note
It’s recommended to extend the HandlerInterceptorAdapter for the convenient default implementations.
File : ExecuteTimeInterceptor.java
File : MaintenanceInterceptor.java
Spring MVC allow you to intercept web request through handler interceptors. The handler interceptor have to implement the HandlerInterceptor interface, which contains three methods :
preHandle() – Called before the handler execution, returns a boolean value, “true” : continue the handler execution chain; “false”, stop the execution chain and return it.
postHandle() – Called after the handler execution, allow manipulate the ModelAndView object before render it to view page.
afterCompletion() – Called after the complete request has finished. Seldom use, cant find any use case.
In this tutorial, you will create two handler interceptors to show the use of the HandlerInterceptor.
ExecuteTimeInterceptor – Intercept the web request, and log the controller execution time.
MaintenanceInterceptor – Intercept the web request, check if the current time is in between the maintenance time, if yes then redirect it to maintenance page.
Note
It’s recommended to extend the HandlerInterceptorAdapter for the convenient default implementations.
1. ExecuteTimeInterceptor
Intercept the before and after controller execution, log the start and end of the execution time, save it into the existing intercepted controller’s modelAndView for later display.File : ExecuteTimeInterceptor.java
package com.mkyong.common.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class ExecuteTimeInterceptor extends HandlerInterceptorAdapter{ private static final Logger logger = Logger.getLogger(ExecuteTimeInterceptor.class); //before the actual handler will be executed public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { long startTime = System.currentTimeMillis(); request.setAttribute("startTime", startTime); return true; } //after the handler is executed public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long startTime = (Long)request.getAttribute("startTime"); long endTime = System.currentTimeMillis(); long executeTime = endTime - startTime; //modified the exisitng modelAndView modelAndView.addObject("executeTime",executeTime); //log it if(logger.isDebugEnabled()){ logger.debug("[" + handler + "] executeTime : " + executeTime + "ms"); } } }
2. MaintenanceInterceptor
Intercept before the controller execution, check if the current time is in between the maintenance time, if yes then redirect it to maintenance page; else continue the execution chain.File : MaintenanceInterceptor.java
package com.mkyong.common.interceptor; import java.util.Calendar; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class MaintenanceInterceptor extends HandlerInterceptorAdapter{ private int maintenanceStartTime; private int maintenanceEndTime; private String maintenanceMapping; public void setMaintenanceMapping(String maintenanceMapping) { this.maintenanceMapping = maintenanceMapping; } public void setMaintenanceStartTime(int maintenanceStartTime) { this.maintenanceStartTime = maintenanceStartTime; } public void setMaintenanceEndTime(int maintenanceEndTime) { this.maintenanceEndTime = maintenanceEndTime; } //before the actual handler will be executed public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Calendar cal = Calendar.getInstance(); int hour = cal.get(cal.HOUR_OF_DAY); if (hour >= maintenanceStartTime && hour <= maintenanceEndTime) { //maintenance time, send to maintenance page response.sendRedirect(maintenanceMapping); return false; } else { return true; } } }
3. Enable the handler interceptor
To enable it, put your handler interceptor class in the handler mapping "interceptors" property.<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/welcome.htm">welcomeController</prop> </props> </property> <property name="interceptors"> <list> <ref bean="maintenanceInterceptor" /> <ref bean="executeTimeInterceptor" /> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"> <property name="interceptors"> <list> <ref bean="executeTimeInterceptor" /> </list> </property> </bean> <bean id="welcomeController" class="com.mkyong.common.controller.WelcomeController" /> <bean class="com.mkyong.common.controller.MaintenanceController" /> <bean id="executeTimeInterceptor" class="com.mkyong.common.interceptor.ExecuteTimeInterceptor" /> <bean id="maintenanceInterceptor" class="com.mkyong.common.interceptor.MaintenanceInterceptor"> <property name="maintenanceStartTime" value="23" /> <property name="maintenanceEndTime" value="24" /> <property name="maintenanceMapping" value="/SpringMVC/maintenance.htm" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
相关文章推荐
- myEclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- Java Cookbook-Date and Times
- java.util.ConcurrentModificationException的异常的出现与解决
- Java Mail:Session、Message详解
- [成也Java,败也Java]之[败也Java]
- Spring-----1、Spring一个简短的引论
- java使用jxl导出excel字符串类型转化成数值型
- java使用jxl导出excel字符串类型转化成数值型
- java仿qq登陆界面
- Java基础知识强化之IO流笔记69:Properties练习之 判断文件中是否有指定的键,如果有就修改值的案例
- 【springmvc+mybatis项目实战】杰信商贸-35.业务出口报运WebService2
- JavaScrip 事件
- web.xml中的contextConfigLocation在spring中的作用
- Java基础知识强化之IO流笔记68:Properties和IO流集合使用
- java中对象的初始化问题
- java使用spring实现发送mail的方法
- 仿安居客房贷计算器
- spring TaskExecutor
- java中Map、List与Set的区别
- Thread.setDaemon详解