一、自定义标签helloworld:

二、自定义有属性的标签:

HelloWorldTag.java:继承TagSupport:

 package com.java1234.tag;

 import java.io.IOException;

 import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; public class HelloWorldTag extends TagSupport{ private static final long serialVersionUID = 1L; private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int doStartTag() throws JspException {
JspWriter out=this.pageContext.getOut();
try {
out.println(name + "自定义标签你好!");
} catch (IOException e) {
e.printStackTrace();
}
return TagSupport.SKIP_BODY; // 直接结束标签
}
}

java1234.tld描述文件:存放在/WEB-INF/java1234.tld

tld文件:专门是用来识别标签;标签库描述文件;在jsp页面引入,找到标签处理类;

 <?xml version="1.0" encoding="UTF-8" ?>

 <taglib 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-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>java1234Tag</short-name> <tag>
<name>helloWorld</name>
<tag-class>com.java1234.tag.HelloWorldTag</tag-class>
<!-- 标签体 -->
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required> <!-- required true必须要写的属性 -->
<rtexprvalue>true</rtexprvalue> <!-- 是否支持el表达式 true支持 -->
</attribute>
</tag> </taglib>

helloWorldTag.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<java1234:helloWorld name="JspServlet屌炸天"/>
</body>
</html>

页面输出:

三、自定义有标签体的标签;

IterateTag.java:

 package com.java1234.tag;

 import java.util.Iterator;
import java.util.List; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport; public class IterateTag extends TagSupport{ private static final long serialVersionUID = 1L; private String var;
private String items;
private Iterator iter; public String getVar() {
return var;
} public void setVar(String var) {
this.var = var;
} public String getItems() {
return items;
} public void setItems(String items) {
this.items = items;
} public Iterator getIter() {
return iter;
} public void setIter(Iterator iter) {
this.iter = iter;
} @Override
public int doStartTag() throws JspException {
Object value=this.pageContext.getAttribute(items);
if(value!=null && value instanceof List){
this.iter=((List)value).iterator();
if(iter.hasNext()){
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_INCLUDE; //执行标签体
}else{
return TagSupport.SKIP_BODY; //退出标签执行
}
}else{
return TagSupport.SKIP_BODY; //退出标签执行
}
} //标签体执行完的操作
@Override
public int doAfterBody() throws JspException {
if(iter.hasNext()){
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_AGAIN; //再执行一次标签体
}else{
return TagSupport.SKIP_BODY; //退出标签体执行
}
}
}

标签库描述文件java1234.tld:

 <?xml version="1.0" encoding="UTF-8" ?>

 <taglib 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-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>java1234Tag</short-name> <!-- 定义items和var都是必须属性 -->
<tag>
<name>iterate</name>
<tag-class>com.java1234.tag.IterateTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

iterateTag.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
<!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=UTF-8">
<title>Insert title here</title>
<%
List people=new ArrayList();
people.add("王二小");
people.add("丝丝光");
people.add("草泥马");
pageContext.setAttribute("people", people);
%>
</head>
<body>
<java1234:iterate items="people" var="p">
<h2>${p }</h2>
</java1234:iterate>
</body>
</html>

访问,页面展示:

四、简单标签:

IterateSimpleTag.java:

 package com.java1234.tag;

 import java.io.IOException;
import java.util.Iterator;
import java.util.List; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.TagSupport; public class IterateSimpleTag extends SimpleTagSupport{ private static final long serialVersionUID = 1L; private String var;
private String items; public String getVar() {
return var;
} public void setVar(String var) {
this.var = var;
} public String getItems() {
return items;
} public void setItems(String items) {
this.items = items;
} @Override
public void doTag() throws JspException, IOException {
Object value=this.getJspContext().getAttribute(items);
if(value!=null && value instanceof List){
Iterator iter=((List)value).iterator();
while(iter.hasNext()){
this.getJspContext().setAttribute(var, iter.next());
this.getJspBody().invoke(null); //响应页面
}
}
}
}

java1234.tld:

 <?xml version="1.0" encoding="UTF-8" ?>

 <taglib 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-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>java1234Tag</short-name> <tag>
<name>iterate2</name>
<tag-class>com.java1234.tag.IterateSimpleTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

iterateSimpleTag.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
<!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=UTF-8">
<title>Insert title here</title>
<%
List people=new ArrayList();
people.add("王二小2");
people.add("丝丝光2");
people.add("草泥马2");
pageContext.setAttribute("people", people);
%>
</head>
<body>
<java1234:iterate2 items="people" var="p">
<h2>${p }</h2>
</java1234:iterate2>
</body>
</html>

