关于servlet2.5中自定义标签开发的一点见解

来源:互联网 发布:南京世纪桥软件 编辑:程序博客网 时间:2024/06/04 20:03
 

今天想弄一个自定义标签,本来没有想得太复杂,不过看了网上的资料大多数都是基于Servlet2.4以前的版本构建的标签,所以就想2.5版本都出来这么长时间了我就试一试吧,在大部分的定义过程来看并没有改变,但是在配置web.xml的时候出现了问题,下面向大家详细的说一下整个构建自己的标签的过程(这里用的是简单的例子),开发环境为MyEclipse6.0+Tomcat6.0;

     我们主要是实现JspTag接口,需要导入import javax.servlet.jsp.tagext.Tag;分别实现这几个方法:

     1.setPageContext()

     2.setParent(Tag parent)

     3.doStartTag()

     4.doEndTag()

     这些方法到底怎么用请大家参考API

 

     好了,现在来看看如何构建我们自己的标签:

首先建立一个WEB项目,File->New->Web Project,选择J2EE5.0,项目名称为tag,如下图: 

 

                                          1

                                           

然后建立包,报名为com.tag,紧接着建立Class,名称为HelloTag,一定要实现这个接口,如下图:

 

                                          2   

                                           

那个弹出的对话框是建类的时候点击Add时候弹出来的,用来引用要实现的接口的,接着我们需要实现方法,代码如下:

public class HelloTag implements Tag {

 private PageContext pc;
 private Tag parent;
 
 @Override
 public int doEndTag() throws JspException {
  try {
   pc.getOut().write("Hello World!");
  } catch (IOException e) {
   e.printStackTrace();
  }
  return this.EVAL_PAGE;
 }

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

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

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

 }

 @Override
 public void setPageContext(PageContext pc) {
  this.pc = pc;
 }

 @Override
 public void setParent(Tag parent) {
  this.parent = parent;
 }
}

 

下面我们来建立tld文件:文件目录在WEB-INF/tlds,如果没有tlds文件目录自己手动加一个(怎么加还不会?太假了吧!),完事在该目录下建立一个mytag.tld,这里我是叫这个名字,你也可以自己命名为别的名称,但是扩展名必须为tld,大家看一下代码:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>

  <short-name>examples</short-name>
  <uri>/demotag</uri>
  <description>
 A simple tab library for the examples
  </description>
  <tag>
   <name>hello</name>
   <tag-class>com.tag.HelloTag</tag-class>
   <body-content>empty</body-content>
  </tag>
</taglib>

 

我主要说一下黑体字部分,name是标签的名称,tag-class是该标签要引用的类名,由于没有标签体,所以body-content为空,如果有标签体则其中的内容必须为JSP,具体的我就不仔细说了,有兴趣的自己研究一下。

 

下面再说一下WEB.XML中的配置,注意这里是和以前的版本最不一样的地方,原来我们是在<taglib></taglib>中应用的自定义标签,但是Servlet2.5是这样定义的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
<jsp-config>
   <taglib>
    <taglib-uri>/demotag</taglib-uri>
  <taglib-location>/WEB-INF/tlds/mytag.tld</taglib-location>
   </taglib>
  </jsp-config>
</web-app>

 

这些都做好了我们就用JSP页来应用标签了,如下图:

 

                                       3                                            

 

选择hello标签,启动Tomcat6.0,访问地址http://127.0.0.1:8080/tag/index.jsp,看一下运行效果。我们就先说到这里,希望大家共享自己的经验。

原创粉丝点击