JSP自定义标签【上】

目录

1.JSP标签是什么??

2.JSP标签语言的特点

2.1 标签的格式:

2.2 标签的分类:

3.自定义标签的开发

   3.1.1.编写助手类

   3.1.2.编写.tld文件

4.标签的生命周期

5.if标签

6.set和out标签

  6.1 Set

   6.2out


1.JSP标签是什么??

JSP是Java Server Pages的缩写,是一种在服务器端使用Java语言编写的动态网页技术。通过JSP,可以在HTML文件中嵌入Java代码和标签,将动态生成的数据合并到HTML页面中,实现动态的内容展示和交互功能


2.JSP标签语言的特点

2.1 标签的格式:

<开始标签  属性="属性值"> 标签体

  例:true          

2.2 标签的分类:

    空标签:      br hr    
    控制标签:  if  foreach
    数据标签:  out    保存数据    
    UI标签 :    input,table  (没有标签体也可以输出内容的标签就是UI标签)

JSP自定义标签【上】_第1张图片

 点击c:if 跳转到 c.tld 界面  .tld文件是标签库的描述文件 而且必须放在WEB-INF 里


3.自定义标签的开发

先来看看.tld文件是什么样的,大概就是一些配置属性


 

    
  JSTL 1.1 core library
  JSTL core
  1.1
  s
  http://shenyan
 
  
    
    aa
   
    com.yinzi.jsp.DomeTag1
   
    JSP
    
      
       
       var
        
         false 
       
       true 
   
   
  
 
   
    
    if
   
    com.yinzi.jsp.IfTag
   
    JSP
    
      
       
       test
        
         true 
       
       true 
   
   
   
   
  
  
  
  
    
    set
   
    com.yinzi.jsp.SetTag
   
    JSP
    
      
       
       var
        
         true 
       
       false 
   
   
     
       value
        
         true 
       
       true 
   
  
  
  
  
  
    
    out
   
    com.yinzi.jsp.OutTag
   
    JSP
    
      
       
       value
        
         true 
       
       true 
   
   
  


JSP自定义标签【上】_第2张图片

 截取了一部分完整的,标注了其意思
3.1 步骤

3.1.1.编写助手类

  可以看到第二个是助手类

助手类实现了JSP标签库中定义的标签,并提供了简单的API来处理标签的属性和输出

助手类将负责处理标签的输出。标签的具体实现可以在助手类中完成,也可以包含在独立的标签处理器类中。

package com.sy.jsp;
 
import java.io.IOException;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
/**
 * 助手类(必须继承BodyTagSupport)
 * @author 86131
 *
 */
public class DomeTag1 extends BodyTagSupport{
 
 
	@Override
	public int doStartTag() throws JspException {
 
		System.out.println("调用了doStartTag方法");
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		System.out.println("调用了doAfterBody方法");
		return super.doAfterBody();
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("调用了doEndTag方法");
		return super.doEndTag();
	}
	
}
    

   3.1.2.编写.tld文件


 

    
  JSTL 1.1 core library
  JSTL core
  1.1
  s
  http://shenyan
 
  
    
    aa
   
    com.yinzi.jsp.DomeTag1
   
    JSP
    
      
       
       var
        
         false 
       
       true 
   
   
  
 
   
    
    if
   
    com.yinzi.jsp.IfTag
   
    JSP
    
      
       
       test
        
         true 
       
       true 
   
   
   
   
  
  
  
  
    
    set
   
    com.yinzi.jsp.SetTag
   
    JSP
    
      
       
       var
        
         true 
       
       false 
   
   
     
       value
        
         true 
       
       true 
   
  
  
  
  
  
    
    out
   
    com.yinzi.jsp.OutTag
   
    JSP
    
      
       
       value
        
         true 
       
       true 
   
   
  


最后导入:

JSP自定义标签【上】_第3张图片

JSP自定义标签【上】_第4张图片


4.标签的生命周期

1.有标签体的情况下,默认调用doStartTag,doAfterBody,doEndTag方法
    2.如果将doStartTag返回值改为skip_body,则doAfterBody不会执行(路线1)
    3.如果将doStartTag返回值改为eval_body_include ,则doAfterBody会执行(路线2)
    4.如果将doAfterBody返回值改为EVAL_BODY_AGAIN,则会进入循环(路线3)

JSP自定义标签【上】_第5张图片

5.if标签

案例

 如果满足条件就输出标签体 ,返回值为eval_body_include 否则返回值为skip_body
 需要获取一个是否满足条件的结果值,则会有一个属性为boolean类型

package com.sy;

import javax.servlet.jsp.tagext.BodyTagSupport;

public class IfTag extends BodyTagSupport{
 
	private boolean text;
	
	@Override
	public int doStartTag() {
		if(this.text) {
			return EVAL_BODY_INCLUDE;
		}
		return SKIP_BODY;
	}
 
	public boolean isText() {
		return text;
	}
 
	public void setText(boolean text) {
		this.text = text;
	}
	
	
}

6.set和out标签

  6.1 Set

package com.sy;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class Set extends BodyTagSupport{
	private String var;
	private Object value;
	
	
	public String getVar() {
		return var;
	}
 
 
	public void setVar(String var) {
		this.var = var;
	}
 
 
	public Object getValue() {
		return value;
	}
 
 
	public void setValue(Object value) {
		this.value = value;
	}
 
 
	@Override
	public int doStartTag() throws JspException {
		pageContext.setAttribute(var, value);
		return super.doStartTag();


}
}

    
    set
   
    com.yinzi.jsp.SetTag
   
    JSP
    
      
       
       var
        
         true 
       
       false 
   
   
     
       value
        
         true 
       
       true 
   
  

6.2out

package com.sy;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class OutTag extends BodyTagSupport{
private Object value;
	
	
	public Object getValue() {
		return value;
	}
 
 
	public void setValue(Object value) {
		this.value = value;
	}
 
 
@Override
public int doStartTag() throws JspException {
	//输出流
	JspWriter out = pageContext.getOut();
	try {
		out.print(value);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return super.doStartTag();
}


}

    
    out
   
    com.yinzi.jsp.OutTag
   
    JSP
    
      
       
       value
        
         true 
       
       true 
   
   
  

JSP自定义标签【上】_第6张图片

输出结果为:

JSP自定义标签【上】_第7张图片

你可能感兴趣的:(java,开发语言,servlet)