`
v若离v
  • 浏览: 13529 次
社区版块
存档分类
最新评论

SpringMvc拦截器使用,监控每一个请求花费的时间

阅读更多

1:拦截器注册配置,spring-mvc.xml

   

<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="${adminPath}/**" />
			<mvc:exclude-mapping path="${adminPath}/"/>
			<mvc:exclude-mapping path="${adminPath}/login"/>
			<bean class="com.thinkgem.jeesite.modules.sys.interceptor.LogInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

 

2:Java代码,LogInterceptor.java

  

import java.text.SimpleDateFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.thinkgem.jeesite.common.service.BaseService;
import com.thinkgem.jeesite.common.utils.DateUtils;
import com.thinkgem.jeesite.modules.sys.utils.LogUtils;

/**
 * 日志拦截器
 * @author ThinkGem
 * @version 2014-8-19
 */
public class LogInterceptor extends BaseService implements HandlerInterceptor {

	private static final ThreadLocal<Long> startTimeThreadLocal =
			new NamedThreadLocal<Long>("ThreadLocal StartTime");
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
			Object handler) throws Exception {
		if (logger.isDebugEnabled()){
			long beginTime = System.currentTimeMillis();//1、开始时间  
	        startTimeThreadLocal.set(beginTime);		//线程绑定变量(该数据只有当前请求的线程可见)  
	        logger.debug("开始计时: {}  URI: {}", new SimpleDateFormat("hh:mm:ss.SSS")
	        	.format(beginTime), request.getRequestURI());
		}
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 
			ModelAndView modelAndView) throws Exception {
		if (modelAndView != null){
			logger.info("ViewName: " + modelAndView.getViewName());
		}
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
			Object handler, Exception ex) throws Exception {

		// 保存日志
		LogUtils.saveLog(request, handler, ex, null);
		
		// 打印JVM信息。
		if (logger.isDebugEnabled()){
			long beginTime = startTimeThreadLocal.get();//得到线程绑定的局部变量(开始时间)  
			long endTime = System.currentTimeMillis(); 	//2、结束时间  
	        logger.debug("计时结束:{}  耗时:{}  URI: {}  最大内存: {}m  已分配内存: {}m  已分配内存中的剩余空间: {}m  最大可用内存: {}m",
	        		new SimpleDateFormat("hh:mm:ss.SSS").format(endTime), DateUtils.formatDateTime(endTime - beginTime),
					request.getRequestURI(), Runtime.getRuntime().maxMemory()/1024/1024, Runtime.getRuntime().totalMemory()/1024/1024, Runtime.getRuntime().freeMemory()/1024/1024, 
					(Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory())/1024/1024); 
		}
		
	}

}

 

 

分享到:
评论

相关推荐

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在Java的Spring框架中,SpringMVC是一个提供了构建Web应用程序的模型-视图-控制器(MVC)的流行框架。其中,拦截器是SpringMVC的一个特性,允许开发者在进入控制器之前执行特定的操作,常用于日志记录、权限检查等场景...

    springMVC拦截器项目

    SpringMVC 拦截器项目是一个典型的 Web 应用开发示例,它利用 SpringMVC 框架中的拦截器(Interceptor)机制来实现特定的功能,如权限控制、日志记录、性能统计等。SpringMVC 是 Spring 框架的一部分,专为构建基于 ...

    SpringMVC拦截器例子详解

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复代码...

    SpringMVC拦截器源代码.zip

    - 多个拦截器按照注册顺序形成一个链,每个拦截器的`preHandle`方法按顺序执行,`postHandle`和`afterCompletion`则按后进先出的顺序执行。 6. **应用场景** - 权限验证:在处理请求前检查用户是否已登录或拥有...

    SpringMVC拦截器

    SpringMVC提供了一个名为`CharacterEncodingFilter`的过滤器,用于解决HTTP请求中的乱码问题。该过滤器通常被配置在`web.xml`文件中,或者通过Spring的配置类来配置。通过设置`CharacterEncodingFilter`的`encoding`...

    springmvc 拦截器

    在其中,可以创建一个或多个`&lt;mvc:interceptor&gt;`子元素,每个子元素代表一个拦截器。需要指定拦截哪些请求路径,以及对应的拦截器类。 6. **自定义拦截器** 自定义拦截器需要实现Spring MVC提供的...

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    在企业级开发中,SpringMVC 是一个广泛使用的框架,用于构建高效、模块化和可测试的 Web 应用程序。本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能...

    SpringMVC 拦截器 实现 登录退出功能

    综上所述,本项目是一个适合初学者了解和实践SpringMVC拦截器功能的小程序。通过学习和实践,你可以掌握如何使用拦截器实现登录验证和安全退出,同时加深对Intelli IDEA的使用理解。在实际应用中,拦截器常用于权限...

    SpringMvc 拦截器

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复编写...

    SpringMVC-12 拦截器

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的任务。它提供了一种AOP(面向切面编程)的方式,让我们可以全局地处理请求,如日志记录、权限验证、性能...

    Springmvc登录拦截器Demo

    Spring MVC支持多个拦截器组成一个拦截器链,每个拦截器的`preHandle()`方法都会按顺序执行,只有当所有拦截器都返回true时,请求才会继续被处理。如果有一个返回false,请求处理将被中断。 7. **最佳实践** - ...

    SpringMVC拦截器源码.rar

    在SpringMVC中,拦截器(Interceptor)是一个重要的概念,用于在实际处理请求之前和之后执行一些预处理或后处理逻辑。这些逻辑可以包括权限检查、日志记录、性能统计等。 ### 一、SpringMVC 拦截器的定义 ...

    SpringMvc自定义拦截器(注解)代码实例

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,它允许我们在请求处理前后执行自定义逻辑,如权限检查、日志记录、性能监控等。本文将深入探讨如何使用注解来自定义Spring MVC的拦截器。 首先,...

    springmvc拦截器实现登录验证

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。在本场景中,我们探讨的是如何利用拦截器来实现登录验证功能,确保只有经过身份验证的用户才能访问...

    SpringMVC时间拦截器

    SpringMVC框架下对限定时间拦截(适用于初学者)

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringMVC - 拦截器

    如果这个方法返回 `true`,则继续调用下一个拦截器的 `preHandle()` 方法,直到所有拦截器的 `preHandle()` 都执行完毕。接着,SpringMVC 将调用目标控制器处理请求。最后,从最后一个拦截器开始,按相反的顺序调用 ...

    分页拦截器文件上传下载springmvc

    拦截器是Spring MVC中的一个关键概念,它允许在请求处理前后执行一些预处理和后处理逻辑。例如,实现用户权限检查、日志记录、性能统计等功能。Spring MVC的HandlerInterceptor接口提供了preHandle、postHandle和...

    springmvc拦截器入门实例.zip

    SpringMVC 拦截器(HandlerInterceptor)是 SpringMVC 框架中的一个重要组成部分,它在请求处理之前、之后以及视图渲染之前执行,提供了预处理和后处理的功能。这个入门实例是为了帮助开发者理解如何在实际项目中...

    SpringMVC拦截器实现登录认证

    至此,你已经创建了一个基本的登录认证拦截器,并将其集成到了SpringMVC应用中。当用户尝试访问受保护的资源时,拦截器会检查用户是否已登录,如果未登录则重定向到登录页面。这是一种常见的安全实践,可以防止未经...

Global site tag (gtag.js) - Google Analytics