java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 java 中 JSP 页面技术之 EL 表达式概念作用以及语法等的使用,需要的朋友可以参考
一、概念
表达式语言(Expression Language),或称 EL 表达式,简称 EL,是 Java 中的一种特殊的通用编程语言,借鉴于 JavaScript 和 XPath。主要作用是在 Java web 应用程序嵌入到网页(如 JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL 在得到某个数据时,会自动进行数据类型的转换。
主要作用:
1) 获取数据
EL 表达式主要用于替换 JSP 页面中的脚本表达式 <%= %>,以从各种类型的 web 域 中检索 java 对象、获取数据。(某个 web 域 中的对象,访问 javabean 的属性、访问 list 集合、访问 map 集合、访问数组)
2) 执行运算
利用 EL 表达式可以在 JSP 页面中执行一些基本的关系运算、逻辑运算和算术运算,以在 JSP 页面中完成一些简单的逻辑运算。${user==null}
3) 获取 web 开发常用对象 EL
表达式定义了一些隐式对象,利用这些隐式对象,web 开发人员可以很轻松获得对 web 常用对象的引用,从而获得这些对象中的数据。
4) 调用 Java 方法
EL 表达式允许用户开发自定义 EL 函数,以在 JSP 页面中通过 EL 表达式调用 Java 类的方法。
注意:
表示是否禁用 EL 语言, TRUE 表示禁止. FALSE 表示不禁止. JSP2.0 中默认的启用 EL 语言
- <%@ pageisELIgnored="true" %>
二、语法
以 "${" 开始,以 "}" 作为结束:
${EL 表达式}
实例:
- ${ str } //输出字符串变量str的值
- ${ 1 + 2 } //输出1+2的结果
- ${ user.name} //输出user对象的name属性 访问对象user的getName()方法以得到name成员的值。
- ${user["name"] } //同上
- ${ sessionScope["user"].name } //同上
- ${list[0]} //访问list对象的第一项。
- ${map["key"]} //访问map指定键的值。
三、取操作符
EL 提供 . 和 [ ] 两种运算符来存取数据:
. 访问一个 Bean 属性或者一个映射条目 如:${user.name}
[] 可以访问集合或者是数组的元素、也可以访问 Bean 的属性。 如:${ arr[0].name}
异同:
相同:可以用来访问对象的属性
差异:当要存取的属性名称中包含一些特殊字符,如 . 或 ? 或 - 等非字母或数字的符号,就一定要使用 [],如
- user.my-name应{user["my-name"]}
四、运算符:
● 算术运算符有五个:+、-、*、/ 或 div、% 或 mod
● 关系运算符有六个:== 或 eq、!= 或 ne、<或 lt、> 或 gt、<= 或 le、>= 或 ge
● 逻辑运算符有三个:&& 或 and、|| 或 or、! 或 not
● 其它运算符有三个:Empty 运算符、条件运算符、() 运算符
五、隐含对象
JSP EL 支持下表列出的隐含对象:
可以在表达式中使用像变量一样使用这些对象。
按功能分组如下:
1) 访问参数值:
param : 可取得对应单个请求参数名的值。如:$(param.name) 相当于 request.getParameter (name)。
paramValues: 可根据参数名取得对于的字符串数组。如:${paramvalues.name) 相当于 request.getParamterValues(name)。
注:param 对象返回单一的字符串,而 paramValues 对象则返回一个字符串数组。
2) 访问头信息
header:可以取得请求头信息中,对应的单个字符串头值。表达式 header.name 相当于 request.getHeader(name)。如 {header["user-agent"]}。可打印出 user-agent 信息头。
headerValues:可将请求头名称映射到一个数值数组。如 ${headerValues.name} 相当于 request.getHeaderValues(name)。
注:header 对象返回单一值,而 headerValues 则返回一个字符串数组。
3) 访问其他有关用户要求或页面的详细信息
pageContext:
pageContext.request | 取得请求对象 {pageContext.session} | 取得 session 对象
pageContext.request.queryString | 取得请求的参数字符串 {pageContext.request.requestURL} | 取得请求的 URL,但不包括请求之参数字符串
pageContext.request.contextPath | 服务的 webapplication 的名称 {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 是否为新的,所谓新的 session,表示刚由 server 产生而 client 尚未使用 的
pageContext.session.id | 取得 session 的 ID{pageContext.servletContext.serverInfo}| 取得主机端的服务信息
4)访问不同作用域的变量,如 Web 上下文、会话、请求、页面:
pageScope :取得页面范围的值
如用 pageScope.objectName 访问一个 JSP 中页面范围的对象,还可以使用 {pageScope.objectName.attributeName} 访问对象的属性。
requestScope:取得请求范围的变量值
该对象允许访问请求对象的属性。如用 requestScope.objectName 访问一个 JSP 请求范围的对象,还可以使用 {requestScope.objectName.attributeName} 访问对象的属性。
sessionScope:取得会话范围的变量值
该对象允许访问会话对象的属性。如:$sessionScope.name}
applicationScope:取得应用程序范围的变量值
该隐式对象允许访问应用程序范围的对象
5) 访问 Cookie 中的值
如要取得 cookie 中有一个设定名称为 username 的值,可以使用 ${cookie.username} 来取得它。
六、使用 sun 提供的标准 EL 函数库
由于在 JSP 页面中显示数据时,经常需要对显示的字符串进行处理,SUN 公司针对于一些常见处理定义了一套 EL 函数库供开发者使用。
这些 EL 函数在 JSTL 开发包中进行描述,因此在 JSP 页面中使用 SUN 公司的 EL 函数库,需要导入 JSTL 开发包,并在页面中导入 EL 函数库。
使用 EL 函数库
1) 导入 jstl jar 包
2) 在相应的 jsp 页面添加引用
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
- <!--导入需要使用taglib指令 -->
- <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- <!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 function demo</title>
- </head>
- <body>
- <%
- String[] strs = {"a","b","c"};//定义一个字符数组
- List list = new ArrayList();//定义一个list集合
- list.add("a");//向集合中添加一个字符
- pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中
- pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中
- %>
- ${fn:length(arr) }<br/><!--3-->
- ${fn:length(list) }<br/><!--1-->
- ${fn:toLowerCase("Hello") }<br/> <!-- hello -->
- ${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
- ${fn:contains("abc", "a")}<br/><!-- true -->
- ${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
- ${fn:contains(arr, "a")}<br/><!-- true -->
- ${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
- ${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
- ${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
- ${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
- ${fn:join(arr, ";")}<br/><!-- a;b;c -->
- ${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
- ${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->
- ${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
- ${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
- ${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
- ${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
- ${fn:trim(" a b c ")}<br/><!-- a b c -->
- ${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->
- </body>
- </html>
函数库详细介绍
String toUpperCase(String input):把字符串参数转换成大写,并返回
String toLowerCase(String input):把字符串参数转换成小写,并返回
int indexOf(String input, String substring):返回 input 中 substring 出现的索引位置
boolean contains(String input, String substring):查看 input 中是否包含 substring,包含返回 true,否则返回 false;
boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看 input 中是否包含 substring,包含返回 true,否则返回 false
boolean startsWith(String input, String substring):判断 input 是否是以 substring 为前缀,如果是就返回 true,否则就返回 false
boolean endsWith(String input, String substring):判断 input 是否是以 substring 为后缀,如果是就返回 true,否则就返回 false
String substring(String input, int beginIndex, int endIndex):以 beginIndex 为开始值,endIndex 为结束值,在 input 上截取子串
String substringAfter(String input, String substring):获取 input 中,substring 所在位置后面的字符串
substringBefore(String input, String substring):获取 input 中,substring 所在位置前面的字符串 String escapeXml(String input):把 input 中 "<"、">"、"&"、"'"、""" 进行转义;
String trim(String input):去除 input 中的前后空格;
String replace(String input, String substringBefore, String substringAfter):将 input 中的 substringBefore 替换成 substringAfter;
String[] split(String input, String delimiters):以 delimiters 为标识分割 input,返回一个字符串数组;
int length(Object obj):可以获取字符串、数组、各种集合的长度;
String join(String array[], String separator):将 array 数组中的元素以 separator 连接起来,返回一个字符串
七、EL 调用自定义函数 (调用普通类的静态方法)
EL 很强大,除了使用 SUN 提供的标准 EL 函数库外,还可以调用自定义函数:
● EL 表达式语法允许开发人员开发自定义函数,以调用 Java 类的方法。语法:${prefix:method(params)}
● 在 EL 表达式中调用的只能是 Java 类的静态方法,这个 Java 类的静态方法需要在 TLD 文件中描述,才可以被 EL 表达式调用。
● EL 自定义函数用于扩展 EL 表达式的功能,可以让 EL 表达式完成普通 Java 程序代码所能完成的功能。
EL Function 开发步骤
只要实现以下三个步骤就可以在静态页面中用 ${prefix:method(params)} 调用自定义 function 了
编写一个 Java 类的静态方法
编写标签库描述符(tld)文件,在 tld 文件中描述自定义函数。
在 JSP 页面中导入和使用自定义函数
下面来个案例:
1)编写一个 Java 类的静态方法
- public class GetMax {
- public static int togetMax(int a, int b) {
- return a > b ? a: b;
- }
- }
2)编写标签库描述符(tld)
- <?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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
- version="2.0">
- <tlib-version>1.0</tlib-version><!-- 定义的版本 -->
- <short-name>mytaglib</short-name><!--这个名字可以随便取,尽量与文件名相同,这样我们知道文件在哪儿 并与prefix对应-->
- <uri>http://localhost:8080/springmvc-1</uri><!-- 这个地址是随便取得。到时候jsp页面引入这个地址 -->
- <function><!-- 定义函数 -->
- <name>toGetMax</name>
- <function-class>elfunction.GetMax</function-class><!-- 定义函数的类全名称 -->
- <function-signature>int toGetMax(int,int)</function-signature>
- <!--说明 返回值类型 函数名 以及 参数类型 -->
- </function>
- </taglib>
3)在 web.xml 中指定 tld 文件的位置(这步可以省略,因为应用会自动找到 /WEB-INF / 下的 tld 文件)
- <jsp-config>
- <taglib>
- <!-- 此处uri可以自己随便定义,但后面用时一定与这里一样 -->
- <taglib-uri>
- http://localhost:8080/springmvc-1
- </taglib-uri>
- <!-- tld文件的路径 -->
- <taglib-location>
- /WEB-INF/tags/mytaglib.tld
- </taglib-location>
- </taglib>
- </jsp-config>
4)在 JSP 页面中导入和使用自定义函数
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ taglib uri="http://localhost:8080/springmvc-1" prefix="mytaglib"%>
- <!-- prefix 是前缀的意思,应与mytaglib.tld中的<short-name>对应 -->
- <!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>custom EL function test</title>
- </head>
- <body>
- 1和2求最大值 = ${mytaglib:toGetMax(1,2)}
- </body>
- </html>
运行截图
希望本篇文章对您有所帮助
来源: http://www.phperz.com/article/17/1220/357481.html