日期:2014-05-16  浏览次数:20395 次

第十八天3月14日之JSP标签,自定义标签和jstl


二、自定标签的作用
 替换JSP中的java脚本<%%>
三、第一个自定义的标签(开发步骤)
 1、编写一个类,直接或间接实现javax.servlet.jsp.tagext.Tag(一般选择继承TagSupport)
 public class ShowRemoteIpTag extends TagSupport {

  public int doStartTag() throws JspException {
   String remoteIp = pageContext.getRequest().getRemoteAddr();
   try {
    pageContext.getOut().write(remoteIp);
   } catch (IOException e) {
    e.printStackTrace();
   }
   return super.doStartTag();
  }
 }
 2、在WEB-INF目录下建立一个扩展名为tld(Tag Libary Definition)的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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
  <tlib-version>1.0</tlib-version>
  <short-name>itheima</short-name>
  <uri>http://www.itheima.com/jsp/mytag</uri>
  <tag>
   <name>remoteIp</name>
   <tag-class>com.itheima.tag.ShowRemoteIpTag</tag-class>
   <body-content>empty</body-content><!-- 标签的主体内容 -->
  </tag>
 </taglib>
 3、(可选)在web.xml中建立tld文件的名称空间和tld文件的存放位置的对应关系
  <jsp-config>
   <taglib>
    <taglib-uri>http://www.itheima.com/jsp/mytag</taglib-uri>
    <taglib-location>/WEB-INF/itheima.tld</taglib-location>
   </taglib>
    </jsp-config>
 4、使用:
 <%@ taglib uri="http://www.itheima.com/jsp/mytag" prefix="itheima"%>
 
**知识点:Tag接口
int SKIP_BODY
int EVAL_BODY_INCLUDE

int SKIP_PAGE
int EVAL_PAGE


void setPageContext(PageContext pc):容器会把当前页面的PageContext对象传给你。在doXXX之前。
void setParent(Tag t):容器会传入该标签的父标签类的实例。如果没有传入null

int doStartTag():遇到自定义标签的开始标签就执行。容器来调用
int doEndTag():遇到自定义标签的结束标签就执行。容器调用


自定义标签的执行过程和生命周期:

四、传统标签:附属功能
控制jsp页面某一部分内容是否执行。
控制结束标签后的JSP内容是否执行
控制jsp页面内容重复执行。
修改页面内容输出。

五、JSP中标签核心接口或类的类图


六、简单标签


简单标签的执行过程:

小结:(tld文件的主要标签和作用)
1、头部信息:
<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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>sitheima</short-name>
    <uri>http://www.itheima.com/jsp/smytag</uri>
 
</taglib>
2、主要元素:
 tag:定义标签
  name:标签的使用名称
  tag-class:标签处理类的全名
  body-content:标签主体内容的类型
   可选值:
    JSP    jsp文件中可以出现啥,主体内容就可以出现啥。为传统标签服务。
    empty   没有主体内容,都(传统和简单)可以用
  &