0x01 前言
由于JSTL中提供的函数未必能够满足我们的要求,又希望能够像JSTL提供的函数那样能够轻松方便使用,那么可以通过自定义函数补充JSTL函数
创建与使用JSTL自定义函数的条件如下:
- 导入JSTL的jar包
- 定义的方法必须是public且为static
- 定义相应的tld文件在WEB-INF目录或其子目录下
- 定义相应的自定义函数库
0x02 小例子
// 目录结构
├── src
│ └── main
│ └── webapp
│ └── com
│ │ └── ...
│ └── WEB-INF
│ │ ├── myFunction.tld
│ │ └── web.xml
│ ├── ...
│ └── JSTL库测试
│ │ ├── SecurityFunction.java
│ │ ├── jtsl_custom_function_test.jsp
// 第一步: 定义函数类
// 文件地址: ./src/main/webapp/JSTL库测试/
// 文件名称: SecurityFunction.java
package JSTL库测试;
public class SecurityFunction {
public static String testJstlFunction(String str) {
return "hello" + str;
}
}
// 第二步: 定义tld文件
// 注: 一般放到WEB-INF下
// 文件地址: ./src/main/webapp/WEB-INF/
// 文件名称: myFunction.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
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"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>http://www.my.com/myFunctions</uri>
<function>
<name>testJstlFunction</name>
<function-class>JSTL库测试.SecurityFunction</function-class>
<function-signature>java.lang.String testJstlFunction(java.lang.String)</function-signature>
</function>
</taglib>
// 第三步: 修改web.xml文件
// 注: 放到<web-app></web-app>标签里面即可
// 文件地址: ./src/main/webapp/WEB-INF/
// 文件名称: web.xml
<jsp-config>
<taglib>
<taglib-uri>http://www.my.com/myFunctions</taglib-uri>
<taglib-location>/WEB-INF/myFunction.tld</taglib-location>
</taglib>
</jsp-config>
// 第四步: jsp页面引入的方法
注意uri参数在web.xml和jsp页面引入需要一致
web.xml中的uri可以与location一致
也可以与tld文件中的uri一致
一般三者的uri一致,也最好三者都设置为一致的
引入
<%@ taglib prefix="my" uri="http://www.my.com/myFunctions" %>
或是
<%@ taglib prefix="my" uri="/WEB-INF/myFunction.tld" %>
都可以
// 第五步: 创建jsp页面测试自定义函数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="my" uri="http://www.my.com/myFunctions" %>
${my:testJstlFunction('test')}
// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jtsl_custom_function_test.jsp