小峰servlet/jsp(5)jsp自定义标签的更多相关文章

  1. JSP入门之自定义标签

    第二部分简单讲解:主要讲解el表达式,核心标签库.本章主要讲解:自定义标签库:404页面,505页面,错误页面配置方法 全部代码下载:链接 1.JSP自定义标签: 自定义标签是用户定义的JSP语言元素 ...

  2. jsp页面中自定义标签的小演示

    在实习期遇到公司的pg自定义标签了,同事要我自己自学一下 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet.JSP标签扩展可以让你创建新的标签并且可以直接 ...

  3. 小峰servlet/jsp(2)

    一.jsp javaBean组件引入 <jsp:useBean id="实例化对象名称" scope="保存范围" class="类完整名称&q ...

  4. javaWeb 在jsp中 使用自定义标签输出访问者IP

    1.java类,使用简单标签,jsp2.0规范, 继承 SimpleTagSupport public class ViewIpSimpleTag extends SimpleTagSupport { ...

  5. JSP 2.x 自定义标签

    JSP 1.x的标签,虽然使用起来非常灵活,但是比较复杂,JSP 2.x提供了一组简化的标签写法 SimpleTagSupport是SimpleTag接口的子类,同时支持参数和标签体,最核心的方法时d ...

  6. 小峰servlet/jsp(7)jstl国际化标签库、sql标签库等

    一.jstl国际化标签库: fmt:setLocale 设定用户所在的区域: fmt:formatDate   对日期进行格式化 fmt:requestEncoding 设置所有的请求编码; fmt: ...

  7. 小峰servlet/jsp(6)jstl核心标签库

    一.引入jstl 需要jstl.jar;standard.jar; 二.jstl核心标签库: c:out         内容输出标签; c:set      用来设置4种属性范围值的标签: c:re ...

  8. 小峰servlet/jsp(1)

    一.scriptlet标签: 通过scriptlet标签我们可以可以在jsp理嵌入java代码: 第一种:<%! %>  可以在里面定义全局变量.方法.类: 第二种:<% %> ...

  9. 小峰servlet/jsp(3)登陆功能实现

    一.User模型: User.java: package com.java1234.model; public class User { private int id; private String ...

随机推荐

  1. LA3905

    题意: 给出n颗流星,第i颗在第T秒时飞到(xi+ai*t,yi+bi*t),给出一个矩形,问在某一时刻这个矩形中的流星数目最多有多少 题解: 首先计算出每一颗流星经过时间 然后左端点移动,计算出少了 ...

  2. python break continue跳过和跳出循环

    break 语句可以跳出 for 和 while 的循环体.continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环.用break continue 写一个乘法表下 ...

  3. v-text、v-html、v-cloak、v-pre.md

    本篇文章,我们简单的介绍几个Vue内置指令的实现. v-text v-text的用法很简单,以下两个表达式的作用相同. <span v-text="msg"></ ...

  4. php 给对象动态增加属性 及子类继承父类的构造方法

    <?php error_reporting(-1); ini_set('display_errors','on'); class A { public $a = 'hello'; public  ...

  5. 在C++里一个类成员函数多少行代码才是最好呢?

    这个问题,很多同事以及学生都问我这个问题.其实这是一个比较实际的问题,因为设计一个类成员函数的好与坏,决定了一个类代码的质量. 为了回答这个问题,昨晚又重新看看斯坦福大学的编程视频,可以用下面这个截图 ...

  6. HDU 3829

    http://acm.hdu.edu.cn/showproblem.php?pid=2970 P个小朋友喜欢猫讨厌狗,喜欢狗讨厌猫,移除一定数量的猫狗,使开心的小朋友数量最多 二分图最大独立集=顶点数 ...

  7. 图解SQL的inner join、left join、right join、full outer join、union、union all的区别【转载】

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  8. iOS-----使用CoreLocation定位

    使用CoreLocation定位 CoreLocation框架 (CoreLocation.framework)可用于定位设备当前经纬度, 通过该框架, 应用程序可通过附近的蜂窝基站\WIFI信号 或 ...

  9. Python 第三方库 进度条模块 tqdm的使用方法

    使用方法一: tqdm tqdm(list)方法可以传入任意一种list,比如数组,同时tqdm中不仅仅可以传入list, 同时可以传入所有带len方法的可迭代对象,这里只以list对象为例: fro ...

  10. U-Boot_bmp_logo_hacking

    /*********************************************************************** * U-Boot_bmp_logo_hacking * ...