0x01 前言

由于JSTL中提供的函数未必能够满足我们的要求,又希望能够像JSTL提供的函数那样能够轻松方便使用,那么可以通过自定义函数补充JSTL函数

创建与使用JSTL自定义函数的条件如下:

  1. 导入JSTL的jar包
  2. 定义的方法必须是public且为static
  3. 定义相应的tld文件在WEB-INF目录或其子目录下
  4. 定义相应的自定义函数库

0x02 小例子

  1. // 目录结构
  2. ├── src
  3. └── main
  4. └── webapp
  5. └── com
  6. └── ...
  7. └── WEB-INF
  8. ├── myFunction.tld
  9. └── web.xml
  10. ├── ...
  11. └── JSTL库测试
  12. ├── SecurityFunction.java
  13. ├── jtsl_custom_function_test.jsp
  1. // 第一步: 定义函数类
  2. // 文件地址: ./src/main/webapp/JSTL库测试/
  3. // 文件名称: SecurityFunction.java
  4. package JSTL库测试;
  5. public class SecurityFunction {
  6. public static String testJstlFunction(String str) {
  7. return "hello" + str;
  8. }
  9. }
  1. // 第二步: 定义tld文件
  2. // 注: 一般放到WEB-INF下
  3. // 文件地址: ./src/main/webapp/WEB-INF/
  4. // 文件名称: myFunction.tld
  5. <?xml version="1.0" encoding="UTF-8"?>
  6. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  8. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  9. version="2.0">
  10. <tlib-version>1.0</tlib-version>
  11. <short-name>my</short-name>
  12. <uri>http://www.my.com/myFunctions</uri>
  13. <function>
  14. <name>testJstlFunction</name>
  15. <function-class>JSTL库测试.SecurityFunction</function-class>
  16. <function-signature>java.lang.String testJstlFunction(java.lang.String)</function-signature>
  17. </function>
  18. </taglib>
  1. // 第三步: 修改web.xml文件
  2. // 注: 放到<web-app></web-app>标签里面即可
  3. // 文件地址: ./src/main/webapp/WEB-INF/
  4. // 文件名称: web.xml
  5. <jsp-config>
  6. <taglib>
  7. <taglib-uri>http://www.my.com/myFunctions</taglib-uri>
  8. <taglib-location>/WEB-INF/myFunction.tld</taglib-location>
  9. </taglib>
  10. </jsp-config>

image.png

  1. // 第四步: jsp页面引入的方法
  2. 注意uri参数在web.xmljsp页面引入需要一致
  3. web.xml中的uri可以与location一致
  4. 也可以与tld文件中的uri一致
  5. 一般三者的uri一致,也最好三者都设置为一致的
  6. 引入
  7. <%@ taglib prefix="my" uri="http://www.my.com/myFunctions" %>
  8. 或是
  9. <%@ taglib prefix="my" uri="/WEB-INF/myFunction.tld" %>
  10. 都可以
  1. // 第五步: 创建jsp页面测试自定义函数
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <%@ taglib prefix="my" uri="http://www.my.com/myFunctions" %>
  4. ${my:testJstlFunction('test')}
  5. // 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jtsl_custom_function_test.jsp

image.png