JSP标签体系及自定义JSP标签

 一 . JSP标签体系

JSP标签体系及自定义JSP标签_第1张图片

 

二 . 标签的执行流程:

 

 

三.自定义标签;

3.1 自定义标签的主要作用:移除jsp中的java脚本。它属于jsp的技术

3.2、编写一个自定义标签的步骤:(传统标签的定义)
3.3写一个类,直接或间接实现javax.servlet.jsp.tagext.Tag。一般通过继承TagSupport来间接实现Tag接口
  
 3.4、覆盖掉父类中的对应方法
 package com.itheima;

 import java.io.IOException;
 import java.io.PrintWriter;

 import javax.servlet.ServletRequest;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.tagext.TagSupport;

 public class ShowIpTag extends TagSupport {

  @Override
  public int doStartTag() throws JspException {
   ServletRequest request = pageContext.getRequest();
   String ip = request.getRemoteAddr();
   JspWriter out = pageContext.getOut();
   try {
    out.write(ip);
   } catch (IOException e) {
    e.printStackTrace();
   }
   return super.doStartTag();
  }
  
 }
 3.5在WEB-INF下面建立一个扩展名为tld的xml文件,对自定义的标签处理类进行描述
  <?xml version="1.0" encoding="UTF-8"?>
  <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
   version="2.0">
   <description>slkdjfdsjfdsfjlks.</description>
   <tlib-version>1.0</tlib-version>
   <short-name>itheima</short-name>
   <uri>http://www.itheima.com/jsp/myjstl</uri>
   <tag>
    <description>show remote ip</description>
    <name>showIp</name>
    <tag-class>com.itheima.ShowIpTag</tag-class>
    <body-content>empty</body-content>
   </tag>
  </taglib>
 3.6、在jsp中通过taglib指令引入自定义的标签,然后使用

 

四、简单标签
1、一般需要继承SimpleTagSupport,然后覆盖掉doTag方法即可
2、
a、控制部分内容不输出
 <demo1>
  abcd
 </demo1>

 doTag()方法什么都不做。
 如果要输出的话:getJspBody().invoke(null)
b、控制标签后面的jsp内容不输出
 throw new SkipPageException();
c、控制主体内容重复执行
 在doTag方法中循环调用getJspBody().invoke(null)
 属性:要有setter方法,同时也要在tld文件中进行描述
d、修改主体内容后再输出
 getJspBody().invoke(null) 要吧内容输出到一个有缓冲的流中。
 StringWriter
 修改后再通过((PageContext)getJspContext).getWrtier()输出

五、tld文件的主要标签和属性
 short-name:引用标签的前缀
 uri:tld文件要绑定到一个uri的地址。可以立即为帮到一个名称空间上
 tag:描述标签
  name:标签的名字
  tag-class:标签对应的标签处理类的全名
  body-content:标签主体内容的类型
   empty:没有主体内容
   JSP:有主体内容(用于传统标签)
   scriptless:有主体内容(用于简单标签)
  attribute:描述标签的属性
   name:属性名称
   required:是否是必须的属性
   rtexprvalue:属性的取值是否支持表达式(EL和Java表达式)

 

你可能感兴趣的:(JSP标签体系及自定义JSP标签)