最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA JSP頁面技術之EL表達式整理歸納總結(jié)

 更新時間:2017年04月20日 16:36:34   投稿:wbb  
這篇文章主要介紹了java中JSP頁面技術之EL表達式概念作用以及語法等的使用,需要的朋友可以參考

一、概念

表達式語言(Expression Language),或稱EL表達式,簡稱EL,是Java中的一種特殊的通用編程語言,借鑒于JavaScript和XPath。主要作用是在Java Web應用程序嵌入到網(wǎng)頁(如JSP)中,用以訪問頁面的上下文以及不同作用域中的對象 ,取得對象屬性的值,或執(zhí)行簡單的運算或判斷操作。EL在得到某個數(shù)據(jù)時,會自動進行數(shù)據(jù)類型的轉(zhuǎn)換。

主要作用:

1) 獲取數(shù)據(jù)

EL表達式主要用于替換JSP頁面中的腳本表達式<%= %>,以從各種類型的web域 中檢索java對象、獲取數(shù)據(jù)。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數(shù)組)

2) 執(zhí)行運算

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

3) 獲取web開發(fā)常用對象 EL

表達式定義了一些隱式對象,利用這些隱式對象,web開發(fā)人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數(shù)據(jù)。

4) 調(diào)用Java方法

EL表達式允許用戶開發(fā)自定義EL函數(shù),以在JSP頁面中通過EL表達式調(diào)用Java類的方法。

注意<%@ pageisELIgnored=”true” %> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認的啟用EL語言

二、語法

以“${”開始,以“}”作為結(jié)束:

${EL表達式}

實例:

${ str } //輸出字符串變量str的值

${ 1 + 2 } //輸出1+2的結(jié)果

${ user.name} //輸出user對象的name屬性 訪問對象user的getName()方法以得到name成員的值。

${user[“name”] } //同上

${ sessionScope[“user”].name } //同上

${list[0]} //訪問list對象的第一項。

${map[“key”]} //訪問map指定鍵的值。

三、取操作符

EL提供 . 和 [ ] 兩種運算符來存取數(shù)據(jù):

. 訪問一個Bean屬性或者一個映射條目 如:${ user.name}

[ ] 可以訪問集合或者是數(shù)組的元素、也可以訪問Bean的屬性。 如:${ arr[0].name}

異同:

相同:可以用來訪問對象的屬性

差異:當要存取的屬性名稱中包含一些特殊字符,如 . 或 ? 或 - 等非字母或數(shù)字的符號,就一定要使用 [],如user.my-name應{user[“my-name”]}

四、運算符:

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

● 關系運算符有六個:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

● 邏輯運算符有三個:&&或and、||或or、!或not

● 其它運算符有三個:Empty運算符、條件運算符、()運算符

五、隱含對象

JSP EL支持下表列出的隱含對象:

可以在表達式中使用像變量一樣使用這些對象。

按功能分組如下:

1) 訪問參數(shù)值:

param : 可取得對應單個請求參數(shù)名的值。如:$(param.name) 相當于 request.getParameter (name)。

paramValues: 可根據(jù)參數(shù)名取得對于的字符串數(shù)組。如:${paramvalues.name) 相當于 request.getParamterValues(name)。

注:param對象返回單一的字符串,而paramValues對象則返回一個字符串數(shù)組。

2) 訪問頭信息

header:可以取得請求頭信息中,對應的單個字符串頭值。表達式 header.name相當于request.getHeader(name)。如{header[“user-agent”]}??纱蛴〕?user-agent 信息頭。

headerValues:可將請求頭名稱映射到一個數(shù)值數(shù)組。如 ${headerValues.name} 相當于 request.getHeaderValues(name)。

:header對象返回單一值,而headerValues則返回一個字符串數(shù)組。

3) 訪問其他有關用戶要求或頁面的詳細信息

pageContext:

pageContext.request|取得請求對象{pageContext.session} |取得session對象

pageContext.request.queryString|取得請求的參數(shù)字符串{pageContext.request.requestURL} |取得請求的URL,但不包括請求之參數(shù)字符串

pageContext.request.contextPath|服務的webapplication的名稱{pageContext.request.method} |取得HTTP的方法(GET、POST)

pageContext.request.protocol|取得使用的協(xié)議(HTTP/1.1、HTTP/1.0){pageContext.request.remoteUser} |取得用戶名稱

pageContext.request.remoteAddr|取得用戶的IP地址{pageContext.session.new} |判斷session是否為新的,所謂新的session,表示剛由 server產(chǎn)生而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函數(shù)庫

由于在JSP頁面中顯示數(shù)據(jù)時,經(jīng)常需要對顯示的字符串進行處理,SUN公司針對于一些常見處理定義了一套EL函數(shù)庫供開發(fā)者使用。

這些EL函數(shù)在JSTL開發(fā)包中進行描述,因此在JSP頁面中使用SUN公司的EL函數(shù)庫,需要導入JSTL開發(fā)包,并在頁面中導入EL函數(shù)庫。

使用EL函數(shù)庫

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"};//定義一個字符數(shù)組
       List list = new ArrayList();//定義一個list集合
       list.add("a");//向集合中添加一個字符
       pageContext.setAttribute("arr", strs);//將字符數(shù)據(jù)以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>

函數(shù)庫詳細介紹

String toUpperCase(String input):把字符串參數(shù)轉(zhuǎn)換成大寫,并返回

String toLowerCase(String input):把字符串參數(shù)轉(zhuǎn)換成小寫,并返回

