EL(表达式语言)

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的保留关键字如下表所示。

andeqgt
instanceofdivor
lefalseempty
notltge

 

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>,空格符为“&nbsp;”,最后返回新替换后的字符串。

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(" ", "&nbsp;");// 替换空格符
		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页面。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值