jsp标签

来源:互联网 发布:无网络装网卡驱动 编辑:程序博客网 时间:2024/05/22 10:33

1,自定义JSP标签概述

¨自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。
¨使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率。
¨自定义标签主要用于移除Jsp页面中的java代码。

2,自定义JSP标签的执行过程

¨当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时,JSP引擎遇到自定义的标签,会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。

3,自定义JSP标签的开发流程

¨使用Java处理类来开发自定义JSP标签时,主要分为下几个步骤。
创建标签的处理类(Tag Handle Class)。这个类实现Tag接口,用来定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。
创建标签库描述(tld) 文件(Tag Library Descriptor File),在tld文件中对标签处理器类进行描述。
JSP文件中用taglib指令引入标签库,然后使用标签库描述文件中指定的标签名来使用它。

4,使用标签输出客户机IP和分析

Tag接口的执行流程

¨JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。

  1public voidsetPageContext(PageContext pc)JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。

  2public void setParent(Tag t)setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null

  3public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。

  4public int doEndTag()WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。

  5public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务,直至停止web应用时,web容器才会调用release方法。

5,自定义标签功能扩展

¨开发人员在编写Jsp页面时,经常还需要在页面中引入一些逻辑,例如:
p控制jsp页面某一部分内容是否执行。
p控制整个jsp页面是否执行。
p控制jsp页面内容重复执行。
p修改jsp页面内容输出。
¨自定义标签除了可以移除jsp页面java代码外,它也可以实现以上功能。
¤
¨tld文件中的四种标签体类型
pEMPTY JSP scriptless  tagdepentend
 
这组类和接口放置
6,JSP标签API
¨JSP 1.11.2规范中常用的接口主要有以下3个。
Tag:此接口定义对于所有标签处理类都需要实现的方法。
IterationTag:此接口扩展了Tag接口,增加了控制重复执行标签主体的方法。
BodyTag:此接口扩展了IterationTag接口,并增加了访问和操作标签主体内容的方法。

7,案例

1,index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="
http://www.hbsi.com/ip-taglib" prefix="chj" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
    当前的ip:<br/>
    <chj:ip>
    <%
     out.println("haha");
     %>
     
    </chj:ip>
    <br/>
    输出ip:
    <%
     String ip=request.getRemoteAddr();
     %>
     <%=ip %>
  </body>
</html>

 

2,ip-taglib.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<!-- 版本号 -->
 <tlib-version>1.0</tlib-version>
 <!-- jsp版本 -->
 <jsp-version>1.2</jsp-version>
 <!-- 建议的perfix的名称 -->
 <short-name>chj</short-name>
 <!-- Uri地址 -->
 <uri>http://www.hbsi.com/ip-taglib</uri>
 <description>定义一个ip输出的标签</description>
 
 <tag>
 <!-- 标签名称 -->
  <name>ip</name>
  <!-- 标签的处理类 -->
  <tag-class>www.csdn.net.blank.Tag.IpTag</tag-class>
  <!-- 标签中的内容 -->
  <body-content>scriptless</body-content>
  <!-- 标签描述 -->
  <description>描述ip</description>
  
 </tag>
</taglib>

 

3,IpTag.java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<!-- 版本号 -->
 <tlib-version>1.0</tlib-version>
 <!-- jsp版本 -->
 <jsp-version>1.2</jsp-version>
 <!-- 建议的perfix的名称 -->
 <short-name>chj</short-name>
 <!-- Uri地址 -->
 <uri>http://www.hbsi.com/ip-taglib</uri>
 <description>定义一个ip输出的标签</description>
 
 <tag>
 <!-- 标签名称 -->
  <name>ip</name>
  <!-- 标签的处理类 -->
  <tag-class>www.csdn.net.blank.Tag.IpTag</tag-class>
  <!-- 标签中的内容 -->
  <body-content>scriptless</body-content>
  <!-- 标签描述 -->
  <description>描述ip</description>
  
 </tag>
</taglib>

 

 

 

 

0 0
原创粉丝点击