spring mvc番外篇(三):主题(theme)
3.1 简介
在实际开发中,经常会碰到这样一个问题,客户要求更换版面风格。不一定是美工做的不好,也有可能是客户的视觉疲劳。所以在项目的开始阶段,最好就要考虑这些灵活的需求变化。这个在网站程序中称为:主题(theme)。
主题的实现原理:大概就是把网站版面的css样式表和图片之类的文件,和网站的程序进行解耦。程序读取theme的持久化配置,然后找到相应的css样式表和图片,配置网站版面。
采用springMVC的主题概念,我们可以控制程序的整体感官效果,从而概述用户的体验。主题是影响程序视觉效果的样式表,静态资源和图片等资源的集合。
3.2 案例开发步骤
步骤一:在myeclipse8.6中新建web工程mvcTheme,拷贝如下包到lib目下:
说明:commons-logging-1.1.3.jar是日志包,在下载的struts2官方包里面可以找到。其它的包都在spring3.2.2版本官方包里面找到。
spring-aop-3.2.2.RELEASE.jar:与Aop 编程相关的包
spring-beans-3.2.2.RELEASE.jar:提供了简捷操作bean 的接口
spring-context-3.2.2.RELEASE.jar:构建在beans 包基础上,用来处理资源文件及国际化。
spring-core-3.2.2.RELEASE.jar:spring 核心包
spring-web-3.2.2.RELEASE.jar:web 核心包,提供了web 层接口
spring-webmvc-3.2.2.RELEASE.jar:web 层的一个具体实现包,DispatcherServlet也位于此包中。
注意:以上包是springmvc开发所需要的最基本包,不能再精简。
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<!-- 配置spring的字符集过滤 -->
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 如果让首页从控制器进入,则需要加入该配置 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/changeTheme.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>changeTheme.do</welcome-file>
</welcome-file-list>
================================================================
步骤三:建立theme属性文件及相对的css文件,如图所示。
三个helloworld.css文件的内容分别是:
Theme/blue 文件夹下:
#divTheme {
background: blue;
width: 4.46cm;
height: 8cm;
}
Theme/default 文件夹下:
#divTheme {
background: gray;
width: 4.46cm;
height: 10cm;
}
Theme/red 文件夹下:
#divTheme {
background: red;
width: 14cm;
height: 4.46cm;
}
步骤四:在webroot根目录下编写index.jsp,如下所示:
================================ Register.jsp=======================
<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
< !—注意要导入spring的标签库-->
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%
String path =request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>主题</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
< !—注意code值是theme属性文件中的name值-->
<link rel="stylesheet"type="text/css" href="<s:theme code='hello'/>" />
</head>
<body>
<h1>改变主题</h1>
<div id="divTheme"></div>
<p>
<a href="changeTheme.do?themeName=red"> set theme to red</a>
<a href="changeTheme.do?themeName=blue"> set theme to blue</a>
<a href="changeTheme.do?themeName=grey"> set theme to grey</a>
</p>
</body>
</html>
==================================================================
步骤五:编写控制器ThemeController.java,如下所示:
================================== ThemeController.java==============
package com.stu.controls;
import javax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.ThemeResolver;
import org.springframework.web.servlet.mvc.Controller;
public class ThemeController implements Controller {
private ThemeResolver themeResolver;
public void setThemeResolver(ThemeResolver themeResolver) {
this.themeResolver = themeResolver;
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String themeName = request.getParameter("themeName");
themeResolver.setThemeName(request, response, themeName);
return new ModelAndView("index");
}
}
====================================================================
步骤六: 在web-inf目录下建立springmvc-servlet.xml的配置文件,它的命名规则{servlet-name}-servlet.xml ,注意下划线处。当DispatcherServlet启动的时候,它会默认根据此规则到web-inf目录下去找这个xml配置文件。
=========================springmvc-servlet.xml==========================
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"value="/"></property>
<property name="suffix"value=".jsp"></property>
</bean>
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/changeTheme.do">themeController</prop>
</props>
</property>
</bean>
<!-- 主题配置 -->
<bean id="themeResolver"
class="org.springframework.web.servlet.theme.SessionThemeResolver">
<!-- 设置默认主题 -->
<property name="defaultThemeName"value="grey" />
</bean>
<!-- 加载主题资源 -->
<bean id="themeSource"
class="org.springframework.ui.context.support.ResourceBundleThemeSource">
<property name="basenamePrefix"value="theme."></property>
</bean>
<!-- 注入控制器 -->
<bean id="themeController"class="com.stu.controls.ThemeController">
<property name="themeResolver" ref="themeResolver"/>
</bean>
</beans>
==========================================================
步骤七:启动tomcat,发布项目,在地址栏分别输入 http://localhost:8080/mvcTheme/
进行测试。 如图所示:
点击相应链接可以更改相应主题。