Java SiteMesh新手学习教程代码案例

官网:http://wiki.sitemesh.org/wiki/display/sitemesh/Home

也可以下载官方的示例Demo参考和学习,这里我只做一个简单示例,演示最基本的使用

首先就是加Jar包,我用的是sitemesh-2.4.2.jar,然后在web.xml中增加过滤器:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <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>
</web-app> 

增加SiteMesh配置文件decorators.xml,该文件放在WEB-INF下:

<?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>

在根目录下新建文件夹layouts,然后新建三个JSP,一个是默认,一个输出头,一个输出尾,默认页面引用其他两个。
默认页面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,都可以在其他重用。

头页面header.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

菜单信息

尾页面footer.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
版权信息

在根下新建一个文件夹static,用于实验是否拦截,在该文件夹下新建JSP:

<%@ 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%>" rel="external nofollow" >
  <title>有人拦截我吗?</title>
 </head>
 <body>
  有人拦截我吗?
 </body>
</html> 

访问:http://127.0.0.1:8080/sitemesh/index.jsp这个会拦截

访问:http://127.0.0.1:8080/sitemesh/static/index.jsp则不会拦截处理

根据页面看实际效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • numpy中的meshgrid函数的使用

    numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html meshgrid(*xi, **kwargs) 功能:从一个坐标向量中返回一个坐标矩阵 参数: x1,x2...,xn:数组,一维的数组代表网格的坐标. indexing:{'xy','ij'},笛卡尔坐标'xy'或矩阵'ij'下标作为输出,默认的是笛卡尔坐标. sparse:bool类型,如果为True,

  • Unity3D实现NavMesh导航网格寻路

    NavMesh(导航网格)是3D游戏世界中用于动态物体实现自动寻路的技术. NavMesh系统是人工智能的一种,它使用一个添加在游戏对象上或者作为游戏对象父物体的名为"导航网格代理"(NavMeshAgent)的组件来控制该游戏对象寻找能够通过的路径,并最终到达目的地. 自动寻路还可以实现绕过障碍.爬上与跳下障碍物.按类别寻找属于自己的道路.动态设置道路中的障碍等技术. 下面用一个简单的Demo来介绍NavMesh的应用: 1.在Scene场景中添加Cube设置场景,如图所示: 2.选

  • Three.js中网格对象MESH的属性与方法详解

    前言 本文主要给大家介绍了关于Three.js网格对象MESH的属性与方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 创建一个网格需要一个几何体,以及一个或多个材质.当网格创建好之后,我们就可以将它添加到场景中并进行渲染.网格对象提供了几个属性和方法用于改变它在场景中的位置和显示效果. 如下: 还有一个属性就是visible属性,默认为true,如果设置为false,THREE.Mesh将不渲染到场景中. mesh对象的前三个属性position,rotation和scal

  • jsp中sitemesh修改tagRule技术分享

    sitemesh默认提供了一些常用的rule 可以看到其实可以选择 /** * Extracts the contents of any elements that look like * <code><content tag='foo'>...</content></code> and write the contents * to a page property (page.foo). * * <p>This is a cheap and c

  • 详解numpy.meshgrid()方法使用

    一句话解释numpy.meshgrid()--生成网格点坐标矩阵. 关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼? 看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵. 再看个简单例子 A,B,C,D,E,F是6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢? 答案如下: 这就是坐标矩阵--横坐标矩阵XXX中的每个元素,与纵坐标矩阵YYY中对应位置元素,共同构成一个点的完整坐标.如B点坐标 下面可以自己用matplotli

  • numpy.meshgrid()理解(小结)

    本文的目的是记录meshgrid()的理解过程: step1. 通过一个示例引入创建网格点矩阵; step2. 基于步骤1,说明meshgrid()的作用; step3. 详细解读meshgrid()的官网定义; 说明:step1和2 的数据都是基于笛卡尔坐标系的矩阵,目的是为了方便讨论. step1. 通过一个示例引入创建网格点矩阵; 示例1,创建一个2行3列的网格点矩阵. #!/usr/bin/env python3 #-*- coding:utf-8 -*- ###############

  • Java SiteMesh新手学习教程代码案例

    官网:http://wiki.sitemesh.org/wiki/display/sitemesh/Home 也可以下载官方的示例Demo参考和学习,这里我只做一个简单示例,演示最基本的使用 首先就是加Jar包,我用的是sitemesh-2.4.2.jar,然后在web.xml中增加过滤器: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns=&

  • Java map的学习及代码示例

    前言 最近正在做的高校云平台项目中接触Map比较多,关于map的使用不是很熟悉,所以在此将map的几个方法再次学习下. Map与Collection 提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我们经常用的list和set子接口:而Map是与Collection处于平级的地位:Collection中存储的是一组对象,而Map存储的是一个键值对(key/value). Map java为数据结构中的映射定义了一个

  • mybatis快速入门学习教程新手注意问题小结

    什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 ses

  • Java正则表达式学习教程

    本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式. 什么是正则表达式? 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别.Java正则表达式和Perl的是最为相似的. Java正则表达式的类在 java.util.regex 包中,包括三个类:Pattern,Matcher 和 PatternSyntaxException. Pattern对象是正则表达式的已编译版本.他没有任何公共构造器,我们通

  • dubbo新手学习之事件通知实践教程

    前言 今天主要给大家分享一下dubbo的事件通知机制. 先看下dubbo中文官网的示例解释:事件通知. 在调用之前.调用之后.出现异常时,会触发 oninvoke.onreturn.onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法. 实践 溪源目的是快速学习dubbo的相关机制,故定义的相同的接口和方法,采用分包的方式解耦合,便于后期维护. 先看服务接口 dubbo-demo-interface 目录如图 ** UserNotifyService ** /** * @auth

  • Java学习教程之定时任务全家桶

    定时任务应用非常广泛,Java提供的现有解决方案有很多. 本次主要讲schedule.quartz.xxl-job.shedlock等相关的代码实践. 一.SpringBoot使用Schedule 核心代码: @Component public class ScheduleTask { private Logger logger = LoggerFactory.getLogger(ScheduleTask.class); @Scheduled(cron = "0/1 * * * * ? &quo

  • Java新手学习之IO流的简单使用

    目录 前言 IO流 1.基本概念 2.IO流分类 3.File 3.1File基本概念 3.2创建文本 3.3创建目录 3.4判断.读取和删除 4.字节流 4.1字节流的抽象基类 4.2字节流写数据 4.3字节流读数据 5.字符流 5.1由来 5.2字符流写数据 5.3字符流读数据 6.IO流小结 7.特殊操作流 7.1标准输入输出流 7.2字节打印流 7.3对象序列化流和对象反序列化流 7.4Properties集合 8.总结 前言 在我们平时使用图形化界面的时候,会发现来建立一个文件夹或者一

  • Java Agent入门学习之动态修改代码

    前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义),进行AOP. 目标: 为所有添加@ToString注解的类实现默认的toString方法 需要两个程序,一个是用来测试的程序,一个agent用于修改代码. 1. 测试程序 被测试的程序包括: - ToString.Java - Foo.java - Main.java 具体代码如下: ToStrin

  • 新手学习JQuery基本操作和使用案例解析

    jQuery是一个快速.简洁的JavaScript框架,本质上就是一些js文件,封装了js的原生代码. 一.jQuery的DOM操作 1. 内容操作 1. html(): 获取/设置元素的标签体内容 <a><font>内容</font></a> --> <font>内容</font> 2. text(): 获取/设置元素的标签体纯文本内容 <a><font>内容</font></a>

  • Java MeteoInfo解析与绘图代码教程详解

    最近太忙了,终于有时间继续写了,上文说到了基本上的绘图方法,但缺少色阶呈现,一般图叠加着地图上,后端不需要管色阶,但也要注意web页面色阶和我们的生成色阶一定要对的上 对于后端导出图片的话,就需要添加色阶了,这一文很简单,就涉及色阶,名称,网格刻度线 顺便对代码我进行了优化,看起来更直接 MeteoDataInfo meteoDataInfo = new MeteoDataInfo(); meteoDataInfo.openMICAPSData("D:\\解析数据\\cldas\\cldas\\

随机推荐