【JavaWeb-JSP】筆記彙總 --- JSP 規範;EL 表達式

来源:https://www.cnblogs.com/Burning-youth/archive/2022/03/22/16040757.html
-Advertisement-
Play Games

簡化版設計之初就是為了從當前頁作用域對象讀取數據並輸出,所以從 request,session,application 讀取數據並輸出時應該避免使用簡化版EL表達式 ...


JSP 规范:


JSP 规范介绍:

  • 来自于 JAVAEE 规范中的一种 

  • JSP 规范制定了如何开发 JSP 文件代替响应对象将处理结果写入到响应体的开发流程

  • JSP 规范制定了 Http 服务器应该如何调用管理 JSP 文件

 

响应对象存在弊端:

  • 适合将数据量较少的处理结果写入到响应体

  • 如果处理结果数量过多,响应对象会增加开发难度

 

JSP 文件优势:

  • JSP 文件在互联网通信过程,是响应对象的替代品

  • 降低将处理结果写入到响应体的开发工作量,降低处理结果维护难度

  • 在 JSP 文件开发时,可以直接将处理结果写入到 JSP 文件不需要手写 print 命令,在 Http 服务器调用 JSP 文件时,根据 JSP 规范要求自动的将 JSP 文件书写的内容通过输出流写入到响应体

 

HTML 文件与 JSP 文件的区别:

  • 资源文件类型不同:HTML 文件属于静态资源文件,其相关命令需要浏览器编译并执行;JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行

  • 调用形式不同:如果浏览器访问 HTML 文件,此时 Http 服务器直接通过一个输出流,将 HTML 文件中所有的内容写入到响应体;如果浏览器访问 JSP 文件。此时 Http 服务器根据JSP 规范来操作 JSP 文件【编辑---->编译----->调用】

 

JSP 文件运算原理

  • Tomcat 根据 JSP 规范,将被访问的 JSP 文件【编辑】为一个 java 文件,这个 Java 文件是 Servlet 接口实现类

    (Tomcat 将 JSP 文件编辑后生成的 Java 文件,继承于 HttpJspBase,通过 Apache 官方文档查看其身份是 HttpServlet 的子类,所以 Tomcat 将 JSP 编辑为的文件是一个 Servlet 接口实现类

  • Tomcat 根据 JSP 规范,调用 JVM,将这个java文件【编译】为 class 类型

     (Http服务器【编辑】与【编译】JSP 文件的位置 --- work 文件夹)

  • Tomcat 根据 JSP 规范负责生成这个 class 文件的实例对象,这个实例对象是一个 Servelt 接口实例对象

  • Tomcat 根据 JSP 规范通过实例对象调用 class 文件中 _jspService 方法

  • _jspService 方法在运行时负责将 JSP文件中书写内容写入到响应体中

 

_jspService 方法:

  • 作用:当一个 JSP 文件被访问时,Tomcat 调用的并不是当前 JSP 文件。而是 JSP 文件对应的 Servlet接口 实现类中 _jspService 方法,_jspService 方法负责将开发人员在 JSP 文件书写的所有内容写入到响应体中。
  • 内部结构:【判断当前请求方式】Jsp 文件可以接收的请求方式有 POST,GET,HEAD

                        【声明局部变量】这些局部变量都可以在 JSP 文件开发时直接使用

                        【输出部分】这部分执行时将 JSP 文件内容通过输出流写入到响应体

 

在JSP文件中如何书写Java命令:

  • 命令格式:
<%
    这里随便写 java 代码
%>
<%=java的变量名%>
<%=java的表达式%>
  • 命令作用:通知 Http 服务器将 JSP 文件中 Java 命令与其他普通执行结果进行区分;通知Tomcat将输出标记中【变量的值】或者输出标记中【表达式运算结果】写入到响应体

 

如何将 Servlet 中 doGet / doPost 方法执行结果交给 JSP 文件输出?

  • JSP 文件被访问时,并不是 JSP 文件在执行。而是对应的 Servlet 在执行

  • 自定义 Serlvet 接口实现类与 JSP 文件之间的调用关系,等同于两个 Servlet 之间的调用关系

  • 自定义 Servelt 接口实现类与 JSP 文件之间可以通过重定向方案或者请求转发方案进行调用,考虑到运行效率问题,一般采用【请求转发】

  • 自定义 Servlet 接口实现类可以通过请求作用域对象将共享数据交给 JSP 来输出到响应体

 

EL 表达式:


EL 工具包介绍:

  • 由 Java 技术开发一个的 jar 包

  • 作用:降低 JSP 文件开发时 Java 命令开发强度

  • Tomcat 服务器本身自带了 EL 工具包

 

JSP文件中主要开发步骤:

【将作用域中存放的处理结果读取出来并写入到响应体】

  • 第一步:从指定的作用域对象读取处理结果

  • 第二步::将得到数据进行类型强转

  • 第三步::将转换后的数据写入到响应体

<%
    String value = (String)request.getAttribute("key");
%>

<%=value%>

 

EL 表达式命令格式:

  • ${作用域对象别名.共享数据名}
  •    命令作用执行时从指定的【作用域对象】中读取指定【共享数据】的内容并自动的写入到响应体中
  •    EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}
