【Java.Web】JSP —— EL —— 基础
来源:互联网 发布:新版mac如何强制关机 编辑:程序博客网 时间:2024/06/05 18:35
EL表达式
JSP 2.0 中最重要的特性之一是Expression Language ( EL ) , JSP 设计者可以用它访问应用程序数据。受ECMAScript 和XPath 表达式语言的启发, EL 被设计成能够轻松地编写无脚本或不包含Java 代码的JSP 页面,即不使用JSP 声明、表达式或者Scriptlet 的页面。
EL 最早应用于JSP Standard Tag Library (JSTL ) 1. 0 规范中首次出现的JSP 2.0 中。JSP 1 . 2 的程序员可以通过将标准的类库导入到他们的应用程序当中,来使用这种语言。JSP 2.0 及以上版本的开发者则不需要JSTL 就可以使用EL ,不过有许多应用程序仍然需要JSTL ,因为它还包含了与EL 无关的其他标签。
这种表达式语言能简化JSP文件中数据访问大代码。可用来替代传统的基于“<%=”和“%>”形式的Java表达式,以及部分基于“<%”和“%>”形式的Java程序片段。
EL表达式能大大简化JSP代码,并能够提高JSP代码的可读性。
尽管EL表达式是JSP新版本的一个重要特性,但它并不是一种通用的编程语言,它仅仅是一种数据访问语言。
EL 表达式语法
EL表达式是以"${"开头,以"}"结束。EL表达式的构造如下:
${expression}
如果在JSP文件的模板文本中使用EL表达式,那么表达式的值会输出到网页上。
例如:
以下的Java表达式和EL表达式的作用相同,都用于输出请求参数username:
<%= request.getParameter("username") %>${param.username }
EL表达式和Java表达式一样,即可以直接插入到JSP文件的模板文本中,也可以作为JSP标签的属性的值。
字符 ${ 表示某一个EL表达式的开始;如果想要在EL表达式中使用 ${ , 需要使用转义:\${
EL中的保留字
and or not
eq ne lt
gt le ge
true false null
instanceof empty mod
访问对象的属性及数组的元素 [] 和 .
EL表达式语言可以使用点号运算符 “,”来访问对象的属性。
例如: 表达式 ${customer.name}表示customer对象的name属性。
EL表达式语言也可以使用方括号运算符 “[]”来访问对象的属性。
例如:表示式${customer["name"]} 和上面的表达式是等价的。
方括号运算符“[]” 还可以用来访问数组中的元素。
例如:${customers[0]}表示访问customers数组中的第一个元素。
EL运算符
EL表达式支持的所有的运算符如下:
- 算数运算符
- + —— 加; 例如:${16 + 5}, 结果21
- - —— 减;例如:${16 - 5}, 结果11
- * —— 乘; 例如:${16 * 5},结果为80
- / 或 div —— 除;例如:${16 / 5},结果为3.2
- % 或 mod —— 模;例如:${16 % 5},结果为1
- 关系运算符
- == 或 eq —— 等于;例如:${16 == 5},结果为false
- != 或 ne —— 不等于;例如:${16 != 5},结果为true
- < 或 lt —— 小于;例如:${16 < 5},结果为false
- > 或 gt —— 大于;例如:${16 > 5},结果为true
- <= 或 le —— 小于等于;例如:$(16 <= 5),结果为flase
- >= 或 ge —— 大于等于;例如:${16 >= 5},结果为true
- 逻辑运算符
- && 或 and —— 逻辑与;例如:${ 16 > 5 && 16 < 18},结果为true
- || 或 or —— 逻辑或;例如:${16 > 5 || 16 < 18},结果为true
- ! 或 not —— 逻辑非;例如:${!(16 >5)},结果为false
- empty运算符
- empty —— 检查是否为空值;例如:${empty var},如果变量var为null,就返回true
- 如果var变量不存在,即没有被定义,返回true
- 如果var变量的职位null,返回true
- 如果var变量引用集合,如set,list,map等类型的对象,并且在集合对象中不包含任何元素,返回true
- empty运算符可以与“!”运算符一起使用
- 条件运算符
- a?b:c —— 条件运算符;例如${16 > 5? 16 ; 5},结果为16
使用示例:
el_test.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ page import="java.util.HashMap" %><!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.getParameter("username") %>${param.username }<br/>(1) ${empty pageScope.container} <br/><% HashMap container = new HashMap(); pageContext.setAttribute("container", container, PageContext.PAGE_SCOPE);%>(2) ${empty pageScope.container } <br/><% container.put("name", "new user"); %>(3) ${empty pageScope.container } <br/>(4) ${empty param.username } <br/>(5) ${! empty param.username } <br/></body></html>
访问上面的JSP文件,浏览器显示为:
隐含对象
EL表达式定义了11个隐含对象,它们都是java.util.Map类型。
在EL表达式中无法直接访问JSP文件中的隐含对象。
例如通过表达式${request.requestURL}来访问HttpServletRequest对象的requestURL属性是无效的,正确的表达式为${pageContext.request.requestURL}
- 表示HTTP请求中的特定数据:
- header
- java.util.Map
- 把HTTP请求头部的项目名和项目值进行映射;
- 例如:${heaser["user-agent"]}等价于 <%= request.getHeader("user-agent") %>
- headValues
- java.util.Map
- 把HTTP请求头部的项目名和所有匹配的项目值的数组进行映射;
- 例如:${headerValues["accept-language"]} 等价于 <%= request.getHeader("accept-language") %>
- param
- java.util.Map
- 把客户请求中的请求参数名和参数值进行映射;
- 例如:${param.username} 等价于 <%= request.getParameter("username")%>
- paramValues
- java.util.Map
- 把客户请求中的请求参数名和所有破陪的参数值数组进行映射;
- 例如:${paramValues.username} 等价于 <%= request.getParameterValues("username") %>
- cookie
- java.util.Map
- 把客户请求中的Cookie名和Cookie对象进行映射;
- header
- 表示特定范围:
- pageScope
- java.util.Map
- 把页面范围内的属性名和属性值进行映射;
- requestScope
- java.utilMap
- 把请求范围内的属性名和属性值进行映射;
- sessionScope
- java.util.Map
- 把会话范围内的属性名和属性值进行映射;
- 例如:${sessionScope.cart.total} 等价于 调用会话范围内的属性名为“cart”的ShoppingCart对象的getTotla方法
- applicationScope
- java.util.Map
- 把Web应用范围内的属性名和属性值进行映射;
- 例如:${applicationScope.counter.count} 等价于 调用Web应用范围内的属性名为"counter"的CounterBean对象的getCount()方法
- pageScope
- pageContext
- java.util.Map
- 表示PageContext对象
- 表示当前JSP页面的javax.servlet.jsp.PageContext对象
- pageContext对象包含所有其他的JSP隐式对象:request, response, out, session, application, config, pageContext, page, exception
- 例如:${pageContext.servletContext.serverInfo} 等价于 <%= application.getServerInfo() %>
- 例如:${pageContext.request.requestURL} 等价于 <%= request.getRequestURL() %>
- 例如:${pageContext.response.characterEncoding } 等价于 <%= response.getCharacterEncoding() %>
- 例如:${pageContext.session.creationTime } 等价于 <%= session.getCreationTime() %>
- initParam
- java.util.Map
- 把Web应用的初始化参数名和参数值进行映射
- 例如:${initParam.driver} 等价于 <%= application.getInitParameter("driver") %>
命名变量
EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或者实例成员变量,而是存放在特定范围内的属性。命名变量的名字和属性名字对应,
例如:(1)
${username}
等价于以下代码:
<% // 从所有范围内寻找名为“username”的属性 String username = (String)pageContext.findAttribute("username"); if (username != null) {%><%= username %><% }%>
(2)
${cart.total}
等价于以下代码:
<% // 从所有范围内寻找名为“cart”的属性 ShoppingCart cart = (ShoppingCart)pageContext.findAttribute("cart"); if (cart != null) {%><%= cart.getTotal() %><% }%>
在ShoppingCart类中只要提供了public类型的getTotal()方法,就可以通过${cart.total}表达式获得cart.getTotal()方法的返回值。
(3)
<% String username = "new user";%>${username}
以上代码不会打印username局部变量。因为${username}代表特定范围内的username属性,如果在所有范围内都不存在username属性,那么${username}没有任何打印结果。
(4)
<% pageContext.setAttribute("username", "new user", PageContext.SESSION_SCOPE);%>${username}
以上代码会打印出会话范围内的username属性值。
(5)
如何实现知道命令变量的范围,也可以通过隐含变量pageScope,requestScope,sessionScope,applicationScope来访问命名变量。
例如:
${sessionScope.username}${applicationScope.username}
使用EL表达式的JSP范例
示例1 - 读取HTML表单数据
创建elform.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><h3>Fill - out -form</h3><p/><form action="elform.jsp" method="get"> name = <input type="text" name="username" value='${param["username"]}'/> <input type="submit" value=“Submit” /></form>The name is ${param.username}</body></html>
在浏览器中访问如下的url:
http://localhost:8080/base-webapp/jsp/eljsp/elform.jsp
输入值点击submit:
示例2 - 使用命名变量
创建一个elvariable.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><jsp:useBean id="testBean" scope="page" class="com.gof.test.bean.TestBean"></jsp:useBean><jsp:setProperty property="id" name="testBean" value="the id"/><jsp:setProperty property="firstName" name="testBean" value='${testBean.id}'/>Current id value is: ${testBean.id}<br/><% application.setAttribute("driver", "com.mysql.jdbc.Driver");%>Current driver is: ${applicationScope.driver}</body></html>
testBean为 动作action 一节中, jsp:useBean所创建的Bean.
<jsp:useBean>动作将testBean对象加入到PAGE SCOPE范围内的属性中,因此在EL表达式中可以取出这个对象的引用。
在浏览器中访问这个JSP,
http://localhost:8080/base-webapp/jsp/eljsp/elvariable.jsp
定义和使用EL函数 - 结合自定义标签库
EL表达式语言可以访问EL函数。
EL函数实际上与Java类中的方法对应,这个Java类必须定义为public类型,并且作为EL函数的方法必须声明为public static类型。
当Java类定义好后,应该在标签库描述符(TLD)文件中,把Java类的方法映射为EL函数。
- 【Java.Web】JSP —— EL —— 基础
- Java web基础总结十之—— jsp EL表达式
- Java web基础总结十之—— jsp EL表达式
- 【Java.Web】JSP —— EL —— 其他
- 【Java.Web】JSP —— 语法基础
- java web——JSP基础语法
- Java web基础总结八之—— jsp基础
- JSP基础(二十五)——EL表达式
- JSP——EL表达式
- jsp——el表达式
- JSP——EL表达式
- 【Java.Web】JSP —— 语法基础 —— 其他
- 【Java.Web】JSP —— 语法基础 —— 总结
- 【Java.Web】JSP —— HTML, Servlet,JSP比较, JSP基础
- Java web基础总结九之—— jsp标签
- Java进阶学习第十二天——JSP JavaBean EL
- Java Web—初识jsp
- 【Java.Web】JSP —— 标签库taglib —— 自定义JSP标签 —— 基础
- Service和Thread的关系
- 盲目匆忙,而忘记了思考
- 黑马程序员------object-c面相对象_类的实例化
- mac 常用软件备份
- C# 程序员最常犯的 10 个错误
- 【Java.Web】JSP —— EL —— 基础
- .NET进阶—Nhibernate之Session
- zoj 3814
- java压缩与解压压缩文件
- 国庆要完了 以后打算多研究下linux
- linux文件系统实现浅析
- 无需sdk流量工具代码
- ubuntu14.04中 gedit 注释能显示中文,而source insight中显示为乱码的解决办法
- 黑马程序员——JAVA基础拾遗之泛型和集合框架(二)