- 浏览: 1024244 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (445)
- Java (22)
- J2EE (18)
- Flex (102)
- Flex-blazeds (1)
- Flex-FABridge (2)
- Flex4 (3)
- CheckStyle (2)
- PowerDesigner (0)
- POI (2)
- Java2Word (2)
- 杂项 (15)
- 日记 (3)
- 数据库-oracle (41)
- 数据库-SQLServer (7)
- 中间件 (1)
- 英语 (8)
- C# (43)
- ASP.net (72)
- ASP.net MVC (28)
- 微软-Entity Framework (19)
- JavaScript (22)
- JQuery (31)
- EasyUI (3)
- VS2010 (4)
- CVS (1)
- Tomcat (3)
- Linux (1)
- 遗留问题 (1)
- iphone (1)
- MAC (0)
- 系统 (2)
- Web Service (4)
- Cache Manager (1)
- PMP (1)
- WCF (10)
- BootstrapJs (1)
- Web API (6)
- Go语言 (0)
- 网络协议 (2)
- Redis (10)
- RabbitMQ (10)
- Git (3)
- Kafka (5)
- ELK (5)
- Nginx (3)
- 测试 (2)
最新评论
-
ygm0720:
Table行拖拽自己实现 -
程乐平:
Flex4开发视频教程(27集)下载http://bbs.it ...
Flex4教程 -
liuweihug:
Jquery+asp.net 后台数据传到前台js进行解析的办 ...
AJAX $.toJSON的用法或把数组转换成json类型 -
weilikk:
谢谢谢谢!!
javascript IE下不能用 trim函数解决方法 -
gxz1989611:
vigiles 写道请问楼主:[Fault] exceptio ...
blazeds推送技术至Flex
定义:自定义标签是一种非常优秀的组件技术。通过使用自定义标签库,可以在简单的标签中封装复杂的
功能;
理解:其将JSP页面中的(复杂、重复并且格式统一的)内容封装,使用一个标签代替;
标签对应一个类,在类中有固定的方法,这些方法在编译JSP页面中的自定义标签时,被调用。方法内输出被封装的内容;
标签——>JAVA类——>类方法输出页面内容
自定义标签的分类:
1.简单标签;
2.带属性的标签;
3.带标签体的标签;
4.可以被script使用的标签;
实现自定义标签的步骤
1.开发自定义标签处理类;
2.建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签;
3.在web.xml文件中增加自定义标签的定义;
4.在JSP文件中使用自定义标签;
一;开发自定义标签类
类名 | 方法名 | 作用 | 备用 |
TagSupport |
doEndTag() destroy() |
该方法在标签结束生成页面内容 销毁标签时调用的方法 |
简单标签 带属性的标签 |
BodyTagSupport |
doStartTag() doAfterBody() doEndTag()
|
开始处理方法时,调用该方法 每次标签体处理完后调用该方法 标签体结束时调用该方法 |
带标签体的标签 |
2.2 标签流向控制
返回值 |
意义 |
SKIP_BODY |
表示不用处理标签体,直接调用 doEndTag() 方法。 |
SKIP_PAGE |
忽略标签后面的 JSP 内容。 |
EVAL_PAGE |
处理标签后,继续处理 JSP 后面的内容。 |
EVAL_BODY_BUFFERED |
表示需要处理标签体。 |
EVAL_BODY_INCLUDE |
表示需要处理标签体 , 但绕过 setBodyContent() 和 doInitBody() 方法 |
EVAL_BODY_AGAIN |
对标签体循环处理。 |
二;建立TLD文件
TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是.tld,每个TLD文件对应一个标签库,一个标签库对应多个标签;
<taglib>
定义标签库版本
<tlib-version>1.0</tlib-version>
定义JSP版本
<jsp-version>1.2</jsp-version>
配置第一个标签
<short-name>mytag</short-name>
<tag>
配置标签名
<name>helloworld</name>
确定标签的处理类
<tag-class>mytag.HelloWorldTag</tag-class>
确定标签体,标签体为空
<body-content>empty</body-content>
</tag>
</taglib>
三;在web.xml文件中增加标签库定义
<jsp-config>
定义标签库
<taglib>
确定标签库的URL
<taglib-uri>/helloworld</taglib-uri>
确定标签库定义文件的位置
<taglib-location>/WEB-INF/helloworld.tld</taglib-location>
</taglib>
</jsp-config>
四:使用标签库
1.导入标签库:使用taglib编译指令导入标签
<%@ taglib uri="/helloworld" prefix="mytag"%>
2.使用标签:在JSP页面中使用自定义标签
<mytag:helloworld></mytag:helloworld>
---------------------------------------------------------------------------------------
案例
案例目标
配置三种标签
1.简单
2.带属性
3.带标签体
一;标签类的实现
1.简单标签
package mytag;
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
/**
* 简单标签实体类
*/
public class HelloWorldTag extends TagSupport {
/**
* 标签开始 执行语句
*/
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;
}
/**
* 标签结束 执行语句
*/
@Override
public int doEndTag() throws JspException {
try{
pageContext.getOut().write("Hello world");
}catch(Exception ex){
throw new JspTagException("错误");
}
return EVAL_PAGE;
}
}
2.带属性标签类
package mytag;
import java.io.Writer;
import java.util.Arrays;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import entity.Peron;
/**
* 带属性的标签
*/
public class QueryTag extends TagSupport {
// 标签的属性
private int rows;
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
/**
* 标签处理
*/
@Override
public int doEndTag() throws JspException {
try {
// 生成假数据对象
Peron p1 = new Peron("no1", 10), p2 = new Peron("no2", 13), p3 = new Peron(
"no3", 15);
// 生成假集合
List<Peron> PL = Arrays.asList(p1, p2, p3);
// 获取页面输出流
Writer out = pageContext.getOut();
// 输出
out.write("<table>");
Peron p = null;
for (int i = 0;i < rows;i++) {
p = PL.get(i);
out.write("<tr>");
out.write("<td>");
out.write(p.getName());
out.write("</td>");
out.write("<td>");
out.write(p.getAge());
out.write("</td>");
out.write("</tr>");
}
out.write("</table>");
} catch (Exception ex) {
System.out.println("标签处理产生异常");
}
return EVAL_PAGE;
}
}
3.带标签体的标签
1.外部标签类
package mytag;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* 带标签体的标签
* 完成迭代功能
*/
public class MyiteratorTag extends BodyTagSupport{
//标签需要迭代的集合对象名
//从页面内传递一个值,该值代表页面page内的一个集合的名称
private String bean;
//集合对象的元素下标值
private String item;
//集合当前索引
private int i = 0;
//集合大小
private int size ;
//?
private List<String> itemList;
public String getBean() {
return bean;
}
public void setBean(String bean) {
this.bean = bean;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
/**
* 开始处理标签时,调用该方法
*/
@Override
public int doStartTag() throws JspException {
try{
pageContext.getOut().write("进入MyiteratorTag-doStartTag方法");
}catch(Exception ex){}
//从page范围中获取List对象
itemList = (List<String>)pageContext.getAttribute(bean);
//获取集合长度
size = itemList.size();
//将集合当前索引的值放在page范围的item变量中
pageContext.setAttribute(item, itemList.get(i));
//返回值为EVAL_BODY_BUFFERED;表明需要计算标签体
return EVAL_BODY_BUFFERED;
}
/**
* 每次标签体处理完后调用该方法
*
*/
@Override
public int doAfterBody() throws JspException {
try{
pageContext.getOut().write("进入MyiteratorTag-doAfterbody方法");
}catch(Exception ex){}
//移动List对象的索引位置
i++;
//如果索引已经超过集合的长度
if(i>=size){
//索引归零
i=0;
//不在计算标签体
return SKIP_BODY;
}
//将集合的当前元素值放入page范围的item属性中
pageContext.setAttribute(item, itemList.get(i));
//循环计算标签体
return EVAL_BODY_AGAIN;
}
/**
* 标签体结束时调用该方法
*/
@Override
public int doEndTag() throws JspException {
try{
pageContext.getOut().write("进入MyiteratorTag-doEndTag方法");
//输出标签体内容
bodyContent.writeOut(pageContext.getOut());
}catch(Exception ex){
throw new JspException("错误");
}
return super.doEndTag();
}
}
2.内部标签类
package mytag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 嵌套的内部标签
*/
public class WritorTag extends TagSupport {
//item属性 该标签从page中查找item的属性,并输出属性值
private String item;
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
/**
* 开始处理标签时的调用方法
*/
@Override
public int doStartTag() throws JspException {
try{
pageContext.getOut().write((String)pageContext.getAttribute("item"));
}catch(Exception ex){
throw new JspException("错误");
}
return super.doStartTag();
}
}
二。标签体的TLD文件配置
1.简单标签
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd
">
<taglib>
<!-- 定义标签库版本 -->
<tlib-version>1.0</tlib-version>
<!-- 定义JSP版本 -->
<jsp-version>1.2</jsp-version>
<!-- 定义标签库名称 -->
<short-name>mytag</short-name>
<!-- 定义第一个标签 -->
<tag>
<!-- 配置标签名 -->
<name>helloworld</name>
<!-- 确定实现标签的标签类 -->
<tag-class>mytag.HelloWorldTag</tag-class>
<!-- 确定标签的标签体,标签体为空 -->
<body-content>empty</body-content>
</tag>
</taglib>
2.带属性的标签
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd
">
<taglib>
<!-- 定义标签库版本 -->
<tlib-version>1.0</tlib-version>
<!-- 定义JSP版本 -->
<jsp-version>1.2</jsp-version>
<short-name>querytag</short-name>
<!-- 配置标签 -->
<tag>
<!-- 配置标签名称 -->
<name>query</name>
<!-- 配置标签实现类 -->
<tag-class>mytag.QueryTag</tag-class>
<!-- 指定标签体为空 -->
<body-content>empty</body-content>
<!-- 配置属性 -->
<attribute>
<name>rows</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3.带标签体的标签
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd
">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>iterator</short-name>
<!-- 配置迭代器标签 -->
<!-- 外部标签 -->
<tag>
<!-- 配置标签名 -->
<name>iterator</name>
<!-- 配置标签的实现类 -->
<tag-class>mytag.MyiteratorTag</tag-class>
<!-- 配置标签体 -->
<body-content>JSP</body-content>
<!-- 配置标签属性 -->
<attribute>
<name>bean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>item</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<!-- 配置输出标签 -->
<!-- 内部标签 -->
<tag>
<!-- 配置标签名 -->
<name>write</name>
<!-- 配置标签的实现类 -->
<tag-class>mytag.WritorTag</tag-class>
<!-- 配置标签内容 -->
<body-content>empty</body-content>
<!-- 配置标签属性 -->
<attribute>
<name>item</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
三。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
">
<jsp-config>
<taglib>
<!-- 配置标签的引用地址 JSP页面中引用时使用-->
<taglib-uri>/helloworld</taglib-uri>
<!-- 配置标签的TLD文件地址 -->
<taglib-location>/WEB-INF/helloworld.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/query</taglib-uri>
<taglib-location>/WEB-INF/query.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/iterator</taglib-uri>
<taglib-location>/WEB-INF/iterator.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
四:JSP调用
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK" import="java.util.*"%>
<%@ taglib uri="/helloworld" prefix="mytag"%>
<%@ taglib uri="/query" prefix="query"%>
<%@ taglib uri="/iterator" prefix="iter"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd
">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<mytag:helloworld></mytag:helloworld>
<query:query rows="3" />
<%
//创建输出对象
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
//将a放入 page 范围内
pageContext.setAttribute("a", a);
%>
<table>
<iter:iterator bean="a" item="item">
<tr>
<td>
<iter:write item="item"/>
</td>
</tr>
</iter:iterator>
</table>
</body>
</html>
发表评论
-
JSP/Servlet:Scripting Variable
2011-12-31 15:09 1438Scripting,Variable是用于自 ... -
写自定义标签时标记attribute里rtexprvalue的用法
2011-12-31 11:00 1143其实以前也有写过自定义标签, 但是没有注意到过<rtex ... -
Tomcat 连接池配置 - META-INF
2011-12-30 15:07 1785Tomcat 6.0连接池配置 1.Tomca ... -
jsp指示元素
2011-12-30 15:06 1456指示元素 指示元素的作用是:指示容器在将JSP翻译成serv ... -
jsp脚本元素
2011-12-30 15:06 3353元素与模板数据 JSP页面内容可以分为两种类型,一种是能够被 ... -
jsp行为元素
2011-12-28 14:03 1755行为元素 行为元素的作用:与指示元素不同,行为元素是与特定的 ... -
jsp 隐藏对象
2011-12-28 13:42 1669隐藏对象即不用声明该 ... -
jsp button onclick事件
2011-12-28 13:26 1599<input onclick="doc ... -
比较全面的taglib标签库介绍
2011-12-28 13:25 4563一、定义标签文件(web.xml) <taglib&g ... -
JDK7的推出,oracle独揽Java,是好是坏
2011-09-29 16:51 1462今天在CSDN看到JDK7也推出了lambda语法, 还有JD ... -
MyEclipse6.0下构建SSH冲突问题解决方案
2008-10-29 12:55 1764终于不再苦恼了,这几天在做SSH的加载,一直报一些莫名其妙的错 ... -
hibernate----Inverse 和 cascade区别(2)
2008-10-29 12:54 11211、到底在哪用cascade=&q ... -
hibernate----Inverse 和 cascade区别(1)
2008-10-29 12:54 1701Inverse 和 cascade的区别 实际上,他们是互不 ... -
教你如何写log4j
2008-10-29 12:52 1573在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件 ... -
Spring写log4j
2008-10-29 12:51 1338Spring中使用LOG4J 1.在web.xml中添加 ... -
在Java SE环境下使用JPA1.0(2)
2008-10-29 12:29 23162) 创建配置文件persistence.xml ... -
在Java SE环境下使用JPA1.0(1)
2008-10-29 12:27 2113一、搭建环境 1) 搭建数据库环境 1、安装数据库( ...
相关推荐
本实例将深入探讨如何实现一个简单的JSP自定义标签。 首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们...
**JSP自定义标签实例详解** 在Java服务器页面(JSP)开发中,自定义标签是一种强大的工具,它允许开发者创建可重用的组件,提高了代码的可读性和可维护性。本文将深入探讨JSP自定义标签的概念、实现过程以及实际...
五、自定义标签实例 一个简单的HelloWorld自定义标签可能如下: 1. 创建TLD文件(hello.tld): ```xml xsi:schemaLocation=...
综上所述,JSP自定义标签提供了一种强大的方式来组织和复用代码,而分页标签则是实际项目中常见的应用场景。结合Java反射机制,我们可以灵活地调用各种服务方法,实现复杂的功能,同时保持页面逻辑的清晰和简洁。...
### JSP自定义标签概述及实现 #### 一、引言 JSP (JavaServer Pages) 是一种基于Java技术的标准,用于开发动态Web应用程序。它允许开发者将Java代码嵌入到HTML页面中,从而实现动态内容的生成。为了提高代码的复用...
#### 三、创建JSP自定义标签实例:格式化数据 假设我们需要创建一个用于格式化日期的自定义标签。下面将详细介绍创建步骤: ##### 1. 定义标签库描述文件(TLD) 首先,我们需要定义一个标签库描述文件(TLD),...
本教程将深入探讨JSP自定义标签的使用,同时结合实例介绍分页和下拉框绑定值的封装。 一、JSP自定义标签基础 1. **定义标签库(Tag Library)**:自定义标签首先需要定义一个TLD(Tag Library Descriptor)文件,它...
本实例将带你深入理解JSP自定义标签的创建和使用。 首先,我们要了解自定义标签的结构。自定义标签通常由三部分组成:标签库描述文件(TLD)、标签处理类(Tag Handler)和JSP页面。TLD是XML格式的文件,用于定义...
为了运行和测试这个自定义标签实例,你需要将其部署到支持JSP的Web服务器(如Tomcat),然后通过浏览器访问`index.jsp`页面。如果一切配置正确,你应该能看到自定义标签按预期工作。 通过学习和实践这个JSP自定义...
以下是一个关于"jsp自定义标签简单实例"的详细说明。 1. **自定义标签概述** 自定义标签是JSP 1.2版本引入的新特性,它允许开发者创建符合XML语法规则的自定义标签库,这些标签库可以包含一系列具有特定功能的标签...
下面我们来实现一个非常简单的自定义标签,期望通过这个简单的实例引领各位进入自定义标签的领域。我们准备定义的这个自定义标签所实现的功能是在JSP页面中显示出版权信息,并且在以后的博文中,我们还会对它进行...
本资源“jsp自定义标签大全.rar”提供了一套全面的JSP自定义标签的实例和指南,旨在帮助开发者深入理解和应用这一特性。 **JSP自定义标签的基本概念** JSP自定义标签不同于标准动作标签(如<jsp:include>或<jsp:...
本DLC(Digital Learning Content,数字学习资源)将深入探讨如何创建和使用JSP自定义标签,并通过实例来帮助理解这一过程。 一、JSP自定义标签基础 1.1 JSP标准标签库(JSTL) 在自定义标签之前,我们需要了解...