${sessionScope.user["sex"]}
  •  . 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
  • 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ]

       例如:${user.My-Name }        //错误示范

                ${user["My-Name"] }    //正确格式

  • EL 表达式支持运算表达式:数学运算表达式 / 关系运算表达式 / 逻辑运算表达式

 

简化版 EL 表达式:

  • 命令格式:${作用域对象别名}
  • 工作原理:由于在EL简化版中没有指定作用域对象别名,所以EL表达式采用"猜测算法"
  • 猜测算法:首先到【pageContext】定位共享数据,如果定位成功读取输出并结束执行;

                        如果在【pageCotnext】没有找到共享数据,到【request】定位共享数据,如果定位成功读取输出并结束执行;

                        如果在【request】没有找到共享数据,到【session】定位共享数据,如果定位成功读取输出并结束执行;

                        如果在【session】没有找到共享数据,到【application】定位共享数据,如果定位成功读取输出并结束执行;

                        如果在【application】没有找到共享数据,此时返回 null。

  • 弊端:增加程序运行时间;可能导致定位数据错误。
  • 使用场景:简化版设计之初就是为了从当前页作用域对象读取数据并输出,所以从 request,session,application 读取数据并输出时应该避免使用简化版。

 

EL 表达式将引用类型数据类型的属性输出:

  • 命令格式:${作用域对象别名.共享数据名.属性名}
  • 命令作用:从作用域对象读取到指定的引用变量,并将引用变量中指定属性内容写入到响应体

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 如果你想模仿springMVC,自己編寫一套開發框架,本文將給你答案! ...
  • 微服務在最近幾年大行其道,很多公司的研發人員都在考慮微服務架構,同時,隨著 Docker 容器技術和自動化運維等相關技術發展,微服務變得更容易管理,這給了微服務架構良好的發展機會。 在做微服務的路上,拆分服務是個很熱的話題。我們應該按照什麼原則將現有的業務進行拆分?是否拆分得越細就越好?接下來一起談... ...
  • 作者:霜序 校稿:袋鼠雲數棧前端團隊運營小組 該文章包含如下內容 受控與非受控組件 非受控組件 受控組件 受控和非受控組件邊界 反模式 解決方案 前言 在 HTML 中,表單元素(<input>/<textarea>/<select>),通常自己會維護 state,並根據用戶的輸入進行更新 <for ...
  • 單例模式是什麼 單例模式是一種創建型設計模式:單例模式保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 為什麼要用單例模式 為什麼要用單例模式?在系統中某些對象,我們只需要一個全局的,如果每次實例化會浪費資源。所以單例模式可以節約記憶體,加快對象訪問速度,因此單例模式在某些場合適合使用。比如多個 ...
  • 概述 異地多活,往往意味著誇機房讀寫延遲的增加,也就增加了讀寫失敗的可能性,最終導致數據的延遲更長,同時,這種場景下也會影響線上系統的性能和時延。本文從數據低延遲、開發複雜度上考慮,總結了兩種處理方式,分別是雙寫和雙讀,從而保證數據的最終一致性。對於異地多活的業務場景,往往也不需要保證強一致性,允許 ...
  • 說一道常見面試題: 使用Redis分散式鎖的詳細方案是什麼? 一個很簡單的答案就是去使用 Redission 客戶端。Redission 中的鎖方案就是 Redis 分散式鎖的比較完美的詳細方案。 那麼,Redission 中的鎖方案為什麼會比較完美呢? 正好,我用 Redis 做分散式鎖經驗十分豐 ...
  • AWS 這一次的重磅炸彈再次引領了行業的革新理念 —— 像其他任何 IT 採購一樣採購 5G 專網。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...