zoukankan      html  css  js  c++  java
  • sitemesh学习笔记(3)

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

  • 相关阅读:
    web前端的发展态势
    AngularJs 简单入门
    css代码优化篇
    git提交报错:Please make sure you have the correct access rights and the repository exists.
    Activiti工作流框架学习
    遍历map集合的4种方法
    js设置日期、月份增加减少
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    webservice_rest接口_学习笔记
    相互匹配两个list集合+动态匹配${}参数
  • 原文地址:https://www.cnblogs.com/think-in-java/p/3879134.html
Copyright © 2011-2022 走看看