文档章节

(七)JSP之EL表达式

iborder
 iborder
发布于 2016/09/05 11:58
字数 1393
阅读 10
收藏 0

一、简介

最初定义在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对象的参数(拥有多个值)
header HTTP 信息头
headerValues HTTP 信息头值
cookie Cookie值
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>

 

© 著作权归作者所有

共有 人打赏支持
iborder
粉丝 5
博文 74
码字总数 49604
作品 0
揭阳
程序员
私信 提问
JavaWeb12-HTML篇笔记(二)

Ø 为什么学习JSTL: JSTL和EL结合 替换页面中<%%> Ø JSTL版本: JSTL1.0 :不支持EL表达式. JSTL1.1 和 1.2 :支持EL表达式. Ø JSTL的标签库:包含了五类标签. core(核心标签),fmt(国际化标签)...

我是小谷粒
2018/05/28
0
0
EL表达式和JSTL标签

EL表达式: EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识...

晨曦之光
2012/05/16
174
0
(JavaEE-09)JSP中的MVC与三层架构

JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用...

_-Leon-_
2014/07/11
0
2
Apache Tomcat8必备知识

一、Apache Tomcat 8介绍 Apache Tomcat 8支持Java EE 7规范,包括Java Servlet 3.1、JSP 2.3、Java统一表达式语言EL 3.0等。 我们可以来看看Tomcat最近几个版本分别支持的JavaEE规范。 --...

山海经
2014/05/01
0
0
解决JSTL的formatNumber 不能接受表达式的错误

今天在使用fmt:formatNumber标记时遇到一个错误,我的Jsp页面写法如下: <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>,标记使用写法如下: <fmt:formatNumber type="nu......

小克898
2013/10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
4
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
9
0
java多线程2

“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在线程安全问题。这是因为方法内部的变量都是私有造成的。 synchronized 获取的都是对象锁。如果多个线程访问多个...

一滴水穿石
昨天
4
0
今天的学习

1,document.location.href:获取整个url 2,str.split(' '):用字符分割字符串 3,$this->load->library(' '):引用图像处理类 4,$this->load->library(' '):引用Email类 5,特殊访问指针$th......

墨冥
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部