洗心革面 重新学习JSP! ----之四:定制标记(1)
2008-01-14 21:31
405 查看
在编写定制标记之前,先说说标记文件。
在JSP2.0之前,部署被包含文件没有标准可依,可以把所包含的部分放在Web应用的任何位置,如果JSP中有一大堆<jsp:include><c:import>标记,这样的JSP读起来很费劲。 在JSP2.0以后,我们可以用标记文件来直接表明要引入的是什么,如<my:nav> <my:header>等,这样你就直到这些JSP片段被放在哪里,使JSP页面一目了然。
标记文件,很像include,但比include更好!可以把标记文件看做一种轻型的定制标记。
如何写标记文件:
1.取一个被包含的文件,如Header.jsp,把后缀改成.tag
2.把该tag文件放在WEB-INF目录一个名为tags的文件夹下。
3.在JSP中放入一个taglib指令,并调用这个标记。
部分代码:
======== Header.tag===========:
<img src="images/logo.jpg">Welcome to chayatou's blog<br>
======== index.jsp===========:
<%...@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--声明标记文件库位置 -->
<%...@ taglib prefix="my" tagdir="/WEB-INF/tags"%>
<html>
<head>
<title>chayatou's blog </title>
</head>
<body>
<!--调用标记文件-->
<my:Header />
<!--调用结束 -->
Sorry, the main content of this blog is now rebuilding..<br>
Thank you for visiting,Bye~~
</body>
</html>
以上是最简单的标记文件,不需要TLD,不需要任何说明,就可以在页面调用。
下面是带有参数的标记文件写法:
1. 编写tag文件,把需要传入的标记属性用<%@ attribute%>指令声明出来。
2.在JSP文件中使用该TAG,属性的传入方法与JSTL一样:
< uri : tagname attribute1=" " attribute2=" " ... />
对Header.tag的修改:
======== Header.tag===========:
<!-- 声明该tag有一个名为slogn的属性,且必须指定属性值 -->
<%...@ attribute name="slogn" required="true" rtexprvalue="true"%>
<img src="images/logo.jpg">
${slogn}
======== index.jsp===========:
<%...@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--声明标记文件位置 -->
<%...@ taglib prefix="my" tagdir="/WEB-INF/tags"%>
<html>
<head>
<title>chayatou's blog </title>
</head>
<body>
<!--调用标记文件-->
<my:Header slogn="Welcome to chayatou's blog"/>
<!--调用结束 -->
Sorry, the main content of this blog is now rebuilding..<br>
Thank you for visiting,Bye~~
</body>
</html>
如果require=true,但是在用的时候没有指定属性值,页面会报错哦~~
rtexprvalue是标记该属性是否可以是表达式。当为true时,如果我这样调用:
<my:Header slogn="${2*3}"/>
那么页面上显示的是6
如果属性值很大,比如是一段文字,把这段文字放在属性值中就太丑陋了。。所以,可以把这些内容放在标记的体中(也就是<tag>与</tag>之间),然后作为一个属性使用:
======== Header.tag===========:
<%@ tag body-content="tagdependent" %>
<img src="images/logo.jpg">
<jsp:doBody />
======== index.jsp===========:
<my:Header>
Welcome to chayatou's blog
</my:Header>
<jsp:doBody />是指,如果有页面调用该标记,则取出标记的内容(也就是标记“体”)放在这里。
标记体也可以有多种类型,用body-content指定。在上面的例子中,标记体被处理成纯文本(<%@ tag body-content="tagdependent"%>)。标记体还可以被处理成scriptless和empty。scriptless表示该标记体绝对不能出现脚本(是指<%%>,<%=%>,<%!%>)。而empty表示该标记体必须为空,不然会报500错误。
实际上,标记文件体中绝对不能有脚本(但是可以有EL),用于简单替代include还可以.,如果要更复杂的标记(如调用某个JAVA类提供的方法...),只有自己定制咯。定制标记的详细内容见下一篇《洗心革面 重新学习JSP! ----之四:定制标记(2)》.
-----------未完
待续------------------
在JSP2.0之前,部署被包含文件没有标准可依,可以把所包含的部分放在Web应用的任何位置,如果JSP中有一大堆<jsp:include><c:import>标记,这样的JSP读起来很费劲。 在JSP2.0以后,我们可以用标记文件来直接表明要引入的是什么,如<my:nav> <my:header>等,这样你就直到这些JSP片段被放在哪里,使JSP页面一目了然。
标记文件,很像include,但比include更好!可以把标记文件看做一种轻型的定制标记。
如何写标记文件:
1.取一个被包含的文件,如Header.jsp,把后缀改成.tag
2.把该tag文件放在WEB-INF目录一个名为tags的文件夹下。
3.在JSP中放入一个taglib指令,并调用这个标记。
部分代码:
======== Header.tag===========:
<img src="images/logo.jpg">Welcome to chayatou's blog<br>
======== index.jsp===========:
<%...@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--声明标记文件库位置 -->
<%...@ taglib prefix="my" tagdir="/WEB-INF/tags"%>
<html>
<head>
<title>chayatou's blog </title>
</head>
<body>
<!--调用标记文件-->
<my:Header />
<!--调用结束 -->
Sorry, the main content of this blog is now rebuilding..<br>
Thank you for visiting,Bye~~
</body>
</html>
以上是最简单的标记文件,不需要TLD,不需要任何说明,就可以在页面调用。
下面是带有参数的标记文件写法:
1. 编写tag文件,把需要传入的标记属性用<%@ attribute%>指令声明出来。
2.在JSP文件中使用该TAG,属性的传入方法与JSTL一样:
< uri : tagname attribute1=" " attribute2=" " ... />
对Header.tag的修改:
======== Header.tag===========:
<!-- 声明该tag有一个名为slogn的属性,且必须指定属性值 -->
<%...@ attribute name="slogn" required="true" rtexprvalue="true"%>
<img src="images/logo.jpg">
${slogn}
======== index.jsp===========:
<%...@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--声明标记文件位置 -->
<%...@ taglib prefix="my" tagdir="/WEB-INF/tags"%>
<html>
<head>
<title>chayatou's blog </title>
</head>
<body>
<!--调用标记文件-->
<my:Header slogn="Welcome to chayatou's blog"/>
<!--调用结束 -->
Sorry, the main content of this blog is now rebuilding..<br>
Thank you for visiting,Bye~~
</body>
</html>
如果require=true,但是在用的时候没有指定属性值,页面会报错哦~~
rtexprvalue是标记该属性是否可以是表达式。当为true时,如果我这样调用:
<my:Header slogn="${2*3}"/>
那么页面上显示的是6
如果属性值很大,比如是一段文字,把这段文字放在属性值中就太丑陋了。。所以,可以把这些内容放在标记的体中(也就是<tag>与</tag>之间),然后作为一个属性使用:
======== Header.tag===========:
<%@ tag body-content="tagdependent" %>
<img src="images/logo.jpg">
<jsp:doBody />
======== index.jsp===========:
<my:Header>
Welcome to chayatou's blog
</my:Header>
<jsp:doBody />是指,如果有页面调用该标记,则取出标记的内容(也就是标记“体”)放在这里。
标记体也可以有多种类型,用body-content指定。在上面的例子中,标记体被处理成纯文本(<%@ tag body-content="tagdependent"%>)。标记体还可以被处理成scriptless和empty。scriptless表示该标记体绝对不能出现脚本(是指<%%>,<%=%>,<%!%>)。而empty表示该标记体必须为空,不然会报500错误。
实际上,标记文件体中绝对不能有脚本(但是可以有EL),用于简单替代include还可以.,如果要更复杂的标记(如调用某个JAVA类提供的方法...),只有自己定制咯。定制标记的详细内容见下一篇《洗心革面 重新学习JSP! ----之四:定制标记(2)》.
-----------未完
待续------------------
相关文章推荐
- 洗心革面 重新学习JSP! ----之二:过滤器(3)
- 洗心革面 重新学习JSP! ----之二:过滤器(1)
- 洗心革面 重新学习JSP! ----之三:MVC的控制器
- 洗心革面 重新学习JSP! ----之一:监听者
- 洗心革面 重新学习JSP! ----之二:过滤器(2)
- 和JSF一起使用JSTL和其它的JSP定制标记
- JSP定制标记——在JSP标记中自定义脚本编程变量
- Spring学习之使用标签来标记资源(@Component、@Repository、 @Service和@Controller)以及使用方式(包含如何在jsp中使用)
- 定制jsp标记(tag) [转]
- jsp定制标记?
- JSP定制标记——用“脚本编程变量”取代bean来进行遍历
- 《Head First Servlets & JSP》-10-定制标记开发
- JSP定制标记的基本概念和构成;tld的使用和其中的rtexprvalue使用
- JSP定制标记——通过pageContext访问Attribute值
- JSP标记学习笔记
- JSP 定制标记库开发示范
- jsp定制标记
- JSP标记学习笔记浅析
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
- Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)