首頁  >  文章  >  Java  >  分享一個JSP頁面技術之EL表達式整理歸納總結

分享一個JSP頁面技術之EL表達式整理歸納總結

Y2J
Y2J原創
2017-04-28 10:04:031692瀏覽

這篇文章主要介紹了java中JSP頁面技術之EL表達式概念作用以及語法等的使用,需要的朋友可以參考

##一、概念

#表達式語言(Expression Language),或稱為EL表達式,簡稱EL,是Java中的一種特殊的通用程式語言,借鑑於JavaScript和XPath。主要作用是在Java Web應用程式嵌入到網頁(如JSP)中,用以存取頁面的上下文以及不同作用域中的物件 ,取得物件屬性的值,或執行簡單的運算或判斷操作。 EL在得到某個資料時,會自動進行資料型別的轉換。

主要作用:

1) 取得資料

EL表達式主要用於取代JSP頁面中的腳本表達式332000003288cabbdff89f9a8e5a919b,以從各種類型的web域擷取java物件、取得資料。 (某個web域中的對象,存取javabean的屬性、存取list集合、存取map集合、存取陣列)

#2) 執行運算

利用EL表達式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以便在JSP頁面中完成一些簡單的邏輯運算。 ${user==null}

3) 取得web開發常用對象EL

#表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以輕鬆取得web常用物件的引用,從而獲得這些物件中的資料。

4) 呼叫Java方法

EL表達式可讓使用者開發自訂EL函數,以在JSP頁面中透過EL表達式呼叫Java類別的方法。

注意adf3b8aa8db18187d24662ba8ddd5ab1 表示是否停用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中預設的啟用EL語言

二、語法

以「${」開始,以「}」結束:

# ${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” ]}

四、運算子:

● 算術運算子有五個:+、-、*、/或p、%或mod

● 關係運算子有六個:==或eq、!=或ne、6cfdd806b84cbadba17d82ae3a8f75a9或gt、a6c610e78c0586ca59596c79ce00e86a=或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|取得使用的協定(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中“a49f0050de68a7521e560d1cb8dde1e7“、”&“、”'“、“””进行转义;

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>

运行截图

以上是分享一個JSP頁面技術之EL表達式整理歸納總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn