SpringMVC杂记——ServletRequestAttributes的应用

在SpringMVC的源代码中也提供了一个封装过的ThreadLocal,其中保存了每次请求的HttpServletRequest对象,(详细请看org.springframework.web.context.request.ServletRequestAttributes的源代码) 。

这样我们就可以进行简单封装一下写一个工具进行使用:

*当然必不可少的一点一定记得,在web.xml里必须要有相应的配置来支持 

  1. <listener>  
  2.     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
  3. </listener>  


工具类代码:

  1. package samples.utils;  
  2.   
  3. import java.util.Arrays;  
  4. import java.util.Collection;  
  5. import java.util.Locale;  
  6.   
  7. import javax.servlet.ServletContext;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpSession;  
  10. import javax.sql.DataSource;  
  11.   
  12. import org.slf4j.Logger;  
  13. import org.slf4j.LoggerFactory;  
  14. import org.springframework.beans.factory.NoSuchBeanDefinitionException;  
  15. import org.springframework.beans.factory.NoUniqueBeanDefinitionException;  
  16. import org.springframework.context.ApplicationContext;  
  17. import org.springframework.context.ApplicationEventPublisher;  
  18. import org.springframework.context.MessageSource;  
  19. import org.springframework.core.convert.ConversionService;  
  20. import org.springframework.core.io.ResourceLoader;  
  21. import org.springframework.core.io.support.ResourcePatternResolver;  
  22. import org.springframework.ui.context.Theme;  
  23. import org.springframework.util.ClassUtils;  
  24. import org.springframework.web.context.request.RequestContextHolder;  
  25. import org.springframework.web.context.request.ServletRequestAttributes;  
  26. import org.springframework.web.context.support.WebApplicationContextUtils;  
  27. import org.springframework.web.servlet.LocaleResolver;  
  28. import org.springframework.web.servlet.ThemeResolver;  
  29. import org.springframework.web.servlet.support.RequestContextUtils;  
  30.   
  31.   
  32. /** 
  33.  * SpringMVC通用工具 
  34.  * @author 
  35.  */  
  36. public final class WebContextHolder {  
  37.       
  38.     private static final Logger LOGGER = LoggerFactory.getLogger(WebContextHolder.class);       
  39.     private static final WebContextHolder INSTANCE = new WebContextHolder();  
  40.       
  41.     public WebContextHolder get() {  
  42.         return INSTANCE;  
  43.     }  
  44.   
  45.     private WebContextHolder() {  
  46.         super();  
  47.     }  
  48.       
  49.     // --------------------------------------------------------------------------------------------------------------  
  50.       
  51.     public HttpServletRequest getRequest() {  
  52.         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
  53.         return attributes.getRequest();  
  54.     }  
  55.       
  56.     public HttpSession getSession() {  
  57.         return getSession(true);  
  58.     }  
  59.       
  60.     public HttpSession getSession(boolean create) {  
  61.         return getRequest().getSession(create);  
  62.     }  
  63.       
  64.     public String getSessionId() {  
  65.         return getSession().getId();  
  66.     }  
  67.       
  68.     public ServletContext getServletContext() {  
  69.         return getSession().getServletContext();    // servlet2.3  
  70.     }  
  71.       
  72.     public Locale getLocale() {  
  73.         return RequestContextUtils.getLocale(getRequest());  
  74.     }  
  75.       
  76.     public Theme getTheme() {  
  77.         return RequestContextUtils.getTheme(getRequest());  
  78.     }  
  79.   
  80.     public ApplicationContext getApplicationContext() {  
  81.         return WebApplicationContextUtils.getWebApplicationContext(getServletContext());  
  82.     }  
  83.       
  84.     public ApplicationEventPublisher getApplicationEventPublisher() {  
  85.         return (ApplicationEventPublisher) getApplicationContext();  
  86.     }  
  87.       
  88.     public LocaleResolver getLocaleResolver() {  
  89.         return RequestContextUtils.getLocaleResolver(getRequest());  
  90.     }  
  91.       
  92.     public ThemeResolver getThemeResolver() {  
  93.         return RequestContextUtils.getThemeResolver(getRequest());  
  94.     }  
  95.       
  96.     public ResourceLoader getResourceLoader() {  
  97.         return (ResourceLoader) getApplicationContext();  
  98.     }  
  99.       
  100.     public ResourcePatternResolver getResourcePatternResolver() {  
  101.         return (ResourcePatternResolver) getApplicationContext();  
  102.     }  
  103.   
  104.     public MessageSource getMessageSource() {  
  105.         return (MessageSource) getApplicationContext();  
  106.     }  
  107.       
  108.     public ConversionService getConversionService() {  
  109.         return getBeanFromApplicationContext(ConversionService.class);  
  110.     }  
  111.   
  112.     public DataSource getDataSource() {  
  113.         return getBeanFromApplicationContext(DataSource.class);  
  114.     }  
  115.   
  116.     public Collection<String> getActiveProfiles() {  
  117.         return Arrays.asList(getApplicationContext().getEnvironment().getActiveProfiles());  
  118.     }  
  119.       
  120.     public ClassLoader getBeanClassLoader() {  
  121.         return ClassUtils.getDefaultClassLoader();  
  122.     }  
  123.   
  124.     private <T> T getBeanFromApplicationContext(Class<T> requiredType) {  
  125.         try {  
  126.             return getApplicationContext().getBean(requiredType);  
  127.         } catch (NoUniqueBeanDefinitionException e) {  
  128.             LOGGER.error(e.getMessage(), e);  
  129.             throw e;  
  130.         } catch (NoSuchBeanDefinitionException e) {  
  131.             LOGGER.warn(e.getMessage());  
  132.             return null;  
  133.         }  
  134.     }  
  135.   
  136. }  

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值