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.javapackage 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

