我是Spring MVC的新手,实际上我正在研究主题支持。
因此,我正在开发一个具有以下特征的示例应用程序:
1]在src/webapp/resources/css中定义了3个CSS主题文件,分别命名为:theme-black.css、theme-chocolate.css和theme-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.properties、theme-chocolate.properties和theme-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>
型
这个配置到底是什么?
1条答案
按热度按时间ntjbwcob1#
字符串
从指定的base(通常是classpath)加载属性文件。从spring API docs ResourceBundleThemeSource是一个ThemeSource实现,它会查找每个主题的单个ResourceBundle。主题名称被解释为ResourceBundle bastString,支持所有主题的公共bastString前缀。
型
拦截器,允许通过可配置的请求参数(默认参数名:“theme”)在每次请求时更改当前主题。更多信息也可以在spring api docs中找到
型
ThemeResolver实现,在自定义设置的情况下使用cookie发送回用户,并回退到默认主题。这对于没有用户会话的无状态应用程序特别有用。再次了解更多信息here
这个cookie在我的文件系统上,而Web应用程序在远程应用程序服务器上。它如何访问我的文件系统上的cookie?这个cookie在我的文件系统中的什么位置,它的名称是什么?
What's an HTTP cookie in the first place?的
要检查任何网站发送的cookie,如果您使用Firefox,请使用firebug;如果您使用Chrome,请使用开发人员工具