资讯专栏INFORMATION COLUMN

SpringMVC之源码分析--LocaleResolver和ThemeResolver应用

qpal / 2410人阅读

摘要:需求根据客户端环境,界面显示不同的国旗图案。选择的技术方案可利用提供的国际化和主题定制来解决。注意此时返回的中没有国际化及主题相关的信息。修改请求参数的值为荷兰,即后再发起请求,结果如下与预期一致,测试通过。

概述

以上分析了Spring MVC的LocaleResolver和ThemeResolver两个策略解析器,在实际项目中很少使用,尤其是ThemeResolver,花精力去分析他们,主要是为了系统的学习,更多的了解Spring为我们提供的功能组件,通过这个过程,我本人也有了更多的体会,就像上篇文章(https://segmentfault.com/a/1190000014873033)最后提出的小需求,需求本身不是具有实际意义,其实就是让自己去思考,加深已学知识的理解,不知道小伙伴们有没有思考呢?废话不多说,现在就去实现它。

需求

根据客户端环境,界面显示不同的国旗图案。

分析

在接到一个需求时,首先要理解需求,实际工作中可能需求跟产品进行多次沟通,其目的就是准确的理解,理解了需求就可以选择相应的技术方案去解决。就我们这个功能来说,需求就是可定制不同的国旗图案。选择的技术方案可利用Spring MVC提供的国际化和主题定制来解决。

实现

项目结构

源码分析

pom.xml文件

引入Spring MVC依赖以及JSP依赖,代码如下:



    org.springframework
    spring-webmvc
    5.0.5.RELEASE



javax.servlet
    javax.servlet-api
    3.1.0
    provided



    javax.servlet
    jstl
    1.2

spring-servlet.xml文件

在classpath下新建Spring MVC配置文件,代码如下:




 







    
    
    



    
    
        
    




    
    
    
    


 

    
    
    
    




    
    




    
    
    
    

web.xml文件

配置Spring MVC 前端控制器,即DispatcherServlet,负责拦截用户请求,代码如下:


    
    dispatcher
    
    org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        classpath:spring-servlet.xml
    
    
    1
    true



    
    dispatcher
    
    /

国际化属性文件

本例中创建了中国、美国及芬兰的国际化支持,配置文件如下:

messages_zh _CN.properties

message.locale=中国

messages_en _US.properties

message.locale=美国

messages_sv _FI.properties

message.locale=芬兰

主题属性文件

根据国际化配置,主题定义了中国、美国及芬兰的国旗图片,配置如下:

theme_ zh_CN.properties

background=/img/China.jpg

theme_ en_US.properties

background=/img/America.jpg

theme_ sv_FI.properties

background=/img/Finland.jpg

视图及控制器

Controller控制器代码如下:

@RequestMapping("/demo")
public String demo(HttpServletRequest request , Model model){

    Locale locale = RequestContextUtils.getLocale(request);

    model.addAttribute("locale",locale);

    return "demo";
}

JSP视图代码如下:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

    
    Spring MVC Theme
    
    
         : 
        

" style="width: 500px;height: 300px;">

功能测试

本例以Firefox为客户端测试工具,测试步骤如下:

1、启动项目后,访问界面,在地址栏输入http://localhost:8088/demo,结果如下:

由图可知,此时系统使用的是默认的国际化属性文件及显示默认的国旗图案,与我们设想的一致。注意此时返回的cookie中没有国际化及主题相关的信息。

2、通过请求参数locale设置地区环境,在地址栏输入localhost:8088/demo?locale=en_US,并发起请求,结果如下:

由上图可知结果,与我们的设想一致,并且服务端通过拦截器把国际化写入了客户端cookie中。

3、修改请求参数locale的值为荷兰,即locale=sv_FI后再发起请求,结果如下:

与预期一致,测试通过。

总结

本例使用CookieLocaleResolver和CookieThemeResolver结合实现了国际化与主题定制需求,Spring MVC为我们提供了不通实现方式的LocaleResolver和ThemeResolver,可自由组合使用,这两个策略解析器主要定制前端信息或样式,通过之前的源码分析及此案例,这块内容就分析完了,希望对大家有所帮助。

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

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

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

相关文章

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

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

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

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

    OldPanda 评论0 收藏0
  • SpringMVC源码分析--ThemeResolver(二)

    摘要:类实现接口,使用用户会话中的主题。新增并更换一张不同的图片。通过关闭浏览器,然后再访问进行测试总结本章通过拦截器和结合实现了通过请求参数控制会话主题。 概述 本章继续分析ThemeResolver的另一个实现类SessionThemeResolver,需要了解Spring MVC Theme情况的,可参考上一篇文章https://segmentfault.com/a/119000001...

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

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

    zxhaaa 评论0 收藏0
  • SpringMVC源码分析--LocaleResolver(二)

    摘要:概述上一篇就默认的进行了分析,详细请参考,本节我们继续分析学习,主要分析解析器类继承关系如下图由上面类图可知,继承并实现接口,主要是操作的工具类,继承接口,增加了信息操作。即通过实现的选择。 概述 上一篇就Spring MVC默认的LocaleResovler(AcceptHeaderLocaleResolver)进行了分析,详细请参考https://segmentfault.com/...

    RichardXG 评论0 收藏0

发表评论

0条评论

qpal

|高级讲师

TA的文章

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