int indexOf(String input, String substring):返回input中substring出現(xiàn)的索引位置

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為結(jié)束值,在input上截取子串

String substringAfter(String input, String substring):獲取input中,substring所在位置后面的字符串

substringBefore(String input, String substring):獲取input中,substring所在位置前面的字符串 String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“””進行轉(zhuǎn)義;

String trim(String input):去除input中的前后空格;

String replace(String input, String substringBefore, String substringAfter):將input中的substringBefore替換成substringAfter;

String[] split(String input, String delimiters):以delimiters為標識分割input,返回一個字符串數(shù)組;

int length(Object obj):可以獲取字符串、數(shù)組、各種集合的長度;

String join(String array[], String separator):將array數(shù)組中的元素以separator連接起來,返回一個字符串

七、EL調(diào)用自定義函數(shù) (調(diào)用普通類的靜態(tài)方法)

EL很強大,除了使用SUN提供的標準EL函數(shù)庫外,還可以調(diào)用自定義函數(shù):

● EL表達式語法允許開發(fā)人員開發(fā)自定義函數(shù),以調(diào)用Java類的方法。語法:${prefix:method(params)}

● 在EL表達式中調(diào)用的只能是Java類的靜態(tài)方法,這個Java類的靜態(tài)方法需要在TLD文件中描述,才可以被EL表達式調(diào)用。

● EL自定義函數(shù)用于擴展EL表達式的功能,可以讓EL表達式完成普通Java程序代碼所能完成的功能。

EL Function開發(fā)步驟

只要實現(xiàn)以下三個步驟就可以在靜態(tài)頁面中用${prefix:method(params)} 調(diào)用自定義function了

編寫一個Java類的靜態(tài)方法

編寫標簽庫描述符(tld)文件,在tld文件中描述自定義函數(shù)。

在JSP頁面中導入和使用自定義函數(shù)

下面來個案例:

1)編寫一個Java類的靜態(tài)方法

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><!-- 定義函數(shù) --> 
    <name>toGetMax</name>
    <function-class>elfunction.GetMax</function-class><!-- 定義函數(shù)的類全名稱 --> 
    <function-signature>int toGetMax(int,int)</function-signature> 
    <!--說明 返回值類型 函數(shù)名 以及 參數(shù)類型 --> 
  </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頁面中導入和使用自定義函數(shù)

<%@ 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>

運行截圖

希望本篇文章對您有所幫助

相關文章

  • 深入java內(nèi)存查看與分析詳解

    深入java內(nèi)存查看與分析詳解

    本篇文章是對java內(nèi)存查看進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Netty源碼分析NioEventLoop執(zhí)行select操作入口

    Netty源碼分析NioEventLoop執(zhí)行select操作入口

    這篇文章主要介紹了Netty源碼分析NioEventLoop執(zhí)行select操作入口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java實現(xiàn)棧和隊列面試題

    Java實現(xiàn)棧和隊列面試題

    這篇文章主要介紹了Java實現(xiàn)棧和隊列的面試題,每個例題代碼實現(xiàn)非常詳細,每一個方法講解也很到位,特別適合參加Java面試的朋友閱讀。
    2015-09-09
  • java實現(xiàn)簡單中國象棋

    java實現(xiàn)簡單中國象棋

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單中國象棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java Scanner類及其方法使用圖解

    Java Scanner類及其方法使用圖解

    這篇文章主要介紹了Java Scanner類及其方法使用圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java?CAS與Atomic原子操作核心原理詳解

    Java?CAS與Atomic原子操作核心原理詳解

    CAS(Compare?and?Swap)和Atomic原子操作是保證多線程并發(fā)安全的常用機制,能夠高效地實現(xiàn)對共享變量的安全訪問和修改,避免線程競爭導致的數(shù)據(jù)不一致和死鎖等問題。它們的應用可以提高程序的并發(fā)性能和可維護性,是多線程編程中的重要工具
    2023-04-04
  • Java全面深入探究SpringBoot攔截器與文件上傳

    Java全面深入探究SpringBoot攔截器與文件上傳

    攔截器對使用SpringMvc、Struts的開發(fā)人員來說特別熟悉,因為你只要想去做好一個項目必然會用到它,文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現(xiàn)對應的功能
    2022-05-05
  • Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄

    Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄

    在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Mybatis 動態(tài)sql的編寫與開啟二級緩存

    Mybatis 動態(tài)sql的編寫與開啟二級緩存

    二級緩存是Mapper級別的緩存,多個SqlSession去操作同一個Mapper中的SQL語句,則這些SqlSession可以共享二級緩存,即二級緩存是跨SqlSession的,這篇文章主要介紹了Mybatis 動態(tài)sql的編寫|開啟二級緩存,需要的朋友可以參考下
    2023-02-02
  • java實現(xiàn)鮮花銷售系統(tǒng)

    java實現(xiàn)鮮花銷售系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)鮮花銷售系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論

东明县| 瓦房店市| 广汉市| 张家港市| 津市市| 蒙山县| 永清县| 高安市| 伊春市| 台湾省| 阆中市| 政和县| 苗栗市| 阳山县| 海宁市| 玉龙| 河东区| 昌吉市| 土默特左旗| 内乡县| 凤庆县| 应城市| 灵川县| 庆安县| 轮台县| 信阳市| 上饶县| 山丹县| 纳雍县| 彰武县| 云浮市| 富源县| 喀喇沁旗| 拉孜县| 平乡县| 嘉鱼县| 曲阳县| 德惠市| 会昌县| 安化县| 崇义县|