JSP编写定制标签

  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中)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值