一、自定义标签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. 在 Ubuntu 14.04 Chrome中安装Flash Player(转)

    在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium  一个 Pepper Flash Player For Chromium 的安装器已经被 Ubu ...

  2. SharePoint 服务应用程序管理-PowerShell

    1. 安装所有可用的服务应用程序 Install-SPService -Provision 2. 显示场中所有可用的服务应用程序 Get-SPServiceApplication 3. 获取指定的服务 ...

  3. button确定取消事件

    对于前端这边,我们往往有这样的需求,即触发某一事件后(例如单击事件)想要根据用户的主管选择来进行下一个操作,例如停止监控事件,往往希望点击提示中的“确定”按钮再真正的去停止,否则不会,一般会用到Dia ...

  4. 《头文字D》热门同人插画欣赏

    <头文字D>(INITIAL D)是一部以山道飙车为题材的日本青年漫画,以及以漫画改编的动画系列(包含电视版.OVA.与电影版).漫画作者为重野秀一(しげの秀一),自1995 年起开始在讲 ...

  5. 强大的安卓手机远程管理工具 – Droidjack

    免责声明:本站提供安全工具.程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Droidjack是一款针对安卓手机远程管理工具,你可以利用它在PC上对手机进行远程操控,不仅功能强大,使用 ...

  6. IOS的各种控件(转载,防止遗忘)

    UITextView控件的详细讲解 感觉写的相当不错,而且很全就直接转载了 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: #import <UIKit/UIKi ...

  7. 简单的C#爬虫

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  8. phpStrom激活

    直接用浏览器打开 http://idea.lanyus.com/ ,点击页面中的“获得注册码”,然后在注册时切换至Activation Code选项,输入获得的注册码一长串字符串,便可以注册成功了!( ...

  9. linux用户添加到多个组

    usermod -G groupname username (这种会把用户从其他组中去掉,只属于该组)如:usermod -G git git (git只属于git组) usermod -a -G g ...

  10. 使用pip install XX 命令时报错

    在使用pip命令安装的时候,我遇到这样的报错: C:\Users\86962>pip install Appium-Python-Client Collecting Appium-Python- ...