sitemesh 2.4 装饰器学习
这里值得一提的是,SiteMesh只会把最终生成的html填充到装饰的页面,至于关于之前拦截到需要被装饰的jsp里面引入了一些c标签什么的都不会自动引入到装饰页面的,因为sitemesh只会把最终生成的html加入到装饰页面!!所以这里就造成了几个问题
1.装饰的页面如果要用到通用的非静态资源(jstl标签,page),由于服务器是直接跳转到被装饰页面,然后处理jstl等成为普通html才把被装饰页面加入到装饰页面,所以在被装饰页面引入的一些非静态资源是不会加入到装饰页面的,装饰页面还要在引一片通用的 tag,也就是jstl标签。结果就是被装饰页面和装饰页面引tag(也就是非静态资源)都要引两遍
使用sitemesh的步骤
1. 添加jar文件到classpath
maven地址
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.2</version>
</dependency>
2. 在web.xml中增加过滤器
<!-- Sitemesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 在/WEB-INF中创建decorators.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/layouts/">
<!-- 不需要过滤的请求 -->
<excludes>
<pattern>/static/*</pattern>
<pattern>/remote/*</pattern>
</excludes>
<!-- 定义装饰器要过滤的页面 -->
<decorator name="default" page="default.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
默认页面default.jsp:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>SiteMesh示例-<sitemesh:title/></title>
<sitemesh:head/>
</head>
<body>
<%@ include file="/layouts/header.jsp"%>
<div id="content">
<sitemesh:body/>
</div>
<%@ include file="/layouts/footer.jsp"%>
</body>
</html>
简单说明:
- 引入了SiteMesh标签。
- <sitemesh:title/> 会自动替换为被过滤页面的title。
- <sitemesh:head/> 会把被过滤页面head里面的东西(除了title)放在这个地方。
- <sitemesh:body/> 被过滤的页面body里面的内容放在这里。
- 头部引入js和css,都可以在其他重用。
<%@ page contentType="text/html;charset=UTF-8" %><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><meta name="author" content="http://jeesite.com/"/>
<meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=8,IE=9,IE=10" />
<meta http-equiv="Expires" content="0"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Cache-Control" content="no-store">
<script src="${ctxStatic}/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
<link href="${ctxStatic}/bootstrap/2.3.1/css_${not empty cookie.theme.value ? cookie.theme.value : 'cerulean'}/bootstrap.min.css" type="text/css" rel="stylesheet" />
<script src="${ctxStatic}/bootstrap/2.3.1/js/bootstrap.min.js" type="text/javascript"></script>
<link href="${ctxStatic}/bootstrap/2.3.1/awesome/font-awesome.min.css" type="text/css" rel="stylesheet" />
<!--[if lte IE 7]><link href="${ctxStatic}/bootstrap/2.3.1/awesome/font-awesome-ie7.min.css" type="text/css" rel="stylesheet" /><![endif]-->
<!--[if lte IE 6]><link href="${ctxStatic}/bootstrap/bsie/css/bootstrap-ie6.min.css" type="text/css" rel="stylesheet" />
<script src="${ctxStatic}/bootstrap/bsie/js/bootstrap-ie.min.js" type="text/javascript"></script><![endif]-->
<link href="${ctxStatic}/jquery-select2/3.4/select2.min.css" rel="stylesheet" />
<script src="${ctxStatic}/jquery-select2/3.4/select2.min.js" type="text/javascript"></script>
<link href="${ctxStatic}/jquery-validation/1.11.0/jquery.validate.min.css" type="text/css" rel="stylesheet" />
<script src="${ctxStatic}/jquery-validation/1.11.0/jquery.validate.min.js" type="text/javascript"></script>
<link href="${ctxStatic}/jquery-jbox/2.3/Skins/Bootstrap/jbox.min.css" rel="stylesheet" />
<script src="${ctxStatic}/jquery-jbox/2.3/jquery.jBox-2.3.min.js" type="text/javascript"></script>
<script src="${ctxStatic}/My97DatePicker/WdatePicker.js" type="text/javascript"></script>
<script src="${ctxStatic}/common/mustache.min.js" type="text/javascript"></script>
<link href="${ctxStatic}/common/jeesite.css" type="text/css" rel="stylesheet" />
<script src="${ctxStatic}/common/jeesite.js" type="text/javascript"></script>
<script type="text/javascript">var ctx = '${ctx}', ctxStatic='${ctxStatic}';</script>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>有人拦截我吗?</title>
</head>
<body>
有人拦截我吗?
</body>
</html>
sitemesh 2.4 装饰器学习相关推荐
- python 函数装饰器学习
如果看<Python 核心编程>上的讲解还是不太清楚,我建议看这个链接: Python装饰器学习 看完之后,这里有一些总结: 其实总体说起来,装饰器其实也就是一个**函数**,一个用来** ...
- Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示例1 ...
- python装饰器教学_Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...
- 学习python装饰器_Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...
- Python装饰器学习笔记
Python装饰器 文章目录 Python装饰器 基本概念 从零开始的逐步分析 修饰后的问题 向被包装后的函数传递参数 使用场景:stdout日志 接受参数的装饰器 作为一个类的装饰器 总结 学习资料 ...
- Python装饰器学习笔记 1
前言 最近跟着<流畅的Python>和<Python Cookbook>学习,看到装饰器部分,有些头大 倒不是因为概念难以理解,而是书和网上文章中有些地方有些矛盾之处 在简单学 ...
- python装饰器学习
装饰器 要学会装饰器,必须首先知道什么是闭包. 闭包: 在函数中提出的概念 就是内层函数对外层函数(非全局变量的运用)并且返回值是内部函数的引用. 格式: - def 外部函数:def内部函数:ret ...
- Python 装饰器学习以及实际使用场景实践
前言 前几天在看Flask框架,对于非常神奇的@语法,不是非常的理解,回来补装饰器的功课.阅读很多的关于装饰器的文章,自己整理一下,适合自己的思路的方法和例子,与大家分享. app = Flask(_ ...
- Python装饰器学习记录.
装饰器 Python函数基础 python中万物皆对象,看一个实例: 这里需要注意,单纯地函数名和函数名加括号是两种概念,前者表示该函数定义本身,而后者表示函数执行,实际上是函数的执行结果. 函数中 ...
- python之设计模式的装饰器9步学习
在继承的基础上增加新功能,重载,重写区别 装饰器: 函数a说,我是装饰器啊,其他哪个函数顶着我,我就吃了谁,然后吐出来我的和你的返回结果 testng的UI自动化,@beforetest,@befor ...
最新文章
- android系统短信库的一些用法
- 参加Java培训需要注意什么
- cocos对象池的使用
- mybaits二十四:缓存原理示意图
- pcb入门之新建工程
- 华硕路由 ac ax_WiFi 6 路由好在哪里,看看华硕AX路由推荐清单吧
- [JavaWeb-CSS]CSS扩展选择器
- 关于知识图谱,我们接下来该研究什么?斯坦福教授们给出了答案
- Docker的基本使用(部署python项目)+两个奇技淫巧,将 Docker 镜像体积减小 99%
- 吐血整理全网最全Spring面试题之高级篇(一)(共25题,附超详细解答)
- iptables学习笔记:端口转发之“外网访问内网”
- 交换机接口用了那几根线_交换机接口知识大全!网络从业者必懂!
- SharePoint自动化系列——通过Coded UI录制脚本自动化创建SharePoint Designer Reusable Workflow...
- 链表相关的面试题型总结
- python实战篇(七)---一寸照换背景
- linux硬盘异响,完美解决Ubuntu Linux关机异响[SATA硬盘]
- 复合索引的底层数据结构——最左原则
- 【慕课网】前端零基础入门---步骤一:页面结构层HTML---03-HTML表单
- python词云生成与设计实现_python简单词云生成
- 联想小新air13pro重装系统_联想小新Air 13怎么装win10系统|联想小新Air 13用u盘重装win10系统教程-系统城...