Java基礎(29)表達式語言(EL)的隱式對象及其作用

表達式語言(Expression Language,簡稱EL)是JSP 2.0及以上版本中引入的一種簡化頁面代碼編寫的語言,它提供了一種在JSP頁面中更容易使用JavaBean屬性及集合的方式。EL主要用于簡化對Java代碼的調用,特別是從后端到前端的數據傳輸。

EL定義了一套隱式對象,這些對象可以直接在EL表達式中使用,而不需要顯式聲明。以下是EL中的一些常見隱式對象及其作用:

1. pageScope

  • 作用:包含當前頁面作用域內所有屬性的Map。
  • 訪問方式:pageScope['attributeName']

2. requestScope

  • 作用:包含當前請求作用域內所有屬性的Map。
  • 訪問方式:requestScope['attributeName']

3. sessionScope

  • 作用:包含當前會話作用域內所有屬性的Map。
  • 訪問方式:sessionScope['attributeName']

4. applicationScope

  • 作用:包含應用作用域(ServletContext)內所有屬性的Map。
  • 訪問方式:applicationScope['attributeName']

5. param

  • 作用:包含請求參數的Map,所有參數的值類型都是String。
  • 訪問方式:param['paramName']

6. paramValues

  • 作用:包含請求參數的Map,它允許一個參數有多個值,因此Map的值是String數組。
  • 訪問方式:paramValues['paramName'][index]

7. header

  • 作用:包含HTTP請求頭的Map,所有頭信息的值類型都是String。
  • 訪問方式:header['headerName']

8. headerValues

  • 作用:包含HTTP請求頭的Map,允許頭信息有多個值,值是String數組。
  • 訪問方式:headerValues['headerName'][index]

9. cookie

  • 作用:包含請求中所有的Cookie對象的Map,可以直接訪問每個cookie的值。
  • 訪問方式:cookie['cookieName'].value

10. initParam

  • 作用:包含所有初始化參數的Map(如web.xml中配置的)。
  • 訪問方式:initParam['paramName']

源碼級解析

EL是由JSP容器實現的,我們通常不直接處理其源碼。但是,我們可以通過理解EL表達式是如何被解析和執行的來更深入地了解其工作原理。

當JSP頁面被請求時,容器會解析頁面上的EL表達式。容器內部將EL表達式轉換為一個抽象語法樹(AST),然后按照這個樹來計算表達式的值。計算過程中,容器會檢查隱式對象的Map,以及顯式設置的屬性,從而獲取相應的值。

代碼演示

一個簡單的例子,使用param隱式對象輸出請求中的參數值:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>EL Implicit Objects Demo</title>
</head>
<body>
Hello, ${param.name}!
</body>
</html>

假設請求URL是http://example.com/hello.jsp?name=John,頁面會輸出:

Hello, John!

在這個例子中,${param.name}是一個表達式,其中param是隱式對象,而name是請求參數的名字。

JSP容器在解析這個表達式時,會從param隱式對象中獲取name參數的值,并將其輸出到頁面上。如果沒有傳遞name參數,輸出會是Hello, !,因為param.name將解析為null

EL表達式提供了一種簡潔高效的方式來訪問后臺數據。通過使用EL隱式對象,開發者可以在JSP頁面中以極簡的代碼實現數據訪問和展示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10737.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024 年最新本地、云服務器安裝部署 miniconda 環境詳細教程(更新中)

Anaconda 概述 Anaconda 是專門為了方便使用 Python 進行數據科學研究而建立的一組軟件包&#xff0c;涵蓋了數據科學領域常見的 Python 庫&#xff0c;并且自帶了專門用來解決軟件環境依賴問題的 conda 包管理系統。主要是提供了包管理與環境管理的功能&#xff0c;可以很方便…

picoCTF-Web Exploitation-More SQLi

Description Can you find the flag on this website. Additional details will be available after launching your challenge instance. Hints SQLiLite 先隨便輸入個賬號密碼登錄一下&#xff0c;得到查詢SQL&#xff0c;接下來應該對SQL進行某些攻擊來繞過密碼登錄成功 -- …

微信小程序踩坑,skyline模式下,簡易雙向綁定無效

工具版本 基礎庫版本 Skline模式 頁面json設置 問題描述 skyline模式下,textarea,input標簽設置簡易雙向綁定 model:value是無效的,關閉skyline模式就正常使用了 截圖展示 這里只展示了textarea標簽,input標簽的簡易雙向綁定也是無效的 總結 我在文檔里面是沒找到skyline里面不…

Android OpenMAX(八)如何學習OMXNodeInstance

前面一篇文章中我們看到media.codec service創建OMX組件后會把組件傳遞給一個OMXNodeInstance對象,并且把OMXNodeInstance對象返回到Framework層,Framework通過調用OMXNodeInstance的API來操作OMX組件。從這一篇開始,我們一起學習OMXNodeInstance,在這里我要強調一下,接下…

動態規劃----股票買賣問題(詳解)

目錄 一.買賣股票的最佳時機&#xff1a; 二.買賣股票的最佳時機含冷凍期&#xff1a; 三.買賣股票的最佳時期含?續費&#xff1a; 四.買賣股票的最佳時機III: 五.買賣股票的最佳時機IV: 買賣股票的最佳時機問題介紹&#xff1a;動態規劃買賣股票的最佳時機是一個經典的…

windows使用Docker-Desktop部署lobe-chat

文章目錄 window安裝docker-desktop下載和啟動lobe-chatAI大語言模型的選擇lobe-chat設置大模型連接 window安裝docker-desktop docker-desktop下載地址 正常安裝應用&#xff0c;然后啟動應用&#xff0c;注意啟動docker引擎 打開右上角的設置&#xff0c;進入Docker Engine設…

