zoukankan      html  css  js  c++  java
  • jsp标签小结

    JSP自定义标签试验原文:兔八哥笔记3:JSP自定义标签试验
     

    一、概述

           JSP中有一块重要的技术:自定义标签(Custom Tag),最近这几天在学习Struts的时候发现Struts中使用了很多自定义标签,如htmlbean等。所以我就做了个简单的试验,学习一下这种技术

           首先介绍一下这种技术吧!

    1.优点:

    取代了JSP中的Java程序,并且可以重复使用,方便不熟悉Java编程的网页设计人员。

    2开发流程:

    (1)       编写JSP,在JSP中使用自定义标签。

    (2)       web.xml中指定JSP中使用的标签的.tld(标签库描述文件)文件的位置。

    (3)       .tld文件中指定标签使用的类。

    3. 自定义标签的分类:

    (1)       简单标签:如< mytaghelloworld/>

    (2)       带属性标签:如<imytagcheckinput dbname = “<myBean.getDBName()>”/>

    (3)       带标签体的标签:

    在自定义标签的起始和结束标签之间的部分为标签体(Body)Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。

    <mytagcheckinput dbname = “<myBean.getDBName()>”>

          <mytag:log message=”Table Name”>

    <mytagcheckinput />

    (4)       可以被s cript使用的标签:

    定义了idtype属性的标签可以被标签后面的s criptlet使用。

    <mytagconnection id = “oraDB” type = “DataSource” name = “Oracle”>

    <%oraDB.getConnection(); %>

    4.接口及其他

    实际上,自定义标签的处理类实现了Tag Handler对象。JSP技术javax.servlet.jsp.tagext中提供了多个Tag Handler接口,JSP1.2中定义了TagBodyTagIterationTag接口,在JSP2.0中新增了SimpleTag接口。JSP还提供了上述接口的实现类TagSupportBodyTagSupportSimpleTagSupportSimpleTagSupport只在JSP2.0中才有)。BodyTagSupport实现了BodyTagTagIterationTag接口。

    接口及其方法

    Tag接口

    方法

    SimpleTag

    dotage

    Tag

    doStartTag,doEndTag,release

    IterationTag

    doStartTag,doAfterTag,release

    BodyTag

    doStartTag,doEndTag,release,doInitBody,doAfterBody

    下表引自SunJSP在线教程。

    Tag Handler Methods 

    Tag Handler Type

    Methods

    Simple

    doStartTag, doEndTag, release

    Attributes

    doStartTag, doEndTag, set/getAttribute1...N, release

    Body, Evaluation and No Interaction

    doStartTag, doEndTag, release

    Body, Iterative Evaluation

    doStartTag, doAfterBody, doEndTag, release

    Body, Interaction

    doStartTag, doEndTag, release, doInitBody, doAfterBody, release

    下表中的EVALevaluate的缩写,意思是:评价, 估计, ...的值,在下列的返回值中的意思是执行。

    返回值

    意义

    SKIP_BODY

    表示不用处理标签体,直接调用doEndTag()方法。

    SKIP_PAGE

    忽略标签后面的JSP内容。

    EVAL_PAGE

    处理标签后,继续处理JSP后面的内容。

    EVAL_BODY_BUFFERED

    表示需要处理标签体。

    EVAL_BODY_INCLUDE

    表示需要处理标签体,但绕过setBodyContent()doInitBody()方法

    EVAL_BODY_AGAIN

    对标签体循环处理。

    具体用法可以查看其他参考资料。

    SunJava教程相关部分:java.sun.com/webservices/docs/1.0/tutorial/doc/JSPTags.html">http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSPTags.html

    二、实验

    1.试验介绍

    下面的实验就是基于上述开发流程开发的。

    1)在JSP中指定tagliburi<%@ taglib uri="/helloworld" prefix="mytag" %>

    2)在web.xml中配置tag-location:

    <taglib>

                <taglib-uri>/helloworld</taglib-uri>

                <taglib-location>/WEB-INF/helloworld.tld</taglib-location>

           </taglib>

           3)在tag-location中指定的.tld文件中定义实现标签的处理类:

       <short-name>mytag</short-name>

       <tag>

          <name>helloworld</name>

          <tag-class>mytag.HelloWorldTag</tag-class>

          <body-content>empty</body-content>

     </tag>

    (4)执行处理类mytag.HelloWorldTagdoStartTag和doEndTag方法,然后将结果输入到JSP中,和JSP中的内容一起输出。实际上自定义标签和JSP中的其他的内容被WebServer一起编译成servlet。

     

     

    2. 完成后的试验的目录结构

    应用myjsp放在Tomcatwebapps下。

    myjsp中包含J2EE标准目录结构:WEB-INFhello.jspWEB-INF中包含子目录classeslibweb.xml,tld文件可以放在WEB-INF下,也可以放在WEB-INF的子目录下。

    3.开始实验

    31编写JSP

     

    < !—hello.jsp源码 -- >

    <%@ page contentType="text/html; charset=GBK" %>

    <%@ taglib uri="/helloworld" prefix="mytag" %>

    <html>

    <head>

    <title>

    jsp1

    </title>

    </head>

    <body bgcolor="#ffffc0">

    <h1>

    下面显示的是自定义标签中的内容

    </h1>

    <br><br>

    <mytag:helloworld></mytag:helloworld>

    <br>

    </form>

    </body>

    </html>

    32.编写web.xml
    < !—web.xml源码 -- >

    <?xml version="1.0" encoding="UTF-8"?>

    <!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Williams (501) -->

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>

    <taglib>

            <taglib-uri>/helloworld</taglib-uri>

            <taglib-location>/WEB-INF/helloworld.tld</taglib-location>

    </taglib>

    </web-app>


    3编写tld文件

    < !—helloworld.tld源码 -- >

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <!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-version>1.2</jsp-version>

       <short-name>mytag</short-name>

       <tag>

           <name>helloworld</name>

           <tag-class>mytag.HelloWorldTag</tag-class>

           <body-content>empty</body-content>

       </tag>

    </taglib>

     以下为jsp2.0
    <?xml version="1.0" encoding="UTF-8" ?>

    <taglib version="2.0">
     <description>test</description>
     <tlib-version>1.0</tlib-version>

     <tag>
      <description>hello world</description>
      <name>title</name>
      <body-content>EMPTY</body-content>
      <tag-class>com.test.tag.helloworld</tag-class>
      <attribute>
       <name>title</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
      </attribute>

     </tag>
    </taglib>

    3编写标签实现类

    < !—标签的实现类HelloWorldTag.class源码 -- >

    package mytag;   

    import java.io.IOException;

    import javax.servlet.jsp.*;

    import javax.servlet.jsp.tagext.*;

    public class HelloWorldTag extends TagSupport {    

     public HelloWorldTag() {

     }

     public int doStartTag() throws JspTagException{

        return EVAL_BODY_INCLUDE;

     }

     public int doEndTag() throws JspTagException{

        try {

          pageContext.getOut().write("Hello World");

        }

        catch (IOException ex) {

          throw new JspTagException("错误");

        }

        return EVAL_PAGE;

     }

    }

    3执行效果

    部署到TomcatWebApps目录下,启动Tomcat,输入:jsp/hello.jsp">http://localhost:8080/myjsp/hello.jsp

  • 相关阅读:
    mysql CREATE USER
    ConvertHelper 通用类
    自定义属性
    为什么建议使用你LocalDateTime,而不是Date?
    使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器
    IDEA-SpringBoot项目设置热部署
    CentOS7中MySQL跨机器数据迁移
    Centos7 使用YUM安装Mariadb
    Linux下svn服务器迁移
    java dateutil工具类Date.add()
  • 原文地址:https://www.cnblogs.com/inday/p/569495.html
Copyright © 2011-2022 走看看