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

来源:互联网 发布:c语言线程创建 编辑:程序博客网 时间:2024/05/10 05:08

 

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

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

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