开发自制jsp标记(tag)(入门)

 

今天学习了一下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 >

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值