JavaWeb自定义标签的开发步骤

25 篇文章 0 订阅

一、编写步骤

1、编写完成标签功能的java类(标签处理器)

2、、编写标签库描述文件(.tld)

3、在jsp页面中导入和使用自定义标签

二、举例

栗子一、获取两个数较大的数

1、标签处理器 MaxTag.java

 

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
import java.io.IOException;

/**
 * Created by 1 on 2017/3/11.
 */
public class MaxTag implements SimpleTag {
    private String num1;
    private String num2;

    public String getNum1() {
        return num1;
    }

    public void setNum1(String num1) {
        this.num1 = num1;
    }

    public String getNum2() {
        return num2;
    }

    public void setNum2(String num2) {
        this.num2 = num2;
    }

    @Override
    public void doTag() throws JspException, IOException {
        int a=Integer.parseInt(num1);
        int b=Integer.parseInt(num2);
        JspWriter out=pageContext.getOut();
     try{
         out.print(a>b?a:b);
     }catch (Exception e){
         out.print("输入的格式不正确");
     }

    }

    @Override
    public void setParent(JspTag jspTag) {

    }

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

    PageContext pageContext;
    @Override
    public void setJspContext(JspContext jspContext) {
     this.pageContext=(PageContext) jspContext;
    }

    @Override
    public void setJspBody(JspFragment jspFragment) {

    }
}

2、Mytag.tld   建在WEB-INF下的xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<taglib 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-jsptaglibrary_2_1.xsd"
        version="2.1">
    <description>Mytag 1.0 core Library</description>
    <display-name>MyTag core</display-name>
    <tlib-version>1.0</tlib-version>
    <!--建议在jsp页面上使用的标签前缀-->
    <short-name>pipi</short-name>
    <!--作为tld文件的id,唯一标识tld文件,jsp页面中 通过taglib的uri属性引用-->
    <uri>http://mytag.com</uri>

    <!-- Invoke 'Generate' action to add tags or functions -->
    <!--描述自定义标签-->
    <tag>
    <!--标签的名字-->
        <name>Max</name>
    <!--标签所在的全类名-->
      <tag-class>com.pipi.TagDemo.MaxTag</tag-class>
    <!--标签体的类型-->
    <body-content>empty</body-content>
        <attribute>
            <name>num1</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>num2</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>


3、jsp页面 使用

<%@ taglib prefix="pipi" uri="http://mytag.com" %>
<body>
<pipi:Max num1="10" num2="12"/>
</body>

运行后,浏览器会显示12

例子二、在浏览器上输出指定文件

1、ReadFile.java

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.*;
import java.util.regex.Pattern;

/**
 * Created by 1 on 2017/3/11.
 */
public class ReadFileTag extends SimpleTagSupport {

    //相对于当前web根路径的文件
    private String src;

    public void setSrc(String src) {
        this.src = src;
    }

    @Override
    public void doTag() throws JspException, IOException {
        super.doTag();

        PageContext pageContext= (PageContext) getJspContext();
        InputStream in= pageContext.getServletContext().getResourceAsStream(src);
        BufferedReader reader=new BufferedReader(new InputStreamReader(in,"utf-8"));  //不是二进制文件
        String str=null;
        while((str=reader.readLine())!=null){
            //利用正则表达式将文件中的<>标签符号正常显示
            str= Pattern.compile("<").matcher(str).replaceAll("<");
            str= Pattern.compile(">").matcher(str).replaceAll(">");
             pageContext.getOut().println(str);
            pageContext.getOut().println("<br>");
        }

    }
}

2、.tld

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
import java.io.IOException;

/**
 * Created by 1 on 2017/3/11.
 */
public class MaxTag implements SimpleTag {
    private String num1;
    private String num2;

    public String getNum1() {
        return num1;
    }

    public void setNum1(String num1) {
        this.num1 = num1;
    }

    public String getNum2() {
        return num2;
    }

    public void setNum2(String num2) {
        this.num2 = num2;
    }

    @Override
    public void doTag() throws JspException, IOException {
        int a=Integer.parseInt(num1);
        int b=Integer.parseInt(num2);
        JspWriter out=pageContext.getOut();
     try{
         out.print(a>b?a:b);
     }catch (Exception e){
         out.print("输入的格式不正确");
     }

    }

    @Override
    public void setParent(JspTag jspTag) {

    }

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

    PageContext pageContext;
    @Override
    public void setJspContext(JspContext jspContext) {
     this.pageContext=(PageContext) jspContext;
    }

    @Override
    public void setJspBody(JspFragment jspFragment) {

    }
}

3、.jsp

<tag>
        <!--标签的名字-->
        <name>ReadFile</name>
        <!--标签所在的全类名-->
        <tag-class>com.pipi.TagDemo.ReadFileTag</tag-class>
        <!--标签体的类型-->
        <body-content>empty</body-content>
        <attribute>
            <name>src</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>

    </tag>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值