算法學習系列(六十):區間DP

目錄 引言區間合并模板一、石子合并二、環形石子合并三、能量項鏈 引言 關于這個區間 D P DP DP &#xff0c;其實是有套路和模板的&#xff0c;題型的話也是變化不多&#xff0c;感覺就那幾種&#xff0c;只不過有些題會用到高精度或者是要記錄方案&#xff0c;所以整體來說…

Unity編輯器如何多開同一個項目?

在聯網游戲的開發過程中&#xff0c;多開客戶端進行聯調是再常見不過的需求。但是Unity并不支持編輯器多開同一個項目&#xff0c;每次都得項目打個包(耗時2分鐘以上)&#xff0c;然后編輯器開一個進程&#xff0c;exe 再開一個&#xff0c;真的有夠XX的。o(╥﹏╥)o沒錯&#…

Hive 與 SQL 標準和主流 SQL DB 的語法區別

文章目錄 1.Hive 簡介2.Hive 與 SQL 標準和主流 SQL DB 的語法區別參考文獻 1.Hive 簡介 Hive是一種基于Hadoop的數據倉庫軟件&#xff0c;可以將結構化數據文件映射為一張數據庫表&#xff0c;并提供了類SQL查詢接口&#xff0c;使得用戶可以使用SQL類語言來查詢數據。Hive可…

7-117 死亡隧道

小毛驢要回家了,憑借著剛從老毛驢處學到的閃爍魔法,小毛驢信心滿滿地出發了。這一次它來到了另一條死亡隧道口,但是,小毛驢不知道死亡威脅隨時存在,因為它所打算穿過的這條死亡隧道即將于T秒時間后坍塌。 已知小毛驢行走的速度是每秒17米,而小毛驢擁有的閃爍法術可以使它…

返回類型后置,一個用途是為了邏輯上的體現?

大家一般都是先關心參數&#xff0c;然后最后再看返回的是什么類型。 在這里把返回類型后置&#xff0c;可能就是一種邏輯上的體現吧 fmt的一個函數。 \fmt\core.h 這個函數的意義&#xff0c;應該就是用變長參數初始化成一個format_arg_store類型的變量&#xff0c;并返回。…

Rust學習筆記(上)

前言 筆記的內容主要參考與《Rust 程序設計語言》&#xff0c;一些也參考了《通過例子學 Rust》和《Rust語言圣經》。 Rust學習筆記分為上中下&#xff0c;其它兩個地址在Rust學習筆記&#xff08;中&#xff09;和Rust學習筆記&#xff08;下&#xff09;。 編譯與運行 Ru…

成功解決No module named ‘huggingface_hub.inference._text_generation‘

成功解決No module named huggingface_hub.inference._text_generation 目錄 解決問題 解決思路 解決方法 解決問題 No module named huggingface_hub.inferen

python使用yaml文件以及元組樣式字符串使用eval的類型轉換

編程中&#xff0c;對于可變內容&#xff0c;最好是將其放入配置文件中&#xff0c;經過這段時間的學習&#xff0c;感覺使用yaml文件很方便。我的環境&#xff1a;win10&#xff0c;python3.8.10。 python使用yaml文件&#xff0c;首先要安裝庫。 pip38 install pyyaml 安裝…

AWTK 開源串口屏開發(18) - 用 C 語言自定義命令

AWTK-HMI 內置了不少模型&#xff0c;利用這些模型開發應用程序&#xff0c;不需要編寫代碼即可實現常見的應用。但是&#xff0c;有時候我們需要自定義一些命令&#xff0c;以實現一些特殊的功能。 本文檔介紹如何使用 C 語言自定義命令。 1. 實現 hmi_model_cmd_t 接口 1.1…

實現二叉樹的基本操作

博主主頁: 碼農派大星. 關注博主帶你了解更多數據結構知識 1我們先來模擬創建一個二叉樹 public class TestBinaryTreee {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val val;}}public TreeNode …

交叉編譯u-boot,qemu啟動測試

交叉編譯u-boot 1 配置交叉編譯工具鏈&#xff1a; 下載地址 https://releases.linaro.org/components/toolchain/binaries/ ### CROSS-COMPILE export AARCH64_LINUX_GNU_TOOLS/media/wmx/cross_compile_tools/aarch64-linux-gun/gcc-x86_64_aarch64-linux-gnu/bin export …

linux 安裝 mangodb 并設置服務開機自啟

1、下載 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解壓 tar -zxvf mosquitto-1.6.8.tar.gz 3、編譯安裝cd mosquitto-1.6.8 make sudo make install4、在當前目錄。進入mosquitto服務文件存放的文件夾 cd service/systemd可以看到3個文件 點擊read…

【C/C++】設計模式——工廠模式:簡單工廠、工廠方法、抽象工廠

創作不易&#xff0c;本篇文章如果幫助到了你&#xff0c;還請點贊 關注支持一下?>&#x16966;<)!! 主頁專欄有更多知識&#xff0c;如有疑問歡迎大家指正討論&#xff0c;共同進步&#xff01; &#x1f525;c系列專欄&#xff1a;C/C零基礎到精通 &#x1f525; 給大…

二.基礎篇: 面向對象進階

1. 基礎篇語法篇&#xff1a;一.基礎篇&#xff1a;基礎語法-CSDN博客 面向對象進階 本章主要學習內容&#xff1a; static繼承包&#xff0c;final&#xff0c;權限修飾符&#xff0c;代碼塊抽象類接口多態內部類 1. static static翻譯過來就是靜態的意思static表示靜態&am…