jsp自制标签步骤

1.创建一个web项目

2.在webroot/web-inf下面创建一个普通文件,文件名扩展名为 tld,例如 mytag.tld

3.在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.1</tlib-version>
        <short-name>my</short-name>
         <uri>http://mytag.s1.tag</uri><!-- 随便定义 -->
         
         <tag> 
           <name>date</name>
           <tag-class>s1.Tag</tag-class>   <!-- tag标签的实现类 -->
           <body-content>empty</body-content>
           </tag>
           
           <tag>
           <name>readFile</name>
           <tag-class>s1.TagReadFile</tag-class>
                     <body-content>empty</body-content>   
           
           <attribute>
                <name>file</name>
                <required>true</required> 
                <rtexprvalue>true</rtexprvalue>
                <type>java.lang.String</type>      
           </attribute>
 
           </tag>
    
    </taglib>

 

4.上面的代码解释如下:

   4.1 固定格式的头部(别忘了taglib有结束标签)

<?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">

   

4.2 <tlib-version>1.1</tlib-version> // 自定义标签的版本号

        <short-name>my</short-name>  //推荐的缩写,影响不大

 <uri>http://mytag.s1.tag</uri>          //定位标签库的位置,在jsp页面中通过这个关联标签库

 <tag>     //定义一个标签     

 <name>readFile</name>  //标签的名称

 <tag-class>s1.TagReadFile</tag-class>   标签的实现类,标签本身没用,一定要有一个类来执行相应的功能

 <body-content>empty</body-content>     一般是empty 

 

<attribute>
                <name>file</name>                         //属性名
                <required>true</required>              //属性是否必须设置
                <rtexprvalue>true</rtexprvalue>     //运行时的值
                <type>java.lang.String</type>         //属性的值属于什么类
           </attribute>

 

 5.创建一个class文件,专门用来实现标签的功能

6.实现SimpleTag 接口,并继承所有的方法

public class Tag implements SimpleTag{ 

 

 7.在setJspContext()方法中将传入的pageContext对象缓存

 

public void setJspContext(JspContext jc) {
  this.pageContext=(PageContext)jc;
  //就是传入网页的 PageContext对象,拿到这个对象之后,就可以执行之后的操作
   }

 

8. 在dotag()方法中执行所有的操作

 public void doTag() throws JspException, IOException {
  //这里就是标签要执行的代码  
  
 }

 

9.完整实例代码如下:

package s1;

import java.io.IOException;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;

public class Tag implements SimpleTag{
	
	private PageContext pageContext=null;
	
	public void setJspContext(JspContext jc) {
		this.pageContext=(PageContext)jc;
		//就是传入网页的 PageContext对象,拿到这个对象之后,就可以执行之后的操作
		SimpleDateFormat sm=new SimpleDateFormat("yyyy-mm-dd  hh:mm:ss");
		String date=sm.format(new Date());
		try {
			pageContext.getOut().print(date);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
    public static void main(String[] args){
    	
    	
    }

	public void doTag() throws JspException, IOException {
		//这里就是标签要执行的代码
		System.out.println("doTag()");
		
		
	}

	public JspTag getParent() {
		System.out.println("getParent()");
		return null;
	}

	public void setJspBody(JspFragment arg0) {
		System.out.println("setJspBody()");
		
	}

	public void setParent(JspTag arg0) {
		System.out.println("setParent()");
		
	}
}

 

你可能感兴趣的:(jsp,标签)