SpringMVC整合Tiles框架入门教程
原文:http://www.tuicool.com/articles/ZbMn2a
1、在Maven WEB项目中的pom.xml中添加
<dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-extras</artifactId> <version>3.0.5</version> </dependency>
若不是Maven项目怎么办?可以直接到Apache的 Tiles 项目页面下载jar包就可以了。
2、新建一个布局文件,命名为layout.xml,我们要在这个文件里配置网站的布局,内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <!--主布局 --> <definition name="layout" template="/mainLayout.jsp"></definition> <!--主布局 --> <!-- 项目 --> <definition name="myView" extends="layout"> <put-attribute name="a" value="/a.jsp"></put-attribute> <put-attribute name="item" value="/${item}.jsp"></put-attribute> </definition> <!-- 项目 --> </tiles-definitions>
3、其中,mainLayout.jsp就是我们的主布局模板,它决定整个网页需要显示的内容以及显示到什么地方。而a.jsp和b.jsp就是模板里需要显示的两个引用页面。简而言之,mainLayout.jsp这个页面引用了a.jsp和b.jsp两个页面。mainLayout.jsp页面的内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %> <div> <tiles:insertAttribute name="a"></tiles:insertAttribute><!-- a表示a.jsp中的内容,而item就代表那10万个项目页面 --> <tiles:insertAttribute name="item"></tiles:insertAttribute> </div>
4、a表示在这里插入的a.jsp,b表示将要在这里插入的b.jsp。a.jsp和b.jsp中的内容就随意了,这里我们在a.jsp的内容是”我是a.jsp“,b.jsp 的内容是 ”我是b.jsp“。然后,我们需要为Tiles配置视图解析器,在springMVC-servlet.xml中添加以下内容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <context:component-scan base-package="com.test.controller"></context:component-scan> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/layout.xml</value> </list> </property> <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" /> </bean> <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> </bean> </beans>
其中的layout.xml即为前文所建立的布局配置文件,p:order="1"表示优先级,数字越小,解析器的优先级越高。
5、TestController.java
package com.test.controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; public class TestController { @RequestMapping("/test") public String introduceView(Model model){ model.addAttribute("item","introduction"); return "myView"; //这里的myView为layout.xml中配置的视图名称 } }
这里假设introduction.jsp为公司介绍页面,当访问introductionView时,layout.xml中${item}.jsp就能匹配到introduction.jsp。那么,如果还有一个兔子页面rabbit.jsp,那么通过访问rabbitView就能访问到兔子页面…现在,如果你把10万个页面都这样设计,老板让你删除A页面,知道如何删除吗?告诉你,直接把layout.xml的myView中的A属性删除就可以了,10秒钟是不是太多了?是的,Titles就这么神奇。
6、web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>tiles与springmvc整合示例</display-name> <!--灵活指定springmvc映射文件及路径 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring-servlet.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 编码过滤器 --> <filter> <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
7、pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.meyacom</groupId> <artifactId>tiles</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-extras</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>