Spring MVC主题支持到底是如何工作的?(对一个提议的具体示例有一些疑问)

wpx232ag  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(54)

我是Spring MVC的新手,实际上我正在研究主题支持。
因此,我正在开发一个具有以下特征的示例应用程序:
1]在src/webapp/resources/css中定义了3个CSS主题文件,分别命名为:theme-black.csstheme-chocolate.csstheme-dafault.css。因此,这些文件代表了用户必须选择的主题相关的CSS设置。
2]在servlet-context.xml配置文件(应该是配置MVC支持的文件)中,定义了以下与主题化支持相关的bean:

<beans:bean id="themeSource"
    class="org.springframework.ui.context.support.ResourceBundleThemeSource">
    <beans:property name="basenamePrefix" value="META-INF.theme-" />
</beans:bean>

<beans:bean id="themeChangeInterceptor"
    class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <beans:property name="paramName" value="theme" />
</beans:bean>

<mvc:interceptors>
    <beans:ref bean="themeChangeInterceptor" />
</mvc:interceptors> 

<beans:bean id="themeResolver"
    class="org.springframework.web.servlet.theme.CookieThemeResolver">
    <beans:property name="defaultThemeName" value="default" />
</beans:bean>

字符串
而在META-INF应用文件夹中,有以下3个与之前CSS主题文件相关的属性文件:

主题-黑色.属性

css=resources/css/theme-black.css

theme-chocolate.properties

css=resources/css/theme-chocolate.css

theme-default.properties

css=resources/css/theme-default.css


现在我想知道这些豆子到底是做什么的。
据我所知,Spring MVC主题化支持的工作方式如下:
Web应用程序在开始时有一个默认主题(默认情况下是名为theme-default.css的主题吗?所以如果我使用theme-default.css作为主题,它会作为默认主题加载,还是我错过了什么?)
我需要提供给用户一组主题,从中选择他要使用的主题。
当用户选择一个主题时,应用程序会向用户浏览器发送一个cookie,此cookie包含有关所选主题的信息。
然后,每当用户向应用程序发出任何HTTP请求(由控制器处理)时,必须有一些东西拦截这些请求,并读取cookie以获得所选的主题标识,然后将此主题用于响应。
所以我认为前面声明的bean是以如下方式工作的:
1]第一个类是主题源

<beans:bean id="themeSource"
    class="org.springframework.ui.context.support.ResourceBundleThemeSource">
    <beans:property name="basenamePrefix" value="META-INF.theme-" />
</beans:bean>


并将名为basenamePrefix的属性作为输入参数,该属性标识包含具体主题路径(theme-black.propertiestheme-chocolate.propertiestheme-default.properties)的先前属性文件。
所以这个bean应该完成主题支持的第一个需求(识别和访问主题列表)
2]第二个类是主题拦截器

<beans:bean id="themeChangeInterceptor"
    class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <beans:property name="paramName" value="theme" />
</beans:bean>


这是一个类,我可以用它来拦截用户发出的任何请求,并做前行动后行动,并从我所理解的它定义的URL参数名称,让用户改变的主题。
所以在这个例子中,参数名是theme,所以当用户调用一个URL时,比如:

http://localhost:8080/springchocolatestore/?theme=chocolate


它选择与theme-chocolate.properties相关的chocolate主题,因此将使用resources/css/theme-chocolate.css文件。
所以我的疑问是:预操作是检查URL中是否存在**?theme=chocolate并应用样式?
3]第三个bean是
主题解析器**:

<beans:bean id="themeResolver"
    class="org.springframework.web.servlet.theme.CookieThemeResolver">
    <beans:property name="defaultThemeName" value="default" />
</beans:bean>


所以这个解析器使用cookie来识别选择的主题。
因此,例如,如果我选择了巧克力主题(通过请求http://localhost:8080/springchocolatestore/?theme=chocolate),Web应用程序将向浏览器发送一个cookie,该cookie存储指定必须使用巧克力主题的信息。
然后,如果我再次重新加载应用程序,页面仍然使用巧克力主题(而不是默认主题)。
这意味着CookieThemeResolver可以访问此cookie,读取它并使用此信息来选择要使用的主题?
所以我有以下疑问:这个cookie是在我的文件系统和Web应用程序是在一个远程应用服务器上。它如何访问我的文件系统上的cookie?这个cookie是在我的文件系统,它的名字是什么?(我想打开它与文本编辑器检查它)
最后还声明了此配置:

<mvc:interceptors>
    <beans:ref bean="themeChangeInterceptor" />
</mvc:interceptors>


这个配置到底是什么?

ntjbwcob

ntjbwcob1#

org.springframework.ui.context.support.ResourceBundleThemeSource

字符串
从指定的base(通常是classpath)加载属性文件。从spring API docs ResourceBundleThemeSource是一个ThemeSource实现,它会查找每个主题的单个ResourceBundle。主题名称被解释为ResourceBundle bastString,支持所有主题的公共bastString前缀。

org.springframework.web.servlet.theme.ThemeChangeInterceptor


拦截器,允许通过可配置的请求参数(默认参数名:“theme”)在每次请求时更改当前主题。更多信息也可以在spring api docs中找到

org.springframework.web.servlet.theme.CookieThemeResolver


ThemeResolver实现,在自定义设置的情况下使用cookie发送回用户,并回退到默认主题。这对于没有用户会话的无状态应用程序特别有用。再次了解更多信息here
这个cookie在我的文件系统上,而Web应用程序在远程应用程序服务器上。它如何访问我的文件系统上的cookie?这个cookie在我的文件系统中的什么位置,它的名称是什么?
What's an HTTP cookie in the first place?
要检查任何网站发送的cookie,如果您使用Firefox,请使用firebug;如果您使用Chrome,请使用开发人员工具

相关问题