- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章JAVA JSP页面技术之EL表达式整理归纳总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、概念 。
表达式语言(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类的方法.
注意:<%@ pageisELIgnored=”true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言 。
2、语法 。
以“${”开始,以“}”作为结束:
${EL表达式} 。
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
${ str }
//输出字符串变量str的值
${
1
+
2
}
//输出1+2的结果
${ user.name}
//输出user对象的name属性 访问对象user的getName()方法以得到name成员的值。
${user[“name”] }
//同上
${ sessionScope[“user”].name }
//同上
${list[
0
]}
//访问list对象的第一项。
${map[“key”]}
//访问map指定键的值。
|
3、取操作符 。
EL提供 . 和 [ ] 两种运算符来存取数据:
. 访问一个Bean属性或者一个映射条目 如:${ user.name} 。
[ ] 可以访问集合或者是数组的元素、也可以访问Bean的属性。 如:${ arr[0].name} 。
异同:
相同:可以用来访问对象的属性 。
差异:当要存取的属性名称中包含一些特殊字符,如 . 或 ? 或 - 等非字母或数字的符号,就一定要使用 [],如user.my-name应{user[“my-name”]} 。
4、运算符:
● 算术运算符有五个:+、-、*、/或div、%或mod 。
● 关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge 。
● 逻辑运算符有三个:&&或and、||或or、!或not 。
● 其它运算符有三个:Empty运算符、条件运算符、()运算符 。
5、隐含对象 。
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} 来取得它.
6、使用sun提供的标准 EL函数库 。
由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用.
这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库.
使用EL函数库 。
1) 导入 jstl jar包 。
2) 在相应的jsp页面添加引用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<%@ 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连接起来,返回一个字符串 。
7、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类的静态方法 。
1
2
3
4
5
|
public
class
GetMax {
public
static
int
togetMax(
int
a,
int
b){
return
a>b?a:b;
}
}
|
2)编写标签库描述符(tld) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?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文件) 。
1
2
3
4
5
6
7
8
9
10
11
12
|
<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页面中导入和使用自定义函数 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<%@ 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.2cto.com/kf/201701/585339.html 。
最后此篇关于JAVA JSP页面技术之EL表达式整理归纳总结的文章就讲到这里了,如果你想了解更多关于JAVA JSP页面技术之EL表达式整理归纳总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在阅读Practical Foundations for Programming Languages并发现迭代和同时归纳定义很有趣。我能够很容易地对偶函数和奇函数的相互递归版本进行编码 onli
我是一名优秀的程序员,十分优秀!