`

SpringMVC杂记(十八) ServletRequestAttributes的应用

阅读更多
看了一下SpringMVC的源代码,原来SpringMVC也提供了一个封装过的ThreadLocal保存了每次请求的HttpServletRequest对象,
(详细请看org.springframework.web.context.request.ServletRequestAttributes的源代码)

这下我简单封装一下写了一个工具,用起来还是蛮方便的
package samples.utils;

import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.MessageSource;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.ui.context.Theme;
import org.springframework.util.ClassUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ThemeResolver;
import org.springframework.web.servlet.support.RequestContextUtils;


/**
 * SpringMVC通用工具
 * 
 * @author 应卓(yingzhor@gmail.com)
 *
 */
public final class WebContextHolder {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(WebContextHolder.class);
	
	private static final WebContextHolder INSTANCE = new WebContextHolder();
	
	public WebContextHolder get() {
		return INSTANCE;
	}

	private WebContextHolder() {
		super();
	}
	
	// --------------------------------------------------------------------------------------------------------------
	
	public HttpServletRequest getRequest() {
		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
		return attributes.getRequest();
	}
	
	public HttpSession getSession() {
		return getSession(true);
	}
	
	public HttpSession getSession(boolean create) {
		return getRequest().getSession(create);
	}
	
	public String getSessionId() {
		return getSession().getId();
	}
	
	public ServletContext getServletContext() {
		return getSession().getServletContext();	// servlet2.3
	}
	
	public Locale getLocale() {
		return RequestContextUtils.getLocale(getRequest());
	}
	
	public Theme getTheme() {
		return RequestContextUtils.getTheme(getRequest());
	}

	public ApplicationContext getApplicationContext() {
		return WebApplicationContextUtils.getWebApplicationContext(getServletContext());
	}
	
	public ApplicationEventPublisher getApplicationEventPublisher() {
		return (ApplicationEventPublisher) getApplicationContext();
	}
	
	public LocaleResolver getLocaleResolver() {
		return RequestContextUtils.getLocaleResolver(getRequest());
	}
	
	public ThemeResolver getThemeResolver() {
		return RequestContextUtils.getThemeResolver(getRequest());
	}
	
	public ResourceLoader getResourceLoader() {
		return (ResourceLoader) getApplicationContext();
	}
	
	public ResourcePatternResolver getResourcePatternResolver() {
		return (ResourcePatternResolver) getApplicationContext();
	}

	public MessageSource getMessageSource() {
		return (MessageSource) getApplicationContext();
	}
	
	public ConversionService getConversionService() {
		return getBeanFromApplicationContext(ConversionService.class);
	}

	public DataSource getDataSource() {
		return getBeanFromApplicationContext(DataSource.class);
	}

	public Collection<String> getActiveProfiles() {
		return Arrays.asList(getApplicationContext().getEnvironment().getActiveProfiles());
	}
	
	public ClassLoader getBeanClassLoader() {
		return ClassUtils.getDefaultClassLoader();
	}

	private <T> T getBeanFromApplicationContext(Class<T> requiredType) {
		try {
			return getApplicationContext().getBean(requiredType);
		} catch (NoUniqueBeanDefinitionException e) {
			LOGGER.error(e.getMessage(), e);
			throw e;
		} catch (NoSuchBeanDefinitionException e) {
			LOGGER.warn(e.getMessage());
			return null;
		}
	}

}


当然了必不可少的一点,web.xml里必须要有相应的配置来支持
<listener>
	<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
分享到:
评论

相关推荐

    SpringMVC杂记(三) 向导型Controller的实现(基于SpringMVC 3.1.1)

    SpringMVC是一个模型-视图-控制器(MVC)框架,它提供了一个灵活的方式来分离应用程序的业务逻辑、数据处理和用户界面。Controller是这个架构的核心部分,负责接收HTTP请求,处理业务逻辑,并将结果转发给View进行...

    SpringMVC杂记(五) JSR303数据验证

    在本篇《SpringMVC杂记(五) JSR303数据验证》中,我们将深入探讨SpringMVC框架如何集成并使用JSR303(JavaBeans Validation)来进行数据验证,这是一种强大的验证机制,可以确保应用程序接收到的数据是合法且符合...

    springmvc框架的简单应用

    SpringMVC 框架是 Java Web 开发中广泛使用的轻量级框架,它提供了模型-视图-控制器(MVC)模式的实现,帮助开发者更有效地组织和管理应用程序的业务逻辑、数据处理以及用户界面。这篇教程将带你了解 SpringMVC 的...

    SpringMVC+MYBatis企业应用实战.pdf

    《SpringMVC+MYBatis企业应用实战》电子版,pdf文件。

    springmvc+mybatis企业应用实战

    《SpringMVC+MyBatis企业应用实战》是针对初学者和有一定经验的开发者的一份详细教程,旨在帮助读者深入理解和熟练运用这两种流行的Java技术。SpringMVC是Spring框架的一部分,主要用于构建Web应用程序的前端控制器...

    初识SpringMVC以及springmvc基本应用入门案例彩色PPT版本.pptx

    SpringMVC 提供了一种更为结构化的 MVC 模式实现,它将应用程序分为 Controller、Service、DAO 和 Model 层。Controller 负责接收和处理请求,Service 处理业务逻辑,DAO 访问数据存储,而 Model 代表了应用的数据...

    SpringMVC的最简应用

    **SpringMVC最简应用详解** SpringMVC是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。它提供了一种简单而强大的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑,而无需...

    Spring+SpringMVC+MongoDB应用

    标题中的“Spring+SpringMVC+MongoDB应用”是指一个集成使用了Spring框架、SpringMVC模块以及MongoDB数据库的项目。这个项目旨在利用这些技术栈来构建一个现代的、基于Java的Web应用程序。 首先,Spring是Java领域...

    springmvc实战应用

    本文将详细介绍SpringMVC在实战中的应用,包括不同方式控制器的实现与参数传递,以及SpringMVC实例应用的配置和代码实现。 首先,来看SpringMVC控制器的实现。SpringMVC支持多种控制器的实现方式。一种方式是通过...

    应用SpringMVC与Hibernate进行WEB开发

    应用SpringMVC与Hibernate进行WEB开发,是一种现代的、高效的Web应用程序开发方法,结合了SpringMVC框架的灵活性和Hibernate的持久化能力。下面将详细阐述这两种技术的关键知识点及其在Web开发中的应用。 ### ...

    SpringMVC PPT_springmvc_

    SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。本教程将深入探讨 SpringMVC 的核心概念、配置以及实际应用。...

    springmvc应用

    spring mvc 的应用 使用xml 和注解的方式配置mvc

    SpringMVC 核心应用

    SpringMVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。在4.2版本中,SpringMVC引入了一系列改进和优化,旨在提高性能、增强可扩展性和简化开发流程。这个压缩包包含了一系列核心...

    02-SpringMVC基础及应用

    **SpringMVC基础及应用详解** SpringMVC是Spring框架的一部分,主要负责处理Web应用程序的请求和响应。它提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、数据处理和用户界面分离,提高代码的可维护...

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。基于注解的SpringMVC允许开发者在控制器类的方法上直接使用注解,如@RequestMapping,@RequestParam等,极大地...

    SpringMVC完整文档PDF

    SpringMVC是Spring框架的一个模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够清晰地分离业务逻辑、数据处理和用户界面。SpringMVC的强大之处在于其灵活性、高效性和与其他...

Global site tag (gtag.js) - Google Analytics