JSP编写定制标签

来源:互联网 发布:数组排序最快的方法 编辑:程序博客网 时间:2024/05/21 10:52
  1. 定制标签概述
    定制标签的实现成为标签处理器(Tag Handler),简单的标签处理器是指实现SimpleTag接口的标签处理器。
  2. 简单的标签处理器的生命周期
    (1) JSP容器通过吊桶无参构造器来创建一个简单的实例。所以,简单的标签处理器必须有一个无参构造器。
    (2) Jsp容器调用JspContext方法,同时传递一个JspContext对象,其中最重要的方法是getOut,它返回一个响应到客户端。
    (3) 如果标签处理器的定制标签是另一个标签的子标签,JSP容器就会调用setParent方法。
    (4) JSP容器会给该标签的每个属性都调用设置方法setter
    (5)如果标签有主体内容,JSP就会调用SimpleTag接口中的setJspBody方法,把主体的内容作为JspFragment传递。
    (6) JSP调用doTag方法。所有的变量在doTag方法返回时进行同步。
  3. 例子
    MyFirstTag类
public class MyFirstTag implements SimpleTag{    JspContext jspContext;    @Override    public void doTag() throws JspException, IOException {        // TODO Auto-generated method stub        System.out.println("doTag");        jspContext.getOut().print("this is my first tag");    }    @Override    public JspTag getParent() {        // TODO Auto-generated method stub        System.out.println("getParent");        return null;    }    @Override    public void setJspBody(JspFragment arg0) {        // TODO Auto-generated method stub        System.out.println("setJspBody");    }    @Override    public void setJspContext(JspContext jspContext) {        // TODO Auto-generated method stub        System.out.println("setJspContext");        this.jspContext = jspContext;    }    @Override    public void setParent(JspTag parent) {        // TODO Auto-generated method stub        System.out.println("setParent");    }}

mytags.tld

<?xml version="1.0" encoding="ISO-8859-1"?><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" verson="2.0">    <description>Simple tag examples</description>    <tlib-version>1.0</tlib-version>    <jspversion>2.3</jspversion>    <short-name>My First Taglib Example</short-name>    <tag>        <name>firstTag</name>        <tag-class>tag.MyFirstTag</tag-class>        <body-content>empty</body-content>    </tag></taglib>

如果要使标签里面有内容 里面的值应该为scriptless
使用标签
jsp文件:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><%@ taglib uri="/WEB-INF/mytags.tld" prefix="easy" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>First Tag</title></head><body>Hello!<easy:firstTag></easy:firstTag></body></html>

访问页面:
这里写图片描述

控制台输出:
这里写图片描述

在调用jsp页面时,JSP会调用标签处理器的setJspContext方法。由于标签中没有主体内容,jsp不会在调用doTag方法之前调用setJspBody方法。JSP容器也没有调用setParent方法,因为该标签没有嵌套在另一个标签里面。

错误解决:

1.

type Exception report
message Mandatory TLD element jsp-version missing or empty in TLD /WEB-INF/funcation.tld
description The server encountered an internal error that prevented it from fulfilling this request.

在tld文件中,设置的jsp版本不正确
这里写图片描述
在tomcat的lib中找到jsp-api.jar。
查看里面的META-INF/MANIFEST.MF
这里写图片描述
标记部分就是jsp的版本。查看servlet的版本也一样(servlet-api.jar中)

原创粉丝点击