IT兄弟连 JavaWeb教程 使用JSTL函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ITXDL123/article/details/90202895

在JSTL Functions标签库中提供了一组常用的EL函数,主要用于处理字符串,在JSP中可以直接使用这些函数。

在JSP中使用Functions标签库,需要通过taglib指令引入该标签库:

<%@ taglib prefix="fn" uri=http://java.sun.com/jsp/jstl/functions %>

使用JSTL函数

1.fn:contains函数

fn:contains函数用于判断在源字符串中是否包含目标字符串,其语法为:

fn:contains(String source,String target)

以上source参数指定源字符串,target参数指定目标字符串,返回类型为boolean。例如对于以下EL表达式:

${fn:contains("Tomcat,"cat"}}

${fn:contains("Tomcat","CAT")}

第一个EL表达式的值为true,第二个EL表达式的值为false。

2.fn:toUpperCase函数

fn:toUpperCase函数用于将源字符串中的所有字符改为大写,其语法为:

fn:toUpperCase(String source)

以上source参数指定原字符串,返回类型为String。

例如对于以下EL表达式:

${fn:toUpperCase("TomCat")}

其输出结果为:

TOMCAT

3.fn:length函数

fn:length函数用于返回字符串中的字符的个数,或者集合和数组中的元素的个数,其语法为:

fn:length(source)

以上source参数可以为字符串、集合或者数组,返回类型为int。

2 实现自定义函数标签

函数的定义和使用分为以下3个步骤:

● 编写一个Java类,并在该类中编写公用的静态方法,用于实现自定义EL函数的具体功能。

● 编写标签库描述文件,对函数进行声明。该文件的扩展名为.tld,被保存到Web应用的WEB-INF文件夹下。

● 在JSP页面中引用标签库,并调用定义的EL函数,实现相应的功能。

例:定义EL函数处理字符串中的回车换行符和空格符。

● 编写一个Java类,名称为StringDeal,将其保存在com.xdl.el包中,在该类中添加一个公有的静态方法shiftEnter(),在该方法中替换输入字符串中的回车换行符为<br>,空格符为"&nbsp;",最后返回新替换后的字符串。StringDeal类的完成代码如下:

package com.xdl.el;

public class StringDeal{

public static String shiftEnter(String str){

String newStr = str.replaceAll("\r\n","<br>");

newStr = newStr.replaceAll(" ","&nbsp;");

return newStr;

}

}

● 编写标签库描述文件,名称为stringDeal.tld,并将其保存到WEB-INF文件夹下。关键代码如下:

<?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 web-jsptaglibrary_2_0.xsd" version="2. 0" >

<tlib-version>1.0</tlib-version>

<uri>/stringDeal</uri>

<function>

<name>shiftEnter</name>

<function-class>com.xdl.el.StringDeal</function-class>

<function-signature>java.lang.String shiftEnter(java.lang.Str ing)</function-signature>

</function>

</taglib>

参数说明:

uri标记:用于指定tld文件的映射路径。在应用EL函数时,需要使用该标记指定的内容。

name标记:用于指定EL函数所对应的方法名,通常与java文件中的方法名相同。

function-class标记:用于指定EL函数所对应的Java文件,这里需要包括包名和类名,例如,在上面的代码中,报名为com.xdl.el,类名为StringDeal。

function-signature标记:用于指定EL函数所对应的静态方法,这里包括返回值的类型和入口参数的类型。在指定这些类型时,需要使用完整的类型名,例如,在上面的代码中,不能指定该标记的内容为"String.shiftEnter(String)"。

● 编写index.jsp文件,在该文件中添加一个表单及表单元素,用于收集内容信息。关键代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<html>

<head>

<meta charset="UTF-8">

<title>兄弟连IT教育</title>

</head>

<body>

<form name="form1" method="post" action="deal.jsp">

<textarea name="content" cols="30" rows="5"></textarea>

<br>

<input type="submit" name="Button" value="提交">

</form>

</body>

</html>

● 编写表单的处理页deal.jsp文件,在该文件中应用上面定义的EL函数,对获取到的内容信息进行处理(主要是替换字符串中的回车换行符和空格符)后显示到页面中。deal.jsp文件的具体代码如下:

<%@ page language="java" contentType="text/html;charset=UTF-8" pa geEncoding="UTF-8"%>

<%@ taglib uri="/stringDeal" prefix="xdlfn" %>

<%request.setCharacterEncoding("UTF-8"); %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8 ">

<title>显示结果</title>

</head>

<body>

内容为:<br>

${xdlfn:shiftEnter(param.content)}

</body>

</html>

运行本实例,在页面中将显示一个内容编辑框和一个提交按钮,在内容编辑框中输入内容,然后单击提交按钮,观察新页面的变化。

在定义和使用EL函数时,可能出现以下3种错误。

● 由于没有指定完整的类型名而产生的异常信息。

在编写EL函数时,如果出现如下图所示的异常信息,则是由于在标签库描述文件中没有指定完整的类型名而产生的。

解决的方法:在扩展名为.tld的文件中指定完整的类型名即可。例如,在上面的这个一场中,就可以将完整的类型名设置java.lang.String。

● 由于在标签库的描述文件中输入了错误的标记名产生的异常信息。

● 由于定义的方法不是静态方法所产生的异常。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java程序员那些事

Java NIO 系列(转)

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作...

8910
来自专栏纯洁的微笑

Java 11正式发布,新特性解读

北京时间 9 月 26 日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注。你可以点击以下...

11030
来自专栏孙小白

Java课堂笔记1

3. 命名规则严格要求,字母、数字、下划线、美元符号$、下划线_组成,其中不能以数字开头,也不能使用Java的关键字

8430
来自专栏weixuqin 的专栏

ArrayList 源码分析

在 Java 中当创建数组时会在内存中划分一块连续的内存,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中...

7110
来自专栏玩转JavaEE

Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如...

13020
来自专栏Java程序员那些事

Java并发编程:深入剖析ThreadLocal

想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解...

8220
来自专栏IT那个小笔记

Hibernate配置

Hibernate核心配置文件传递的是连接数据库的必备信息,还有一些可选配置,所以在一个使用Hibernate的工程中需要去完成一个这样的配置文件

21510
来自专栏复盘总结文章集合

深入理解Java8 Lambda表达式

匿名函数的应用场景是: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用Lambda表达式。lambda表达式所表示的匿名函数的内容应该是很简单...

8930
来自专栏纯洁的微笑

设计一个百万级的消息推送系统

先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互。

11630
来自专栏Java程序员那些事

Java中的IO流知识总结

1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter

10810

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励