一、编写步骤
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>