JSP自定义标签开发入门
一、自定义标签的作用
自定义标签主要用于移除Jsp页面中的java代码。
二、自定义标签开发和使用
2.1、自定义标签开发步骤
1、编写一个实现TagSupport接口的Java类(标签处理器类)
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.lang.StringUtils;
import java.io.IOException;
public class ResourceTags extends TagSupport {
//参数
private String url;
private String className;
@Override
public int doStartTag() throws JspException {
StringBuffer stringBuffer = new StringBuffer();
if(StringUtils.isNotEmpty(url)){
stringBuffer.append("<div>");
stringBuffer.append("<img src='"+url+"' class='"+className+"'>");
stringBuffer.append("</div>");
}
JspWriter out = pageContext.getOut();
try {
out.write(stringBuffer.toString());//输出到jsp页面
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
2、在WEB-INF/目录下新建tld文件,在tld文件中对标签处理器类进行描述
ResourceTags.tld文件的代码如下:
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--taglib(标签库)的版本号 --> <tlib-version>1.0</tlib-version> <!--签库文件的命名空间 --> <short-name>role</short-name> <!-- 为自定义标签库设置一个uri,uri以/开头,/后面的内容随便写,如这里的/gacl , 在Jsp页面中引用标签库时,需要通过uri找到标签库 在Jsp页面中就要这样引入标签库:<%@taglib uri="http://jsp/user/defined/tag" prefix="user"%> --> <uri>http://jsp/user/defined/tag</uri> <tag> <!--标签名--> <name>resource</name> <!-- 标签对应的处理器类--> <tag-class>com.sf.sfbuy2.tags.ResourceTags</tag-class> <!-- 是否有标签体 body-content:值默认的是jsp。如果是自关闭标签,需要制定成empty。 如果标签有属性,还有attribute子元素 --> <body-content>JSP</body-content> <attribute> <description></description> <!--属性的名称(与类中变量同名) --> <name>url</name> <!--是否必需 --> <required>true</required> <!--属性的值是否通过运行时加以赋值(程序动态赋值) --> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description></description> <name>className</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib>
2、配置web.xml
(1)作用
在web.xml中进行标签配置文件的设置,告诉web应用程序,需要调用的自定义标签在哪里。
(2)前提
在标签配置文件中,如果没有进行<uri>的配置,则必须进行web.xml的配置。如果已经配置了uri元素的值,就不需要进行web.xml的配置,可以直接在jsp上调用。uri表现在JSP页面引入标签时候,需为taglib指令指定uri,注意和TLD文件中的标签类的别名name区分,那个是在JSP页面中调用标签时候命名空间后面写入。
(3)配置(如上图在WEB.XML中的配置)
所有的标签配置文件的配置,都必须在<jsp-config>元素中。每个配置文件有自己<taglib>元素。
<taglib>
<taglib-location>标签配置文件的物理地址</taglib-location>
<taglib-uri>标签配置文件的调用别名</taglib-uri>
<taglib-uri>http://jsp/user/defined/tag</taglib-uri>
<taglib-location>/WEB-INF/ResourceTags.tld</taglib-location>
</taglib>
在Jsp页面中使用自定义标签
使用"<%@taglib uri="标签库的uri" prefix="标签的使用前缀"%>"指令引入要使用的标签库。
例如:在jsp中引用http://jsp/user/defined/tag标签库
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp/user/defined/tag" prefix="ud"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="all" />
<meta name="Description" content="" />
<title>title</title>
<%@ include file="/WEB-INF/views/common/common.jsp" %>
</head>
<body>
<div style="text-align:center;">
使用自定义标签显示指定的图片
<ud:resource url="http://localhost:8080/images/1060868.png" className="aa"/>
</div>
</body>
</html>
下一篇: vue代理和跨域问题的解决