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>

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

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

  • 相关阅读:
    ADB命令大全
    Backup your Android without root or custom recovery -- adb backup
    Content portal for Pocketables Tasker articles
    Is there a way to detect if call is in progress? Phone Event
    Tasker to proximity screen off
    Tasker to detect application running in background
    Tasker to create toggle widget for ES ftp service -- Send Intent
    Tasker to proximity screen on
    Tasker to answer incoming call by pressing power button
    Tasker to stop Poweramp control for the headset while there is an incoming SMS
  • 原文地址:https://www.cnblogs.com/Bruce_H21/p/1182917.html
Copyright © 2011-2022 走看看