前两篇博客浅谈了一下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了。

最新文章

  1. Android6.0运行时权限管理
  2. 笨办法学Python (exercise1-15)
  3. 【PCB】【AD使用】Altium Designer 的entry sheet ,offsheet和port作用
  4. 【JAVA】LOG4J使用心得
  5. Maya 脚本控制物体自转
  6. HTML网页插入图像
  7. GridView数据源绑定的一个小问题
  8. 扩展KMP--求字符串S的所有后缀和字符串T的最长公共前缀
  9. js限制文本框只能输入数字
  10. 查看当前linux系统位数
  11. E题 - A+B for Input-Output Practice (IV)
  12. Linux用户基础
  13. Hive 9、Hive 在表中添加正则匹配
  14. 动态创建分页 LINQ+EF
  15. css兼容问题 ie6,7
  16. 基于Kubernetes的WAF集群介绍
  17. windows环境下python编码问题
  18. Linux下单独编译安装PHP扩展包
  19. [PHP]PHP缓存机制之Output Control
  20. [Web 前端] ECMAScript5之StrictMode

热门文章

  1. DotNetMQ的一个小demo
  2. 曲率已驱动了头发——深度分析谷歌AlphaGo击败职业棋手
  3. webService----wsimport调用方式
  4. 【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。
  5. Lua在给定范围内,生成指定个数不重复随机数组
  6. mvc 返回 xml
  7. Android上面安装Linux的方法
  8. js后退一直停留在当前页面或者禁止后退
  9. WIN7,WIN8,WIN8.1,64位客户端使用32位的ODBC配置
  10. ikvm.net简介