(七)JSP之EL表达式

一、简介

最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。

EL表达式定义了一系列的隐式对象和操作符,使得开发人员能够更方便地访问页面上下文,以及不同作用域内的对象。

EL语法如下:

${El表达式}

在JSP页面中我们可以禁用EL表达式,需要配置page指令的isELIgnored属性,属性值若为true则支持EL表达式,若为false则禁用表达式,默认情况下是支持EL表达式的。

二、EL表达式-隐式对象

隐式对象说明
pageContext当前页面的pageContext对象
pageScope表示page 作用域
requestScope表示request 作用域
sessionScope表示session 作用域
applicationScope表示application 作用域
param接收Request 对象的参数(只有一个值)
paramValues接收Request对象的参数(拥有多个值)
headerHTTP 信息头
headerValuesHTTP 信息头值
cookieCookie值
initParam取得配置的初始化参数

1 . 作用域访问对象

pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。

实例1

${pageScope.name}

如果EL表达式中不指定查找范围,例如:

${name}

Web容器将会自动按照page >> request >> session >> application的顺序查找

2 . 参数访问对象

param和paramValues对象用来访问页面输入参数,通过调用request.getParameter方法和request.getParameterValues方法,可以得到用户的请求参数。

param对象用于得到请求中单一名称的参数;paramValue对象用于得到请求中的多个值

实例1 ELSubmitParam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
		<body>	
		<form action='ELParam.jsp' method='post'>
			姓名:<input type='text' name='user' /><br />
			年龄:<input type='text' name='ages' /><br />
			<label for='football'>足球</label><input type='checkbox' name='sport' id='football' value="football"/>
			<label for='swimming'>游泳</label><input type='checkbox' name='sport' id='swimming' value="swimming"/>
			<label for='run'>步行</label><input type='checkbox' name='sport' id='run' value="run"/><br />
			<input type='submit' value='提交' />
		</form>
	</body>
</html>

实例2 ELParam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<%
			request.setCharacterEncoding("UTF-8");
		%>
		<h2>用户提交的参数</h2>
		<p>姓名 : ${param.user }</p>
		<p>年龄 : ${param.ages }</p>
		<p>运动 : ${paramValues.sport[0] } ${paramValues.sport[1] } ${paramValues.sport[2] }</p>
	</body>
</html>

3 . 其他隐式对象

(1)pageContext对象

pageContext对象是JSP中pageContext对象的引用。

实例1

${pageContext.request.property}取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,不包括参数字符串
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr} 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息

(2)header和headerValues对象

用来读取请求的信息头 。

实例1

${header["UserAgent"]} 获取浏览器的版本信息

(3)cookie对象

读取用户请求中的cookie参数

实例1

${cookie.JSESSIONID.value }

(4)initParam对象

读取设置在web.xml中配置的相关参数。等价于调用application.getInitParameter()或 servletContext.getInitParameter()方法。

三、EL表达式-基本操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符:

.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
( )组织一个子表达式以改变优先级
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值

注意:

1 . EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。

2.   empty 判断EL表达式中的表达式是否为空.

实例1

${empty sessionScope.user}

四、EL表达式-函数

EL表达式语法允许开发人员开发并调用自定义函数,也可以调用 JSTL函数(本篇笔记中不作详细介绍)。

EL函数必须是一个public修饰的类,且EL表达式调用的方法必须是public修饰的且为静态方法。

EL自定义hsh开发步骤如下:

1 .  编写调用自定义函数的类,编写类中具体实现的静态方法

实例1

package cn.iborder.elfn;
public class ELfn {
	
	public static String elfn1(String name){
        return "EL自定义函数";
    }
}

2 .  建立TLD文件,定义表达式函数

实例1

<?xml version="1.0" encoding="GBK"?>
<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>el</short-name>
	<!-- 定义第一个函数 -->
	<function>
		<name>elfn</name>
		<function-class>cn.iborder.elfn.ELfn</function-class>
		<!-- 定义函数的对应方法 -->
		<function-signature>
			java.lang.String elfn()
		</function-signature>
	</function>
	
</taglib>

3 .  在JSP页面内导入并且使用

实例1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="el" uri="/WEB-INF/elfn.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>自定义EL函数</title>
	</head>
	<body>
		<h1>${el:elfn() }</h1>
	</body>
</html>

 

转载于:https://my.oschina.net/u/2321708/blog/742438

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值