资讯专栏INFORMATION COLUMN

SpringMVC之源码分析--ThemeResolver(二)

antyiwei / 688人阅读

摘要:类实现接口,使用用户会话中的主题。新增并更换一张不同的图片。通过关闭浏览器,然后再访问进行测试总结本章通过拦截器和结合实现了通过请求参数控制会话主题。

概述

本章继续分析ThemeResolver的另一个实现类SessionThemeResolver,需要了解Spring MVC Theme情况的,可参考上一篇文章https://segmentfault.com/a/1190000014868501

SessionThemeResolver

SessionThemeResolver类的继承关系如下:

说明:

1、与FixedThemeResolver解析器的继承关系一样,都继承自AbstractThemeResolver抽象类,其中抽象类中定义了defaultThemeName属性,用于设置属性文件的名称,默认为theme

2、SessionThemeResolver类实现ThemeResolver接口,使用用户会话(session)中的主题。

该类源代码如下:

public class SessionThemeResolver extends AbstractThemeResolver {
    // 用于设置session Attribute中的key使用
    public static final String THEME_SESSION_ATTRIBUTE_NAME = SessionThemeResolver.class.getName() + ".THEME";

    // 解析请求中使用的主题
    @Override
    public String resolveThemeName(HttpServletRequest request) {
        // 从请求会话中获取到主题
        String themeName = (String) WebUtils.getSessionAttribute(request, THEME_SESSION_ATTRIBUTE_NAME);
        // 如果会话中不存在,使用默认的主题
        return (themeName != null ? themeName : getDefaultThemeName());
    }
    // 设置请求的主题
    @Override
    public void setThemeName(
            HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable String themeName) {
        // 从客户端请求获取主题并设置到session的Attribute区中
        WebUtils.setSessionAttribute(request, THEME_SESSION_ATTRIBUTE_NAME,
                (StringUtils.hasText(themeName) ? themeName : null));
    }

}
实战

项目结构

与上一章项目结构一致,参考https://segmentfault.com/a/1190000014868501

主题配置文件

myTheme.properties与上一章内容一致,参考上章。

新增myTheme2.properties并更换一张不同的图片。

Spring配置文件

本节我们结合拦截器进行设置,配置如下:


    
    
        
        
    




    
    



...

视图和控制器

jsp视图和Controller控制器代码与上一章一致,参考上章代码。

测试

启动应用服务,在浏览器客户端输入访问地址http://localhost:8089/theme,此时使用的是默认设置的主题文件,即:myTheme.properties,我使用的一张狼的图片,效果如下:

接下来我们利用请求参数设置会话主题,输入地址:http://localhost:8089/theme?theme=myTheme2,并回车,此时用户会话已经设置为了myTheme2,我使用的一张狗的图片,效果如下:

设置了会话主题后,在后续的访问中将使用设置后的主题,但是用户会话结束后,在访问,系统将使用默认设置的主题。(通过关闭浏览器,然后再访问进行测试)

总结

本章通过拦截器ThemeChangeInterceptor和SessionThemeResolver结合实现了通过请求参数控制会话主题。

最后创建了qq群方便大家交流,可扫描加入,同时也可加我qq:276420284,共同学习、共同进步,谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69384.html

相关文章

  • SpringMVC源码分析--ThemeResolver(一)

    摘要:此解析器不能动态设置主题。实战目标练习使用解析器,最终效果如下项目结构在下创建了主题文件夹及主题文件,下创建了静态资源文件。是默认的解析器,再此配置是为了自定义属性值,即属性文件名称。其实此解析器与的实现原理基本相同。 概述 主题就是系统的整体样式或风格,可通过Spring MVC框架提供的主题(theme)设置应用的整体样式风格,提高用户体验。Spring MVC的主题就是一些静态资...

    Ocean 评论0 收藏0
  • SpringMVC源码分析--ThemeResolver(三)

    摘要:类继承关系如下该类实现接口,实现解析设置主题功能继承类,以具备操作功能。新增并更换一张不同的图片。配置文件只要替换即可,代码如下配置默认的主题文件视图和控制器视图和控制器代码与上一章一致,参考上章代码。 概述 上节介绍了SessionThemeResolver解析器,本章分析下CookieThemeResolver,两个解析器实现的功能是一样的,只是使用的主题载体有区别而已,Sessi...

    OldPanda 评论0 收藏0
  • SpringMVC源码分析--LocaleResolver和ThemeResolver应用

    摘要:需求根据客户端环境,界面显示不同的国旗图案。选择的技术方案可利用提供的国际化和主题定制来解决。注意此时返回的中没有国际化及主题相关的信息。修改请求参数的值为荷兰,即后再发起请求,结果如下与预期一致,测试通过。 概述 以上分析了Spring MVC的LocaleResolver和ThemeResolver两个策略解析器,在实际项目中很少使用,尤其是ThemeResolver,花精力去分析...

    qpal 评论0 收藏0
  • SpringMVC源码分析--请求过程

    摘要:概述根据规范,当用户请求到达应用时,由的方法进行处理,对于而言,处理用户请求的入口为,通过其父类的拦截处理。最后创建了群方便大家交流,可扫描加入,同时也可加我,共同学习共同进步,谢谢 概述 根据Servlet规范,当用户请求到达应用时,由Servlet的service()方法进行处理,对于Spring MVC而言,处理用户请求的入口为DispatcherServlet,通过其父类Fra...

    zxhaaa 评论0 收藏0
  • SpringMVC源码分析--Controller(

    摘要:概述上篇文章主要分析了提供的及抽象类,本章继续分析其具体的几个实现类。源码由继承关系继承抽象类,并实现模板方法,完成将接收的请求进行转发,源码如下实现父类模板方法获取部署文件中定义的,传入参数。 概述 上篇文章主要分析了Spring提供的Controller及抽象类AbstractController,本章继续分析其具体的几个实现类。 本系列文章是基于Spring5.0.5RELEAS...

    KevinYan 评论0 收藏0

发表评论

0条评论

antyiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<