zoukankan      html  css  js  c++  java
  • 定制jsp标记(tag) [转]

    原文地址:http://blog.csdn.net/blackbeer/archive/2007/10/25/1843521.aspx

    今天学习了一下jsp的tag的自制方面的内容,现分享给大家,希望对大家有帮助

      jsp提供自制标记(custon tag)的功能,使用自定义标签可以降低jsp的编写难度,让不懂技术的人更好的使用。关于tab,我也是刚刚开始学习,可能部分理解不见得是正确的,请各位老大批评指正。

    jsp中为了实现自定义tag,包括3部分

    1。web程序中有一个标记库描述文件(tld)定义。(一般把此类文件放在应用的/WEB-INF目录下)

    2。对应的java类文件

    3。在jsp中使用对应的标记

    一、定义对应的tld文件

     编辑文件hello.tld文件,内容如下,并将该文件放在对应应用的/WEB-INF目录下

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

    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>hello</shortname>



    <tag>
    <name>hello</name>
    <tagclass>mytab.hello</tagclass>
    <bodycontent>empty</bodycontent>
    </tag>

    </taglib>

    注意:在myeclipse5.1版本下没有直接编辑tld文件的专用编辑脚本,可以在myeclise下使用File->new->file的方式新增对应的文件。

    在本例中的hello.tld中的

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

    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>hello</shortname>

    对于任何自定义tag都一样。

    但对于tag段对于每个标签都不同,name是指在jsp中使用的name,本例中的名称为hello,tagclass是指对应的class文件,在本例中是mytab.hello,bodycontent是比较高级的属性,在本例中不使用,可以用empty值

    二、编辑对应的java类

    在myeclipse环境下,可以在file->new->class下定义,在定义页,如下属性需要填写:

     package:mytab;name:hello;在interface的add中写入tag,并选择对应的“tag-javax.servlet.jsp.tagext”,其它的选择缺省。

    注:对应的mytab,hello,是与对应的hello的对应mytab.hello是对应的,如果你想增加其它的类。

    然后单击finish。

    产生的内容如下

    package mytab;

    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.Tag;

    public class hello implements Tag {

        
    public int doEndTag() throws JspException {
            
    // TODO Auto-generated method stub
            return 0;
        }

        
    public int doStartTag() throws JspException {
            
    // TODO Auto-generated method stub
            return 0;
        }

        
    public Tag getParent() {
            
    // TODO Auto-generated method stub
            return null;
        }

        
    public void release() {
            
    // TODO Auto-generated method stub

        }

        
    public void setPageContext(PageContext arg0) {
            
    // TODO Auto-generated method stub

        }

        
    public void setParent(Tag arg0) {
            
    // TODO Auto-generated method stub

        }

    }

    本例的目的比较简单就是一个打印一个hello,world。

    处理方式如下,首先定义一个私有的PageContext变量,在hello这个类中的setPageContext中将页面的PageContext变量赋值到类中,并在doStartTag中实现打印一个“hello,world”(注:在doStartTag中需要抛出IOException异常,否则报错,并需要import个 java.io.IOException),

    修改后的hello.java如下

    package mytab;


    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.Tag;
    import java.io.IOException;//需要自己添加,在doStartTag需要抛出对应的异常,必须定义

    public class hello implements Tag {
        
    private PageContext pageContext;//定义一个私有的PageContext
        
        
    public int doEndTag() throws JspException {
            
    // TODO Auto-generated method stub
            return 0;
        }

        
    public int doStartTag() throws JspException {
            
    // TODO Auto-generated method stub
            
    //需要新增的内容
            
    //begin
            try{
                pageContext.getOut().print(
    "hello,world");    
            }
            
    catch(IOException e)
            {
                
    throw new JspException("TimeTag Error:" + e.getMessage());
            }
            
    //end
            return 0;
        }

        
    public Tag getParent() {
            
    // TODO Auto-generated method stub
            return null;
        }

        
    public void release() {
            
    // TODO Auto-generated method stub

        }

        
    public void setPageContext(PageContext arg0) {
            
    // TODO Auto-generated method stub
            this.pageContext=arg0;//新增内容,将对应的页面的Pagecontext传进来
        }

        
    public void setParent(Tag arg0) {
            
    // TODO Auto-generated method stub

        }

    }

     三、在新增的jsp中使用tag

    通过file->new->folder来定义一个目录test,然后定义个jsp,名称叫helloTag.jsp。

    将文件中的pageEncoding修改为gbk,并删除无用信息,将head修改为helloTag,修改后的jsp如下

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      
    <head>
       HelloTag
      
    </head>
      
      
    <body>
        This is my JSP page
    . <br>
      
    </body>
    </html>

    展示一下,看是否有问题(有问题,可不是tag的问题哦)

    并在头部定义一个

    <%@ taglib uri ="/WEB-INF/hello.tld" prefix="mytab" %>

    在body中内容修改为 “在tag中定义的内容为<mytab:hello/>”

    修改后的Hellotag.jsp如下

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
    <%@ taglib uri ="/WEB-INF/hello.tld" prefix="mytab" %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      
    <head>
       HelloTag
      
    </head>
      
      
    <body>
        在tag中定义的内容为
    <mytab:hello/> <br>
      
    </body>
    </html>

    看看,是不是出来了,呵呵,搞定耶。

    当然,这是初步,建议大家在此基础上修改一下打印的东西像什么当前时间之类的,应该还是挺简单的,这里就不说了。

  • 相关阅读:
    苹果手机 iframe 无法滚动bug
    网页实现文件下载的一些方法
    Document对象中的一些重要的属性和方法(笔记)
    window对象中的一些重要的属性和方法(笔记)
    JS中的继承
    利用XMLHttpRequest(XHR)对象实现与web服务器通信
    JS对象中的原型
    JS中this的指向
    JS中的作用域和闭包
    HTML5新增的本地存储功能(笔记)
  • 原文地址:https://www.cnblogs.com/Bruce_H21/p/1182917.html
Copyright © 2011-2022 走看看