标签:表达 public tostring let int location short pyc new
使用标签可以替换jsp页面上的脚本,让页面更加简洁,维护更加方便,增加程序安全性。
在javaee api中有一个接口javax.servlet.jsp.tagext.JspTag,它是所有的标签的根接口。
在jsp2.0以后,定义了一个更加简单的javax.servlet.jsp.tagext.SimpleTag,这个接口就描述了如何自定义标签。
标签的分类:
SimpleTag体系
SimpleTag有一个实现类SimpleTagSupport,自定义标签类一般会继承它。
定义一个标签的步骤:
关于SimpleTag接口的方法描述
package online.mytag;
import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class PrintTag extends SimpleTagSupport {
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void doTag() throws JspException, IOException {
//创建一个流,用于接收标签体的内容
StringWriter sw = new StringWriter();
getJspBody().invoke(sw);
String str = sw.toString();
JspWriter out = getJspContext().getOut();
for (int i = 0; i < count; i++) {
out.write(str);
}
}
}
package online.mytag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class IpTag extends SimpleTagSupport {
/**
* 向浏览器输出浏览器的ip
*/
@Override
public void doTag() throws JspException, IOException {
String ip = (String)((PageContext)(getJspContext())).getRequest().getRemoteAddr();
getJspContext().getOut().write(ip);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" 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">
<tlib-version>1.0</tlib-version>
<short-name>my</short-name> <!-- 这里是使用该标签时taglib的refer属性值:<%@taglib uri="online.mytag.IpTag" prefix="my"%> -->
<uri>http://java.sun.com/jsp/jstl/mytag</uri> <!-- 这里是使用该标签时taglib的uri属性 -->
<tag> <!-- 这里的每一个<tag>都指定一个标签java类 -->
<description>输出浏览器端的ip</description> <!-- 一些描述,也就是注释 -->
<name>getIp</name> <!-- 使用该标签类时的标签名 -->
<tag-class>online.mytag.IpTag</tag-class> <!-- 标签类的全类名 -->
<body-content>empty</body-content> <!-- 这个属性说明是否有标签体 -->
</tag>
<tag>
<description>根据标签属性值循环输出标签体</description>
<name>print</name>
<tag-class>online.mytag.PrintTag</tag-class>
<body-content>scriptless</body-content>
<attribute> <!-- 指的是标签类中的字段,有几个字段,就有几个attribute标签 -->
<description>循环的次数</description>
<name>count</name> <!-- 使用该标签时,标签中的属性名 -->
<required>true</required> <!-- 指明该属性是否是必需的 -->
<rtexprvalue>true</rtexprvalue> <!-- 指明该属性是否支持el表达式 -->
</attribute>
</tag>
</taglib>
web.xml 关联 .tld文件
<taglib> <taglib-uri>mytags</taglib-uri> <taglib-location>/WEB-INF/jsp/mytaglib.tld</taglib-location> </taglib>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib uri="online.mytag.IpTag" prefix="my"%>
<!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>
<my:getIp/>
<my:print count="2">
hello tag
</my:print>
</body>
</html>
总结下自定义标签:
我们使用的是简单标签,也就是通过实现SimpleTag或继承SimpleTagSupport来实现自定义标签。
基本步骤:
1.创建标签类 implements SimpleTag extends SimpleTagSupport类
2.在WEB-INF/创建一个tld文件
注意:
(xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd")
3.在jsp页面上使用taglib导入标签
标签:表达 public tostring let int location short pyc new
原文地址:http://www.cnblogs.com/yxnyd/p/6590830.html