jsp2.0+中的标签文件,JSP Fragment技术
来源:互联网 发布:商业摄影 知乎 编辑:程序博客网 时间:2024/06/10 03:13
刚进新公司不久,今天在看到项目中用到了.tag文件。刚开始我还以为这个是第三方类似freemarker的模板技术。问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术。以前做项目的时候从来没有用这样的方式,要公用就用用jsp中的include和jsp:include的方式。其实JSP Fragment也有include的作用,但是它更像第三方sitemesh技术,用于网页布局和修饰,可以将网页的内容和页面的结构分离,从而达到页面结构共享的目的。下面的例子来说明怎么使用jsp fragment。
官方E文参考文档http://docs.oracle.com/javaee/5/tutorial/doc/bnama.html
DEMO
1 首先在项目的WEB-INF/tags文件中,新建如下内容的tpl.tag文件
<%@ tag language="java" pageEncoding="UTF-8"%><%@ attribute name="title"%><%@ attribute name="tpl1" fragment="true" required="true"%><%@ attribute name="tpl2" fragment="true" required="true"%><%@ attribute name="tpl3" fragment="true" required="true"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>${title}</title><style type="text/css"> #div1,#div2,#div3{ width:90%; margin:10px auto; border:10px solid red; }</style></head><body> <h1>jsp2.0标签文件</h1> <div id="div1"> <jsp:invoke fragment="tpl1"/> </div> <div id="div2"> <jsp:invoke fragment="tpl2"/> </div> <div id="div3"> <jsp:invoke fragment="tpl3"/> </div> <h2>jsp2.0 fragment技术</h2></body></html>
2 创建index.jsp 文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="xjo" tagdir="/WEB-INF/tags"%><xjo:tpl title="jsp标签文件的使用"><jsp:attribute name="tpl1"><h1>tpl1中的内容</h1></jsp:attribute><jsp:attribute name="tpl2"><h1>tpl2中的内容</h1></jsp:attribute><jsp:attribute name="tpl3"><h1>tpl3中的内容</h1></jsp:attribute></xjo:tpl>
3 访问index.jsp页面,效果如下
具体说明
标签文件说明
标签文件必须存放在WEB-INF目录下,最好是在WEB-INF目录下再新建一个tags目录,然后将所有的标签文件都存放在这里。标签文件可以使用所有的JSP元素,但是不能使用page指令,标签文件多个一个tag指令
标签文件中隐藏对象
标签文件可以使用隐藏对象:request、response、jspContext、session、application、out、config,其中jspContext隐含对象的类型为javax.servlet.jsp.JspContext,就相当于JSP页面的pageContext隐藏对象一样
标签文件中指令
标签文件中可以使用的主要指令:tag、include、attribute、variable。
tag指令
Tag文件中的tag指令类似于JSP文件中的page指令。Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理和表示。tag指令的语法如下:
<%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>
在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:
<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性 值"%>
<%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>
在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:
<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性 值"%>
……
<%@ tag 属性n="属性值"%>
<%@ tag 属性n="属性值"%>
<%@ tag language="java" pageEncoding="" body-content="scriptless|empty|tagdependent" deferredSyntaxAllowedAsLiteral="false" description="" display-name="" dynamic-attributes="" example="" import="" isELIgnored="false" large-icon="" small-icon="" trimDirectiveWhitespaces="false"%>
include 指令
和jsp中的include指定一样,引入外部文件
<%@include file="" %>
attribute指令
在Tag文件中通过使用attribute指令,可以动态地向该Tag文件传递需要的字符串数据
<%@ attribute name="" description="" fragment="false" required="false" rtexprvalue="true" type=""%>
name表示属性的名字;
required表示是否为必要,默认为false;
rtexprvalue表示属性值是否可以为run-time表达式。如为true,表示属性可用动态的方式来指定,如为false,则一定要用静态的方式来指定属性值;
type表示这个属性的类型,默认值为java.lang.String;
description用来说明此属性的相关信息
fragment 表示是否为片段 默认false
variable指令
Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面
<%@ variable alias="" declare="true" description="" name-from-attribute="" name-given="" scope="NESTED|AT_BEGIN|AT_END"%>
name-given表示直接指定变量的名称;
name-from-attribute表示以自定义标签的某个属性值为变量名称;
alias表示声明一个局部范围属性,用来接收变量的值;
variable-class表示变量的类名称,默认值为java.lang.String;
declare表示此变量是否声明默认值为true;
scope表示此变量的范围,范围是:AT_BEGIN、AT_END和NESTED,默认值为NESTED;
description用来说明此变量的相关信息
标签文件中的jsp:invoke
<jsp:invoke fragment="" var="" scope="page|request|session|application" varReader=""/>
fragment - 要片段名.
var - 给出变量名, 把片段经过 jsp 容器计算过之后的结果作为字符串保存.
varReader - 同上, 不过将结果作为一个 java.io.Reader 保存.
scope - 作用域
var - 给出变量名, 把片段经过 jsp 容器计算过之后的结果作为字符串保存.
varReader - 同上, 不过将结果作为一个 java.io.Reader 保存.
scope - 作用域
未完待续.......................
1 0
- jsp2.0+中的标签文件,JSP Fragment技术
- JSP2自定义标签库技术
- 自定义JSP标签的简单使用(JSP2.0)
- JSP2.0自定义标签
- JSP2.0自定义标签
- 《JSP2.0 技术手册》读书笔记六-JSP语法与EL
- JSP2.0 技术手册
- JSP/Servlet-----10、JSP2的自定义标签
- JSP2.0中的JSTL
- jsp相关-jsp2.0表达式
- 创建JSP2.0标记文件
- JSP学习笔记(六):自定义标签-JSP2.x
- Jsp2.0新增标签制作方法-TagFile
- JBuilder2005 下 jsp2.0 自定义标签
- jsp2.0标签--------无参数输出
- JSP2.0 tags自定义标签学习笔记
- jsp2.0自定义标签(二)
- jsp2.0自定义标签(一)
- 字符串函数2
- Sizeof与Strlen的区别与联系 -
- crtl+z、crtl+d、Windows和UNIX/Linux流/文件结束标志剖析
- 如何利用Chrome devTools调试android手机上的web网站?
- eclipse中的常用方法
- jsp2.0+中的标签文件,JSP Fragment技术
- 第一篇博客
- hibernate的session机制初探
- Minimum Depth of Binary Tree 二叉树最小深度
- [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
- 制作 Mavericks 10.9安装U盘
- Code Review代码审查的思路
- hdu oj 1242 Rescue
- hadoop分析 - HDFS上传文件