小峰servlet/jsp(5)jsp自定义标签

一、自定义标签helloworld:

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

HelloWorldTag.java:继承TagSupport:

 1 package com.java1234.tag;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.jsp.JspException;
 6 import javax.servlet.jsp.JspWriter;
 7 import javax.servlet.jsp.tagext.TagSupport;
 8
 9 public class HelloWorldTag extends TagSupport{
10
11     private static final long serialVersionUID = 1L;
12
13     private String name;
14
15     public String getName() {
16         return name;
17     }
18
19     public void setName(String name) {
20         this.name = name;
21     }
22
23     @Override
24     public int doStartTag() throws JspException {
25         JspWriter out=this.pageContext.getOut();
26         try {
27             out.println(name + "自定义标签你好!");
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31         return TagSupport.SKIP_BODY; // 直接结束标签
32     }
33 }

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

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

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2
 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
 6     version="2.1">
 7     <tlib-version>1.0</tlib-version>
 8     <short-name>java1234Tag</short-name>
 9
10     <tag>
11         <name>helloWorld</name>
12         <tag-class>com.java1234.tag.HelloWorldTag</tag-class>
13         <!-- 标签体 -->
14         <body-content>empty</body-content>
15         <attribute>
16             <name>name</name>
17             <required>true</required>  <!-- required true必须要写的属性 -->
18             <rtexprvalue>true</rtexprvalue> <!-- 是否支持el表达式 true支持 -->
19         </attribute>
20     </tag>
21
22 </taglib>

helloWorldTag.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <java1234:helloWorld name="JspServlet屌炸天"/>
11 </body>
12 </html>

页面输出:

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

IterateTag.java:

 1 package com.java1234.tag;
 2
 3 import java.util.Iterator;
 4 import java.util.List;
 5
 6 import javax.servlet.jsp.JspException;
 7 import javax.servlet.jsp.tagext.TagSupport;
 8
 9 public class IterateTag extends TagSupport{
10
11     private static final long serialVersionUID = 1L;
12
13     private String var;
14     private String items;
15     private Iterator iter;
16
17     public String getVar() {
18         return var;
19     }
20
21     public void setVar(String var) {
22         this.var = var;
23     }
24
25     public String getItems() {
26         return items;
27     }
28
29     public void setItems(String items) {
30         this.items = items;
31     }
32
33     public Iterator getIter() {
34         return iter;
35     }
36
37     public void setIter(Iterator iter) {
38         this.iter = iter;
39     }
40
41     @Override
42     public int doStartTag() throws JspException {
43         Object value=this.pageContext.getAttribute(items);
44         if(value!=null && value instanceof List){
45             this.iter=((List)value).iterator();
46             if(iter.hasNext()){
47                 this.pageContext.setAttribute(var, iter.next());
48                 return TagSupport.EVAL_BODY_INCLUDE; //执行标签体
49             }else{
50                 return TagSupport.SKIP_BODY; //退出标签执行
51             }
52         }else{
53             return TagSupport.SKIP_BODY; //退出标签执行
54         }
55     }
56
57     //标签体执行完的操作
58     @Override
59     public int doAfterBody() throws JspException {
60         if(iter.hasNext()){
61             this.pageContext.setAttribute(var, iter.next());
62             return TagSupport.EVAL_BODY_AGAIN; //再执行一次标签体
63         }else{
64             return TagSupport.SKIP_BODY; //退出标签体执行
65         }
66     }
67 }

标签库描述文件java1234.tld:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2
 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
 6     version="2.1">
 7     <tlib-version>1.0</tlib-version>
 8     <short-name>java1234Tag</short-name>
 9
10     <!-- 定义items和var都是必须属性 -->
11     <tag>
12         <name>iterate</name>
13         <tag-class>com.java1234.tag.IterateTag</tag-class>
14         <body-content>JSP</body-content>
15         <attribute>
16             <name>var</name>
17             <required>true</required>
18             <rtexprvalue>true</rtexprvalue>
19         </attribute>
20         <attribute>
21             <name>items</name>
22             <required>true</required>
23             <rtexprvalue>true</rtexprvalue>
24         </attribute>
25     </tag>
26 </taglib>

iterateTag.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <%@ page import="java.util.*" %>
 3 <%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 <%
10     List people=new ArrayList();
11     people.add("王二小");
12     people.add("丝丝光");
13     people.add("草泥马");
14     pageContext.setAttribute("people", people);
15 %>
16 </head>
17 <body>
18 <java1234:iterate items="people" var="p">
19     <h2>${p }</h2>
20 </java1234:iterate>
21 </body>
22 </html>

访问,页面展示:

四、简单标签:

IterateSimpleTag.java:

 1 package com.java1234.tag;
 2
 3 import java.io.IOException;
 4 import java.util.Iterator;
 5 import java.util.List;
 6
 7 import javax.servlet.jsp.JspException;
 8 import javax.servlet.jsp.tagext.SimpleTagSupport;
 9 import javax.servlet.jsp.tagext.TagSupport;
10
11 public class IterateSimpleTag extends SimpleTagSupport{
12
13     private static final long serialVersionUID = 1L;
14
15     private String var;
16     private String items;
17
18     public String getVar() {
19         return var;
20     }
21
22     public void setVar(String var) {
23         this.var = var;
24     }
25
26     public String getItems() {
27         return items;
28     }
29
30     public void setItems(String items) {
31         this.items = items;
32     }
33
34     @Override
35     public void doTag() throws JspException, IOException {
36         Object value=this.getJspContext().getAttribute(items);
37         if(value!=null && value instanceof List){
38             Iterator iter=((List)value).iterator();
39             while(iter.hasNext()){
40                 this.getJspContext().setAttribute(var, iter.next());
41                 this.getJspBody().invoke(null); //响应页面
42             }
43         }
44     }
45 }

java1234.tld:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2
 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
 6     version="2.1">
 7     <tlib-version>1.0</tlib-version>
 8     <short-name>java1234Tag</short-name>
 9
10     <tag>
11         <name>iterate2</name>
12         <tag-class>com.java1234.tag.IterateSimpleTag</tag-class>
13         <body-content>scriptless</body-content>
14         <attribute>
15             <name>var</name>
16             <required>true</required>
17             <rtexprvalue>true</rtexprvalue>
18         </attribute>
19         <attribute>
20             <name>items</name>
21             <required>true</required>
22             <rtexprvalue>true</rtexprvalue>
23         </attribute>
24     </tag>
25 </taglib>

iterateSimpleTag.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ page import="java.util.*" %>
 4 <%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>Insert title here</title>
10 <%
11     List people=new ArrayList();
12     people.add("王二小2");
13     people.add("丝丝光2");
14     people.add("草泥马2");
15     pageContext.setAttribute("people", people);
16 %>
17 </head>
18 <body>
19 <java1234:iterate2 items="people" var="p">
20     <h2>${p }</h2>
21 </java1234:iterate2>
22 </body>
23 </html>

时间: 2024-12-17 20:11:16

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

JSP入门之自定义标签

第二部分简单讲解:主要讲解el表达式,核心标签库.本章主要讲解:自定义标签库:404页面,505页面,错误页面配置方法 全部代码下载:链接 1.JSP自定义标签: 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作.JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面. JSP 2.0规范中引入Simple Tag Ha

jsp中的自定义标签

(jsp 1.0规范) 一,自定义标签主要用于移除Jsp页面中的java代码: 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1,编写一个实现Tag接口的Java类(标签处理器类). 2,编写标签库描述符(tld)文件,在tld文件中对标签处理器类描述成一个标签.(.tld文件放在WEB-INF目录下面) 二,TAG接口的执行流程: JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. 1,?public vo

JSP笔记——7.自定义标签

jsp标签具有与html标签一样的格式,可以用来代替jsp中的Java脚本,使代码简介.使用自定义标签之前需要建立一个*.tld文件,每个文件对应一个标签库,里面可以包含很多的自定义标签. 每一个标签都必须由一个继承了SimpleTagSupport类的实现类来实现.类里面的属性必须有get与set方法.需要重写doTag方法,实际上此方法真正完成标签的工作. 创建tld文件  创建的时候最好找一个现成的tld文件,复制进去然后修改uri(此uti能够告诉jsp页面,这个前缀引导的标签应该与哪个

JSP 2.x 自定义标签

JSP 1.x的标签,虽然使用起来非常灵活,但是比较复杂,JSP 2.x提供了一组简化的标签写法 SimpleTagSupport是SimpleTag接口的子类,同时支持参数和标签体,最核心的方法时doTage public AddTag extends SimpleTagSupport{ private int num1; private int num2; public void doTag() throws JspException,IOException{ this.getJspCont

小峰servlet/jsp(2)

一.jsp javaBean组件引入 <jsp:useBean id="实例化对象名称" scope="保存范围" class="类完整名称" /> scope一共有page,request,session和application 4个属性范围,默认是page: student类: 1 package com.java1234.model; 2 3 public class Student { 4 5 private String n

java jsp自定义标签

自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 package gz.itcast; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class iftag extends SimpleTagSupport { private boolean

讲解JSP自定义标签

一.基本概念 1.标签(Tag) 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本.由于标签是XML元素,所以它的名称和属性都是大小写敏感的. 2.标签库(Tag library) 由一系列功能相似.逻辑上互相联系的标签构成的集合称为标签库. 3.标签库描述文件(Tag Library Descriptor) 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系.它是一个配置文件,和web.xm

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="

javaweb学习总结(二十三)——jsp自定义标签开发入门

一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import