Servlet 自定义标签

自定义标签

       1)用户定义的一种jsp标记,当一个含有自定义标签的jsp页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为 标签处理类 的对象的操作。于是,当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化为了对tag处理类的操作。

       2)所有的标签处理器类都要实现 JspTag 接口,该接口中没有定义任何方法,主要作为 Tag 和 SimpleTag 接口的父接口。编写完成标签功能的 Java 类(标签处理器) 

public class ForEachTag extends SimpleTagSupport{

	private Collection items;//集合变量名 
	public void setItems(Collection items) {
		this.items = items;
	} 
	private String var;//变量 
	public void setVar(String var) {
		this.var = var;
	} 
	@Override
	public void doTag() throws JspException, IOException { 
		if(items != null){
			for(Object obj: items){
		     //	 遍历的对象放入到 pageContext
				getJspContext().setAttribute(var, obj); 
				//把标签体的内容直接输出到页面上. 
				getJspBody().invoke(null);  
			}
		} 
	} 
}

  3)编写标签库描述(tld)文件,在tld文件中对自定义中进行描述

          标签库描述(Tag Library Description)文件简称为 tld 文件,其扩展名为 .tld,多个标签的集合就形成了一个标签库,标签库中的所有标签都必须在标签文件中进行描述。Tld 文件可以放置在 web 应用程序的 WEB-INF 目录及其子目录中,但不能放置在 WEB-INF 目录下的 classes 和 lib 子目录中 。





	MyTag 1.2 core library
	MyTag core
	1.2
	myself
	http://myself.com/myTag/core 
forEach com.demo.tag.ForEachTag scriptless items true true var true true choose com.demo.tag.ChooseTag scriptless when com.demo.tag.WhenTag scriptless test true true otherwise com.demo.tag.OtherwiseTag scriptless

  4) 在 JSP 页面使用 taglib 指令引入标签库描述文件:

            <%@ taglib prefix=“” uri=“” %>   uri:属性用于指定所引入的标签库描述(tld)文件中所定义的 元素的内容;prefix 属性用于为引入的 tld 文件指定一个”引用代号”。Prefix 属性可以由 jsp 文件的作者任意指定,只要与其他 taglib 指令的 prefix 属性值不同就可以。

<%@page import="com.demo.tag.Customer"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="myself" uri="http://myself.com/myTag/core" %>  




show mytag

 
	<% 
		List customers = new ArrayList(); 
		customers.add(new Customer(1, "AAA"));
		customers.add(new Customer(2, "BBB"));
		customers.add(new Customer(3, "CCC"));
		customers.add(new Customer(4, "DDD"));
		customers.add(new Customer(5, "EEE")); 
		request.setAttribute("customers", customers); 
	%>   
	
		--${pageScope.cust.id } -- ${cust.name } 


中年... 青年... 少年...

  5)访问http://127.0.0.1:8080/demo/tag/test.jsp?age=30 

                                Servlet 自定义标签_第1张图片

 

你可能感兴趣的:(Servlet 自定义标签)