jsp自定义标签的HelloWorld

自定义标签:
自定义标签的出现是为了替代jsp脚本的。jsp标签最终会被翻译完一段java代码,所以使用标签就是以标签的形式去调用Java代码
比对:

/**
  jsp脚本:
<%request.getRequestDispatcher("").forward(request, response); %>

jsp标签:
<jsp:forward page=""></jsp:forward>

*/

===================
代码结构:
这里写图片描述
使用步骤:
1、创建一个Java类,该类是标签处理类,实现SimpleTag接口
2、编写一个tld文件(实际上是一个xml文件)

MyTag.java

package com.atguigu.taglib;

import java.io.IOException;

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;

/**
 * 自定义标签的HelloWorld
 * 这个标签让他再页面中输出一个简单的内容
 * <h1>这是我的第一个自定义标签</h1>
 * @author lilichao
 *
 */
public class MyTag implements SimpleTag {

    private JspContext context;

    /**
     * doTag()在标签执行时被调用
     */
    @Override
    public void doTag() throws JspException, IOException {

        //获取out对象
        JspWriter out = context.getOut();
        //通过out对象向页面输出一个内容
        out.print("<h1>这是我的第一个自定义标签</h1>");
        //在控制台输出一个内容
        System.out.println("Hello Tag!");

    }

    @Override
    public void setParent(JspTag parent) {

    }

    @Override
    public JspTag getParent() {
        return null;
    }


   //我们有JspContext,该类其实就是PageContext的父类,通过该方法可以为我们自己创建的context进行赋值,之后就可以通过context对象去获得输出流对象
   //设置当前页面的上下文,这个JspContext就是PageContext,可以用来获取页面中的其他隐含对象
    @Override
    public void setJspContext(JspContext pc) {
        this.context = pc;
    }


    //设置标签体的内容,这个方法由服务器调用,                                      服务器通过该方法将标签体传入到处理器类中,我们自己不能调用,没有JspFragment.
    @Override
    public void setJspBody(JspFragment jspBody) {

    }

}

atguigu-taglib.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">

    <tlib-version>1.0</tlib-version>
    <short-name>a</short-name>
    <uri>http://www.atguigu.com/taglib/a</uri>

    <tag>
        <name>MyTag</name>
        <tag-class>com.atguigu.taglib.MyTag</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="a" uri="http://www.atguigu.com/taglib/a" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a:MyTag/>
</body>
</html>

附图:创建tld文件
new–folder–tlds
tlds–右键–new xml file–atguigu-taglib.tld–next–create xml file from 勾选schema约束–next–select xml schema file勾选catalog entry,选择web-jsptaglibrary_2_0.xsd
这里写图片描述
这里写图片描述
这里写图片描述

tip1:
1.jsp引入自定义标签使用taglib指令,prefix的值是任意写的,一般为

<short-name>a</short-name>

里定义的。我们也可以自己写成:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="abcd" uri="http://www.atguigu.com/taglib/a" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <abcd:MyTag/>
</body>
</html>

tip2:创建自定义标签处理类,有点和创建servlet类似,比对:
创建一个servlet需要实现Servlet,而servlet类需要让服务器知道并加载就必须在web.xml中配置。

创建自定义标签的前提就是先要有自定义标签处理类,再创建自定义标签引进自定义标签处理类,之后我们才能够在jsp页面中通过taglib指令引进来后才能使用自定义标签。而自定义标签处理类同样需要实现一个SimpleTag接口,同样也需要配置才能够让tomcat服务器知道有这样的一个标签处理类,不同的是自定义标签处理类并没有在web.xml中配置,而是需要自己手动编写一个tld文件。

=========================
未完待续!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值