Tiles与SpringMVC整合应用实践

简介: Tiles与SpringMVC整合应用实践

Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离,支持EL,OGNL,MVEL等进行动态解析。


它用模板定义网页布局,每个页面模板都是一个简单的 JSP 页,它定义了一些由占位符(也可以指定具体jsp)组成的外形,以放置内容。执行时,Tiles 将会用相应的内容来替换占位符,因此,创建整个页面即形成布局。

Tiles框架是建立在JSP的include指令基础上的,但它提供了比JSP的include指令更强大的功能。

Tiles的方法体是用来创建版面布局,可复用部分等的,而Tiles的插入操作是用来插入Tiles的。同一个Tiles可以在同一个站点甚至同一个页面被重用多次。

Tiles的插入可以与一个在Tiles中称作“definition”的逻辑名联系起来。一个Tiles的definition包含一个逻辑名,一个主体页面和一些属性值。definition的声明并不插入与其相关联的Tiles方法体,它只是让Tiles与它的逻辑名关联起来。可以在任何能够插入Tiles地方运用定义的逻辑名,这样与其对应的Tiles及其属性就被插入进来了。


Tiles框架具有如下特性:

1.创建可重用的模板

2.动态构建和装载页面

3.定义可重用的Tiles组件

4.支持国际化。

【1】Tiles的definitions

Tiles的definition包含一个带有Tiles URL的逻辑名和一些属性值。定义并不插入Tiles,插入是在后来用definition的名字来完成的。

一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。 Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。

比如,你可以定义一个“父类”的definition同时定义主要的 header, menu, footer, 和一个默认的 title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。


Tiles的definitions的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。为了使中心控制文件中定义的definitions有效,你需要初始化“定义池”(definitions factory),这个定义池能够解释文件中的definitions并把它们提供给Tiles框架。

【2】Tiles需要的jar

可以在Apache主页下载tiles需要的jar:tiles需要的jar

如果项目是maven,请使用如下配置:

  • 这里使用的是3.0.7版本。
  <dependency>
      <groupId>org.apache.tiles</groupId>
      <artifactId>tiles-core</artifactId>
      <version>3.0.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tiles</groupId>
      <artifactId>tiles-api</artifactId>
      <version>3.0.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tiles</groupId>
      <artifactId>tiles-jsp</artifactId>
      <version>3.0.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.7</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.7</version>
  </dependency>
 <!--servlet 包 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

【3】Tiles需要的监听器

  <!-- tiles监听器,默认配置文件在/WEB-INF/tiles*.xml-->
     <listener>
         <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
     </listener>

也可以通过继承SimpleTilesListener 自定义监听器。

如果与Struts结合,需要配置插件org.apache.struts.tiles.TilesPlugin。该篇学习SpringMVC下使用tiles框架。

【4】springmvc.xml

SpringMVC只需要进行如下配置,并不需要在web.xml配置监听器。

<!-- 定义tiles视图解析器 -->
    <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass">
            <value>org.springframework.web.servlet.view.tiles3.TilesView</value>
        </property>
    </bean>
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>
        </property>
        <property name="preparerFactoryClass">  
                 value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" 
    </property>
    </bean>

springmvc默认会加载/WEB-INF/tiles.xml,故上面不定义definitions属性也可以:

/**
   * Set the Tiles definitions, i.e. the list of files containing the definitions.
   * Default is "/WEB-INF/tiles.xml".
   */
  public void setDefinitions(String... definitions) {
    this.definitions = definitions;
  }

【5】tiles.xml

示例如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
  //定义基础模块
    <definition name="base.definition" template="/WEB-INF/jsp/main.jsp">
      // 定义模板
        <put-attribute name="title" value="测试tiles" />
        <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
        <put-attribute name="body" value="" />
    </definition>
  //继承了基础模板布局,注意罗继明welcome哦
    <definition name="welcome" extends="base.definition">
        <put-attribute name="title" value="主页" />
         //放入属性body值
        <put-attribute name="body" value="/WEB-INF/jsp/welcome.jsp" />
    </definition>
</tiles-definitions>

3b37772822bcdfc6f0543438f43824c2.png


【6】模板文件main.jsp如下:

<body>
<div id="wrapper">
    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
      // 插入属性(其实就是放入参数),可以不设置值
        <tiles:insertAttribute name="header" ignore="true"/>
        <tiles:insertAttribute name="menu" ignore="true"/>
    </nav>
    <div id="tilesBody" style="margin-top: 50px">
        <tiles:insertAttribute name="body" ignore="true"/>
    </div>
</div>
</body>

【7】测试controller

   //进入welcome页面
    @RequestMapping(path = "/welcome")
    public String welcome() {
        return "welcome";
        //根据该逻辑名,找到tiles.xml中 对应的definition...获取最后的jsp
    }

【8】使用参数动态加载jsp

tiles.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" />
    //指定固定jsp
    <put-attribute name="item" expression="/${item}.jsp" /> 
    // 根据参数动态加载jsp
   </definition>
</tiles-definitions>


目录
相关文章
|
XML 前端开发 JavaScript
Spring MVC应用的开发步骤
Spring MVC应用的开发步骤
118 0
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
55 0
|
11月前
|
Java 数据库 数据安全/隐私保护
SpringMVC中@ModelAttribute应用实践
SpringMVC中@ModelAttribute应用实践
69 2
|
数据库
“构建高效的SpringMVC增删改查应用“(下)
“构建高效的SpringMVC增删改查应用“
61 0
“构建高效的SpringMVC增删改查应用“(上)
“构建高效的SpringMVC增删改查应用“
47 0
|
设计模式 XML JSON
Spring MVC 深度解析与应用实践(1)
1. 引言 1.1 Spring MVC 概述 Spring MVC(Model-View-Controller)是 Spring 框架的一部分,专门用于设计创建分层的 Java Web 应用。它是一个全功能的 MVC 模块,能够提供强大的配置选项,并利用默认的约定,使基本项目的配置降至最低。Spring MVC 提供了一种分离的方式,使得能够通过控制器(Controller)进行业务处理,模型(Model)进行数据处理,视图(View)进行展示处理,这样使得 Web 层的开发变得更加简洁明了。
4927 1
Spring MVC 深度解析与应用实践(1)
|
XML 前端开发 Java
【Spring MVC 系列】异常处理,为你的应用加层防护
概述 异常处理是几乎所有编程语言都具有的特性,主要是处理程序运行时的非预期行为,保证程序的健壮性。JVM 运行时如果遇到未经处理的异常线程将意外退出,为了避免这种情况需要为线程设置默认的异常处理器。
188 0
【Spring MVC 系列】异常处理,为你的应用加层防护
|
前端开发 JavaScript Java
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
|
JSON 前端开发 Java
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)
|
前端开发 Java 网络架构
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(上)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(上)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(上)