前两篇博客浅谈了一下sitemesh3.0和2.4的区别和简单用法,今天我做了一个结合sturts2的sitemesh构架,由于strusts2只能用sitemesh2.x的版本,与3.0目前还不能兼容。所以我采用了sitemesh-2.4.2.jar+struts2-sitemesh-plugin-2.3.16.3.jar来对前堆的jsp做一下整理。前面的配置没什么区别,用法上多了几种灵活的用法。我就列举一个index.jsp的拆分过程。

首先我在WEB-INF下面新建两个文件夹content和decorators,一个用来放网页中独特的地方,一个用来放装饰器。我的index.jsp分为了这个几个部分,nav导航栏,jQuery代码,

中间独有的部分,登陆框,注册框,以及一个foot(这个部分还没做,暂且不去管它)。我在content下面建立两个jsp:index.jsp,header.jsp,同样的我在decorators下面建立五个jsp:header-dec.jsp,index-dec.jsp,login-dec.jsp,nav-dec.jsp,register.jsp。不要慌,小伙伴们,我会一一讲述这些jsp中放的是什么。

index.jsp中放的是原来index.jsp除了其他部分(头部,尾部,登陆框,注册框,jQuery代码)以外剩下的代码,也可以理解为独有的代码。header.jsp放的是jQuery的代码。

header-dec.jsp里面放的是一些链接外部css和js的代码。当然还得在后面加上重要的一句话:<decorator:body></decorator:body>把header.jsp的东西包含进来。

nav-dec.jsp放的是导航栏的代码,register.jsp放的是注册框的代码,login.jsp放的是登陆框的代码。最后在index-dec.jsp里面放的是一些组装代码。

我先把这个文件列上去待会在去解释:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title><decorator:title default="网上书店"></decorator:title></title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<page:apply-decorator name="header" page="/WEB-INF/content/header.jsp"></page:apply-decorator> </head> <body>
<page:applyDecorator name="nav" />
<decorator:body></decorator:body>
<page:applyDecorator name="register" />
<page:applyDecorator name="login" />
</body>
</html>

然后让我来解释一下这个访问过程,我先通过webapp目录下面的index.jsp重定向到一个action,由这个action跳转到index.jsp(content目录下面),读取web.xml发现装饰器,再去读decorators.xml:

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/decorators">
<!-- 排除不需要装饰的url,我们这里所有的异步都是/ajax开头,这样ajax的请求都不会被装饰 -->
<excludes>
<pattern>/ajax/*</pattern>
</excludes>
<decorator name="index" page="index-dec.jsp">
<pattern>/*</pattern>
</decorator>
<decorator name="header" page="header-dec.jsp"/>
<decorator name="nav" page="nav-dec.jsp"/>
<decorator name="register" page="register-dec.jsp"/>
<decorator name="login" page="login-dec.jsp"/>
</decorators>

根据匹配路径index.jsp(content目录下面)需要名叫index的decorator 这个decorator的文件名叫做index-dec.jsp,这个时候其实最主要就是去解释index-dec.jsp了

这个jsp新增了一些我之前没用到过的方法,下面一一讲解:

<page:apply-decorator name="header" page="/WEB-INF/content/header.jsp"></page:apply-decorator>

把/WEB-INF/content/header.jsp文件经过header这个装饰器装饰后,然后输出到指定部分。哈哈,这里其实有一点点小突破,即不经过配置文件也可以使用装饰器。

而且也很方便。其实这个装饰器使用很灵活,不仅可以象上面我说的那样用,而且可以通过配置文件使用,第三个方式就是可以直接使用

<decorator name="nav" page="nav-dec.jsp"/>

这样就可以在访问content下面的index.jsp的文件的时候就可以得到一堆积木组成的jsp了。

sitemesh学习笔记(3)的更多相关文章

  1. sitemesh学习笔记(2)

    之前我也是通过网上一些资料来学习sitemesh的,后来发现那些资料都比较老了,现在最近的已经是sitemesh3了而我之前看的是sitemesh2.3,今天重新去看了一些sitemesh3的资料,发 ...

  2. sitemesh学习笔记(1)

    最近在学习web开发的时候,发现很多的页面都存在同样的导航栏,登陆栏,js,jQuery等等相同的元素.这样就感觉开发变得好臃肿啊,并且,有时候改一个元素,就要把所有包含这个元素的页面全部重新码一遍, ...

  3. SiteMesh学习笔记

    SiteMesh是一个轻量级的web应用框架,实现了Decorator模式.它的目标是将多个页面都将引用的jsp页面通过配置加载到相应的jsp文件中. 在我们的项目中,每个jsp都需要添加两个top和 ...

  4. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. 【转】IT 圈里有哪些经常被读错的词?

    以下内容转至知乎,原文:http://www.zhihu.com/question/19739907?__nids__=5363833,5358751,5355121,5365018,5363846, ...

  2. Meanshift filter实现简单图片的卡通化效果

        利用Meanshift filter和canny边缘检测的效果,可以实现简单的图片的卡通化效果.简单的说,就是用Meanshift filter的结果减去canny算法的结果得到卡通化的效果. ...

  3. ELK——为调试 Logstash Grok 表达式,安装 GrokDebuger 环境

      内容 安装 RVM 安装 Ruby 和 Gems 安装 Rails 安装 jls-grok Ruby grok 解析 调试 grok 注意:不要用 root 执行以下操作. 用 logstash ...

  4. LDO/DC-DC区别总结(转)

    电源是一个电子系统中不可缺少的非常重要的一部分.但是外接的电源通常不能够完全提供系统中需要的所有的电源种类.因此带来了电源电压的变换问题.常用的电源电压的变换芯片包括LDO和DC-DC两种.下面对这两 ...

  5. quick -- 添加按钮

    cc.ui.UIPushButton.new({ normal = "comm_btnGreenBackBack.png", pressed = "comm_btnGre ...

  6. AndroidStudio小技巧--依赖库

    同步发表于http://avenwu.net/2015/02/12/androidstudio_library_dependency Fork on github https://github.com ...

  7. jQuery Mobile 移动开发中的日期插件Mobiscroll使用说明

    近期在移动方面的开发,使用jQuery Mobile ,移动方面的插件不如Web 方面的插件多,选择的更少,有一些需要自己去封装,但功力尚不足啊. 日期插件JQM也提供了内置的,但样式方面不好看,只好 ...

  8. Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerException

    由于没有正常关机导致eclipse无法将数据正常写入配置文件导致无法启动.报这样一个异常 An internal error occurred during: "reload maven p ...

  9. njoj 1251 zlly长了一张包子脸

    njoj 1251 zlly长了一张包子脸 题意: zlly长了一张包子脸.他特别喜欢吃糖果.如今他手头有若干种糖果,每种糖果有个口味值,每种糖果有无数多个.然后娄童鞋也很喜欢吃糖果.他的口味特别广泛 ...

  10. Microsoft.CSharp.CSharpCodeProvider

    Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICode ...