EL(Expression Language,表达式语言)是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web应用的新途径。
1、EL的基本语法
EL表达式语法很简单,它以“${”开头,以“}”结束,中间为合法的表达式,具体的语法格式如下:
${expression}
参数说明:
expression:用于指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
技巧:由于EL表达式的语法以“${”开头,所以如果在JSP页面中要显示“${”字符串,必须在前面加上“\”符号,即“\${”,或者写成“$ {'${'}”,也就是用表达式来输出“${”符号。
1.1 通过EL输出字符串
在EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内。
示例:使用EL表达式输出字符串内容。
${'pan_junbiao的博客'}
${"pan_junbiao的博客"}
1.2 通过EL访问数据
通过EL提供的“[ ]”和“.”运算符可以访问数据。通常情况下,“[ ]”和“.”运算符是等价的,可以相互代替。
访问JavaBean对象userInfo的id属性,可以写成以下两种形式:
${userInfo.id}
${userInfo["id"]}
(1)点号操作符
在使用EL时,EL表达式一般由两部分组成,如 ${userInfo.id},其中,“.”被称作点号操作符,在点号操作符左边可以是一个JavaBean对象,也可以是EL隐式对象,点号右边可以是JavaBean属性,也可以是一个映射键。
(2)[ ]操作符
如果使用EL操作数据组,则使用“.”操作符就不能进行有效的操作,这时应该使用“[ ]”,如 ${ list[0] }。但是这并不代表“[ ]”只能操作数组,“.”操作符可以操作的对象,都可以使用“[ ]”来进行操作,如 ${userInfo["id"]} ,注意使用“[ ]”操作符时,“[ ]”中必须包含有 " " 双引号(操作数组也可以写成${ list["0"] },等价于${ list[0] })。
但是也不是所有情况都可以相互替代,例如,当对象的属性名中包括一些特殊的符号(-或.)时,就只能使用“[ ]”运算符来访问对象的属性。例如,${userInfo["user-id"]} 是正确的,而 ${userInfo.user-id} 则是错误的。另外,EL的“[ ]”运算符还有一个用途,就是用来获取数组或者List集合中的数据。
示例:使用EL表达式访问人员信息数据。
(1)创建名称为UserInfo的类,将其放置于com.pjb.bean包中,实现对人员信息的封装。
package com.pjb.bean;
/**
* 人员信息类
*
* @author pan_junbiao
*
*/
public class UserInfo
{
private String name; // 用户姓名
private String blog; // 博客地址
private String[] interests; // 兴趣爱好
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getBlog()
{
return blog;
}
public void setBlog(String blog)
{
this.blog = blog;
}
public String[] getInterests()
{
return interests;
}
public void setInterests(String[] interests)
{
this.interests = interests;
}
}
(2)创建ELShowUser.jsp页面,通过EL表达式显示人员信息。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<jsp:useBean id="user" class="com.pjb.bean.UserInfo">
<jsp:setProperty name="user" property="name" value="pan_junbiao的博客" />
<jsp:setProperty name="user" property="blog" value="https://blog.csdn.net/pan_junbiao" />
</jsp:useBean>
<%
String[] interests = {"篮球","游泳","羽毛球"};
user.setInterests(interests);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>通过EL访问数据</title>
</head>
<body>
用户姓名:${user.name} <br/> <!-- 使用点操作符 -->
博客地址:${user["blog"]} <br/> <!-- 使用[]操作符 -->
兴趣爱好:${user.interests[0]}、${user.interests[1]}、${user.interests[2]} <br/>
</body>
</html>
执行结果:
2、EL的特点
EL除了具有语法简单、使用方便的特点,还具有以下特点。
(1)EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。
(2)EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值(例如,number1和number2)的和,可以直接通过+号进行连接(例如,${number1+number2})。
(3)EL不仅可以访问一般变量,而且还可以访问JavaBean中的属性以及嵌套属性和集合对象。
(4)在EL中可以执行算术运算、逻辑运算、关系运算和条件运算等。
(5)在EL中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围的集成对象,通过它可以访问其它内置对象)。
(6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity,而不返回错误。
(7)在EL中可以访问JSP的作用域(request、session、application以及page)。
(8)扩展函数可以与Java类的静态方法进行映射。
3、与低版本的环境兼容——禁用EL
如今EL已经是一项成熟、标准的技术,只要安装的Web服务器能够支持Servlet 2.4/JSP 2.0,就可以在JSP页面中直接使用EL。由于在JSP2.0以前版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。JSP中提供了3种禁用EL的方法。
如果在使用EL时,其内容没有被正确解析,而是直接将EL内容原样显示到页面中,包括$和{},则说明Web服务器不支持EL,那么就需要检查一下EL有没有被禁用。
3.1 使用斜杠“\”符号
使用斜杠符号是一种比较简单的禁用EL的方法。该方法只需要在EL的起始标记“${”前加上“\”符号,具体的语法如下:
\${expression}
说明:该语法适合只是禁用页面的一个或几个EL表达式的情况。
3.2 使用page指令
使用JSP的page指令也可以禁用EL表达式,其具体的语法格式如下:
<%@ page isELIgnored="布尔值" %>
参数说明:
isELIgnored属性:用于指定是否禁用页面中的EL,如果属性值为true,则忽略页面中的EL,否则将解析页面中的EL。
示例:如果要忽略页面中的EL,可以在页面的顶部添加一下代码:
<%@ page isELIgnored="true" %>
说明:该方法适合禁用一个JSP页面中的EL。
3.3 在web.xml文件中配置<el-ignored>元素
在web.xml文件中配置<el-ignored>元素可以实现禁用服务器中的EL。
示例:在web.xml文件中配置<el-ignored>元素的具体代码如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored> <!--将此处的值设置为false,表示使用EL-->
</jsp-property-group>
</jsp-config>
说明:该方法适用于禁用Web应用中的所有JSP页面中的EL。
4、保留的关键字
同Java一样,EL也有自己的保留关键字,在为变量命名时,应该避免使用这些关键字,包括在使用EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其它的变量名。EL的保留关键字如下表所示。
and | eq | gt |
instanceof | div | or |
le | false | empty |
not | lt | ge |
5、EL的运算符
EL可以访问数据运算符、算术运算符、关系运算符、逻辑运算符、条件运算符及empty运算符等。
5.1 在EL中进行算术运算
在EL中,也可以进行算术运算,同Java语言一样,EL提供了加、减、乘、除和求余5种算术运算符,各运算符及其用法,如下表所示。
运算符 | 功能 | 示例 | 结果 |
---|---|---|---|
+ | 加 | ${19+1} | 20 |
- | 减 | ${66-30} | 36 |
* | 乘 | ${52.1*10} | 521.0 |
/或div | 除 | ${5/2}或${5 div 2} | 2.5 |
${9/0}或${9 div 0} | Infinity | ||
%或mod | 求余 | ${17%3}或${17 mod 3} | 2 |
${15%0}或${15 mod 0} | 将抛出异常:java.lang.ArithmeticException: / by zero |
5.2 在EL中判断对象是否为空
在EL中,判断对象是否为空,可以通过empty运算符实现,该运算符是一个前缀(prefix)运算符,即empty运算符位于操作数前方,用来确定一个对象或变量是否为null或空。empty运算符的格式如下:
${empty expression}
参数说明如下:
expression:用于指定要判断的变量或对象。
示例:定义两个request范围内的变量user1和user2,分别设置值为null和“”,然后通过empty运算符判断是否为空。
<%
request.setAttribute("user1", null);
request.setAttribute("user2", "");
%>
${empty user1} <!-- 返回值:true -->
${empty user2} <!-- 返回值:true -->
另外,empty运算符也可以与not运算符结合使用,用于判断一个对象或变量是否非空。
示例:判断request范围中的变量user1和user2是否为非空。
<%
request.setAttribute("user1", null);
request.setAttribute("user2", "");
%>
${not empty user1} <!-- 返回值:false -->
${not empty user2} <!-- 返回值:false -->
5.3 在EL中进行逻辑关系运算
在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。关系运算符用于实现对两个表达式的比较,进行比较的表达式可以是数值型,也可以是字符串型。而逻辑运算符,则常用于对boolean型数据进行操作。逻辑运算符和关系运算符经常一同使用。
5.3.1 关系运算符
在EL中,提供了6种关系运算符。这6种关系运算符不仅可以用来比较整数和浮点数,还可以用来比较字符串。关系运算符的使用格式如下:
${表达式1 关系运算符 表达式2}
EL中提供的关系运算符如下表:
5.3.2 逻辑运算符
在进行比较运算时,如果涉及两个或两个以上的判断条件时,就需要应用逻辑运算符。EL的逻辑运算符如下表:
示例:使用EL关系运算符和逻辑运算符。
<%
request.setAttribute("userName","pan_junbiao的博客"); //定义request范围内的变量userName
request.setAttribute("age","30"); //定义request范围内的变量age
%>
userName=${userName}<br> <!-- 输入变量userName -->
age=${age}<br> <!-- 输入变量age -->
\${userName!="" and (userName=="pan_junbiao的博客") }: <!-- 将EL原样输出 -->
${userName!="" and userName=="pan_junbiao的博客" }<br> <!-- 输出由关系和逻辑运算符组成的表达式的值 -->
\${userName=="pan_junbiao的博客" and age=="30" }: <!-- 将EL原样输出 -->
${userName=="pan_junbiao的博客" and age=="30" } <!-- 输出由关系和逻辑运算符组成的表达式的值 -->
执行结果:
5.4 在EL中进行条件运算
在EL中进行简单的条件运算,可以通过条件运算符实现。EL的条件运算符唯一的优点在于其非常简单和方便,和Java语言里的用法完全一致。其语法格式如下:
${条件表达式 ? 表达式1 : 表达式2}
参数说明如下:
条件表达式:用于指定一个条件表达式,该表达式的值为boolean型。可以由关系运算符、逻辑运算符和empty运算符组成。
表达式1:用于指定当条件表达式的值为true时,将要返回的值。
表达式2:用于指定当条件表达式的值为false时,将要返回的值。
示例:使用条件运算符。
<%
request.setAttribute("userName","pan_junbiao的博客");
%>
${empty userName ? "为空" : "非空" } <!-- 返回值为:非空 -->
说明:通常情况下,条件运算符可以用JSTL中的条件标签 <c:if> 或 <c:choose> 替代。
6、EL的隐含对象
为了能够获得Web应用程序中的相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作。在EL的隐含对象中,除pageContext是JavaBean对象,对应于 javax.servlet.jsp.PageContext类型外,其他的隐含对象都对应于 java.util.Map 类型。这些隐含对象可以分为页面上下文对象、访问作用域范围的隐含对象和访问环境信息的隐含对象3种。
EL提供了11个隐含对象:
隐含对象 | 说明 |
---|---|
pageContext | 页面上下文对象为pageContext,用于访问JSP内置对象(例如request、response、out、session、exception和page等,但不能用于获取application、config和pageContext对象)和servletContext。在获取到这些内置对象后,就可以获取其属性值。 |
pageScope | 用于返回包括 page(页面)范围内的属性值的集合,返回值为 java.util.Map 对象。 |
requestScope | 用于返回包括 request(请求)范围内的属性值的集合,返回值为 java.util.Map 对象。 |
sessionScope | 用于返回包括 session(会话)范围内的属性值的集合,返回值为 java.util.Map 对象。 |
applicationScope | 用于返回包括 application(应用)范围内的属性值的集合,返回值为 java.util.Map 对象。 |
param | 用于获取请求参数的值,应用在参数值只有一个的情况。在应用param隐含对象时,返回结果为字符串。 |
paramValues | 用于当请求参数名对应多个值时获取参数的结果,在应用paramValues隐含对象时,返回结果为数组。 |
header | 用于获取HTTP请求的一个具体的header的值。 |
headerValues | 用于获取HTTP请求的一个具体的header的值,但是在有些情况下,可能存在同一个header拥有多个不同的值的情况,这时就必须使用headerValues隐含对象。 |
initParam | 用于获取Web应用初始化参数的值。 |
cookie | 用于获取cookie对象,如果在cookie中已经设置一个名为username的值,那么可以使用 ${cookie.username} 来获取该cookie对象。但是如果要获取cookie中的值,需要使用cookie对象的value属性。 |
6.1 页面上下文对象
页面上下文对象为pageContext,用于访问JSP内置对象(例如request、response、out、session、exception和page等,但不能用于获取application、config和pageContext对象)和servletContext。在获取到这些内置对象后,就可以获取其属性值。这些属性与对象的getXXX()方法相对应,在使用时,去掉方法名中的get,并将首字母改为小字即可。
6.1.1 访问request对象
通过pageContext获取JSP内置对象中的request对象,可以使用下面语句:
${pageContext.request}
获取到request对象后,就可以通过该对象获取与客户端相关的信息。例如,HTTP报头信息、客户信息提交方式、客户端主机IP地址和端口号等。
示例:访问getServerPort()方法,获取收到请求的端口号。
${pageContext.request.serverPort}
这句代码将返回端口号:8080
注意:不可以通过pageContext对象获取保存到request范围内的变量。如果需要获取,可以通过request对象范围内的变量名称,如下代码:
<%
request.setAttribute("userName","pan_junbiao的博客");
%>
${userName}
页面输出结果:pan_junbiao的博客
6.1.2 访问response对象
通过pageContext获取JSP内置对象中的response对象,可以使用下面语句:
${pageContext.response}
获取到response对象后,就可以通过该对象获取与响应相关的信息。
示例:获取响应的内容类型。
${pageContext.response.contentType}
这句代码将返回响应的内容类型:text/html;charset=UTF-8
6.1.3 访问out对象
通过pageContext获取JSP内置对象中的out对象,可以使用下面语句:
${pageContext.out}
获取到out对象后,就可以通过该对象获取与输出相关的信息。
示例:输出缓冲区的大小。
${pageContext.out.bufferSize}
这句代码将返回输出缓冲区的大小:8192
6.1.4 访问session对象
通过pageContext获取JSP内置对象中的session对象,可以使用下面语句:
${pageContext.session}
获取到session对象后,就可以通过该对象获取与session相关信息。
示例:获取session的有效时间。
${pageContext.session.maxInactiveInterval}
这句代码将返回session的有效时间:1800秒,即30分钟。
6.1.5 访问exception对象
通过pageContext获取JSP内置对象中的exception对象,可以使用下面语句:
${pageContext.exception}
获取到exception对象后,就可以通过该对象获取JSP页面的异常信息。
示例:获取异常信息字符串。
${pageContext.exception.message}
说明:在使用该对象时,也需要在可能出现错误的页面中指定错误处理页面,并且在错误处理页面中指定page指令的 isErrorPage 属性值为true,然后再使用上面的EL输出异常信息。
6.1.6 访问page对象
通过pageContext获取JSP内置对象中的page对象,可以使用下面语句:
${pageContext.page}
获取到page对象后,就可以通过该对象获取当前页面的类文件。
示例:获取到page对象后,就可以通过该对象获取当前页面的类文件。
${pageContext.page.class}
6.1.7 访问servletContext对象
通过pageContext获取JSP内置对象中的servletContext对象,可以使用下面语句:
${pageContext.servletContext}
获取到servletContext对象后,就可以通过该对象获取servlet上下文信息。
示例:获取上下文路径。
${pageContext.servletContext.contextPath}
这句代码将返回当前页面的上下文路径:/firstweb
6.2 访问作用域范围的隐含对象
在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对象指定所要查找的标识符的作用域后,系统将不再按照默认的顺序(page、request、session及application)来查找相应的标识符。它们与JSP中的page、request、session及application内置对象类似。只不过这4个隐含对象只能用来取得指定范围内的属性值,而不能取得其他相关信息。
6.2.1 pageScope隐含对象
pageScope隐含对象用于返回包括 page(页面)范围内的属性值的集合,返回值为 java.util.Map 对象。
示例:通过pageScope隐含对象读取page范围内的JavaBean的属性值。
(1)创建一个名称为UserInfo的JavaBean对象,并将其保存到 com.pjb.bean 包中。
package com.pjb.bean;
/**
* 人员信息类
*
* @author pan_junbiao
*
*/
public class UserInfo
{
private String name; // 用户姓名
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
(2)编写index.jsp页面,在该页面中使用<jsp:useBean>动作标签,创建一个page范围内的JavaBean实例,并设置name属性的值。
<jsp:useBean id = "user" scope="page" class="com.pjb.bean.UserInfo">
<jsp:setProperty name = "user" property="name" value="pan_junbiao的博客"/>
</jsp:useBean>
(3)在index.jsp页面中的<body>标记中,使用pageScope隐含对象获取该JavaBean实例的name属性值。
${pageScope.user.name}
运行本示例,将在显示:pan_junbiao的博客
6.2.2 requestScope隐含对象
requestScope隐含对象用于返回包括 request(请求)范围内的属性值的集合,返回值为 java.util.Map 对象。
示例:获取保存在request范围内的变量值。
<%
request.setAttribute("userName", "pan_junbiao的博客");
%>
${requestScope.userName}
6.2.3 sessionScope隐含对象
sessionScope隐含对象用于返回包括 session(会话)范围内的属性值的集合,返回值为 java.util.Map 对象。
示例:获取保存在session范围内的变量值。
<%
session.setAttribute("userName", "pan_junbiao的博客");
%>
${sessionScope.userName}
6.2.4 applicationScope隐含对象
applicationScope隐含对象用于返回包括 application(应用)范围内的属性值的集合,返回值为 java.util.Map 对象。
示例:获取保存在application范围内的变量值。
<%
application.setAttribute("userName", "pan_junbiao的博客");
%>
${applicationScope.userName}
6.3 访问环境信息的隐含对象
在EL中,提供了6个访问环境信息的隐含对象。下面将对这6个隐含对象进行详细介绍。
6.3.1 param隐含对象
param隐含对象用于获取请求参数的值,应用在参数值只有一个的情况。在应用param隐含对象时,返回结果为字符串。
示例:使用param隐含对象获取请求参数的值。
(1)在JSP页面中,<form>表单中放置一个名称为name的文本框。
<input type="text" name="name"/>
(2)当表单提交后,获取name文本框的值。
${param.name}
6.3.2 paramValues隐含对象
paramValues隐含对象用于当请求参数名对应多个值时获取参数的结果,在应用paramValues隐含对象时,返回结果为数组。
示例:使用paramValues隐含对象获取请求参数名对应多个值。
(1)在JSP页面中,<form>表单中放置一个名称为interests的复选框组。
<input type="checkbox" name="interests" value="足球" />足球
<input type="checkbox" name="interests" value="篮球" />篮球
<input type="checkbox" name="interests" value="羽毛球" />羽毛球
<input type="checkbox" name="interests" value="乒乓球" />乒乓球
当表单提交后,获取interests复选框组的值。
<%request.setCharacterEncoding("UTF-8"); %>
${paramValues.interests[0]}
${paramValues.interests[1]}
${paramValues.interests[2]}
${paramValues.interests[3]}
注意:在应用param和paramValues隐含对象时,如果指定的参数不存在,则返回空字符串,而不是返回null。
6.3.3 header和headerValues隐含对象
header隐含对象用于获取HTTP请求的一个具体的header的值,但是在有些情况下,可能存在同一个header拥有多个不同的值的情况,这时就必须使用headerValues隐含对象。
示例:获取HTTP请求的header的connection(是否需要持久连接)属性。
${header.connection} 或者 ${header["connection"]}
输出结果:Keep-Alive 或者 Keep-Alive
但是,如果要获取HTTP请求的header的user-agent属性,则必须使用以下EL表达式:
${header["user-agent"]}
输出结果:Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko
6.3.4 initParam隐含对象
initParam隐含对象用于获取Web应用初始化参数的值。
示例:使用initParam隐含对象获取Web应用初始化参数的值。
(1)在Web应用的 web.xml 文件中设置一个初始化参数author,用于指定作者。
<context-param>
<param-name>author</param-name>
<param-value>pan_junbiao的博客</param-value>
</context-param>
(2)使用initParam隐含对象获取初始化参数author的值。
作者:${initParam.author}
输出结果:作者:pan_junbiao的博客
6.3.5 cookie隐含对象
虽然在EL中并没有提供向cookie中保存值的方法,但是它提供了访问有请求设置的cookie的方法,这可以通过cookie隐含对象实现。如果在cookie中已经设置一个名为username的值,那么可以使用 ${cookie.username} 来获取该cookie对象。但是如果要获取cookie中的值,需要使用cookie对象的value属性。
示例:使用response对象设置一个请求有效的cookie对象,然后再使用EL获取该cookie对象的值。
<%
Cookie cookie = new Cookie("user","pan_junbiao的博客");
response.addCookie(cookie);
%>
cookie对象中保存的值:${cookie.user.value}
输出结果:cookie对象中保存的值:pan_junbiao的博客
说明:所谓的cookie是一个文本文件,它是以key、value的方法将用户会话信息记录在这个文本文件内,并将其暂时存放在客户端浏览器中。
7、定义和使用EL的函数
在EL中,允许定义和使用函数。下面将介绍如何定义和使用EL函数。
7.1 定义和使用函数
函数的定义和使用可以分为以下3个步骤。
(1)编写一个Java类,并在该类中编写公用的静态方法,用于实现自定义EL函数的具体功能。
(2)编写标签库描述文件,对函数进行声明。该文件的扩展名为.tld,被保存到Web应用的WEB-INF文件夹下。
(3)在JSP页面中引用标签库,并调用定义的EL函数,实现相应的功能。
示例:定义EL函数处理字符串中的回车换行符和空格符。
(1)编写一个Java类,名称为StringDeal,将其保存在com.pjb.el包中,在该类中添加一个公共静态方法shiftEnter(),在该方法中替换输入字符串中的回车换行符为<br>,空格符为“ ”,最后返回新替换后的字符串。
package com.pjb.el;
/**
* 字符串公共处理类
*
* @author pan_junbiao
*
*/
public class StringDeal
{
/**
* 定义公用的静态方法:替换字符串中的回车换行符
*
* @param str 字符串内容
* @return
*/
public static String shiftEnter(String str)
{
String newStr = str.replaceAll("\r\n", "<br>"); // 替换回车换行符
newStr = newStr.replaceAll(" ", " ");// 替换空格符
return newStr;
}
}
(2)编写标签库描述文件,名称为 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.pjb.el.StringDeal</function-class>
<function-signature>java.lang.String shiftEnter(java.lang.String)</function-signature>
</function>
</taglib>
参数说明:
<uri>标记:用于指定tld文件的映射路径。在应用EL函数时,需要使用该标记指定的内容。
<name>标记:用于指定EL函数所对应方法的方法名,通常与Java文件中的方法名相同。
<function-class>标记:用于指定EL函数所对应的Java文件,这里需要包括包名和类名。
<function-signature>标记:用于指定EL函数所对应的静态方法,这里包括返回值的类型和入口参数的类型。在指定这些类型时,需要使用完整的类型名。
(3)编写index.jsp页面,在该页面中添加一个表单及表单元素,用于收集内容信息。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>定义EL函数处理字符串中的回车换行符和空格符</title>
</head>
<body>
<form name="form1" method="post" action="deal.jsp">
<textarea name="content" cols="50" rows="5"></textarea>
<br>
<input type="submit" name="Button" value="提交" >
</form>
</body>
</html>
(4)编写表单的处理页面deal.jsp页面,在该页面中应用上面定义的EL函数,对获取到的内容信息进行处理后显示到页面中。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/stringDeal" prefix="strDeal" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示结果</title>
</head>
<body>
内容为:<br>
${strDeal:shiftEnter(param.content)}
</body>
</html>
执行结果:
(1)输入文本的index.jsp页面。
(2)点击“提交”后,显示处理结果的deal.jsp页面。