JSP编写定制标签

xiaoxiao2021-02-28  85

定制标签概述 定制标签的实现成为标签处理器(Tag Handler),简单的标签处理器是指实现SimpleTag接口的标签处理器。简单的标签处理器的生命周期 (1) JSP容器通过吊桶无参构造器来创建一个简单的实例。所以,简单的标签处理器必须有一个无参构造器。 (2) Jsp容器调用JspContext方法,同时传递一个JspContext对象,其中最重要的方法是getOut,它返回一个响应到客户端。 (3) 如果标签处理器的定制标签是另一个标签的子标签,JSP容器就会调用setParent方法。 (4) JSP容器会给该标签的每个属性都调用设置方法setter (5)如果标签有主体内容,JSP就会调用SimpleTag接口中的setJspBody方法,把主体的内容作为JspFragment传递。 (6) JSP调用doTag方法。所有的变量在doTag方法返回时进行同步。例子 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中)

转载请注明原文地址: https://www.6miu.com/read-60786.html

最新回复(0)