jsp JavaBean el表達式

来源:https://www.cnblogs.com/0307lmy/archive/2019/09/12/11509993.html
-Advertisement-
Play Games

JSP三大指令 一個jsp頁面中,可以有0~N個指令的定義! 1. page --> 最複雜:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定當前jsp頁面的編碼,只要不說謊, ...


JSP三大指令
一個jsp頁面中,可以有0~N個指令的定義!

1. page --> 最複雜:<%@page language="java" info="xxx"...%>
* pageEncoding和contentType:
> pageEncoding:它指定當前jsp頁面的編碼,只要不說謊,就不會有亂碼!在伺服器要把jsp編譯成.java時需要使用pageEncoding!
> contentType:它表示添加一個響應頭:Content-Type!等同與response.setContentType("text/html;charset=utf-8");
> 如果兩個屬性只提供一個,那麼另一個的預設值為設置那一個。
> 如果兩個屬性都沒有設置,那麼預設為iso8859-1
* import:導包!可以出現多次
* errorPage和isErrorPage
> errorPage:當前頁面如果拋出異常,那麼要轉發到哪一個頁面,由errorPage來指定
* 路徑:加上“/”表示項目路徑 不加“/”表示當前頁面所在路徑
> isErrorPage:它指定當前頁面是否為處理錯誤的頁面!當該屬性為true時,
這個頁面會設置狀態碼為500!而且這個頁面可以使用9大內置對象中的exception!
* <error-page>
<error-code>404</error-code>
<location>/error/errorPage.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/errorPage.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.RuntimeException</exception-type>
<location>/index.jsp</location>
</error-page>
* autoFlush和buffer
> autoFlush:指定jsp的輸出流緩衝區滿時,是否自動刷新!預設為true,如果為false,那麼在緩衝區滿時拋出異常!
> buffer:指定緩衝區大小,預設為8kb,通常不需要修改!
* isELIgnored:是否忽略el表達式,預設值為false,不忽略,即支持!
* 基本沒用:
> language:指定當前jsp編譯後的語言類型,預設值為java。
> info:信息!
> isThreadSafe:當前的jsp是否支持併發訪問!
> session:當前頁面是否支持session,如果為false,那麼當前頁面就沒有session這個內置對象!
> extends:讓jsp生成的servlet去繼承該屬性指定的類!

2. include --> 靜態包含
* 屬性:file="路徑"
* 與RequestDispatcher的include()方法的功能相似!
* <%@include%> 它是在jsp編譯成java文件時完成的!他們共同生成一個java(就是一個servlet)文件,然後再生成一個class!
* RequestDispatcher的include()是一個方法,包含和被包含的是兩個servlet,即兩個.class!他們只是把響應的內容在運行時合併了!
* 作用:把頁面分解了,使用包含的方式組合在一起,這樣一個頁面中不變的部分,就是一個獨立jsp,而我們只需要處理變化的頁面。
* 可以放在任意位置
3. taglib --> 導入標簽庫
* 兩個屬性:
> prefix:指定標簽庫在本頁面中的首碼!由我們自己來起名稱!
> uri: 指定標簽庫的位置!
> <%@taglib prefix="s" uri="/struts-tags"%> 首碼的用法<s:text>
<%@taglib prefix="aaa" uri="/fmt-tags"%> 首碼的用法<aaa:text>

=========================================

九個內置對象

* out --> jsp的輸出流,用來向客戶端響應 JspWriter
* page --> 當前jsp對象! 它的引用類型是Object,即真身中有如下代碼:Object page = this;
* config --> 它對應真身中的ServletConfig對象!
* pageContext --> 一個頂9個!PageContext
* request --> ServletEequest
* response --> ServletResponse
* exception --> Throwable
* session --> HttpSession
* application --> ServletContext

1. pageContext
* 一個頂9個!
* Servlet中有三大域,而JSP中有四大域,它就是最後一個域對象!
> ServletContext:整個應用程式
> session:整個會話(一個會話中只有一個用戶)
> request:一個請求鏈!
> pageContext:一個jsp頁面!這個域是在當前jsp頁面和當前jsp頁面中使用的標簽之間共用數據!
> 域對象
> 代理其他域:pageContext.setAttribute("xxx", "XXX", PageContext.SESSION_SCOPE);
pageContext.getAttribute("name",PageContext.SESSION_SCOPE)-->表示要從session域中查找name屬性的值
> 全域查找:pageContext.findAttribute("age");從小到大,依賴查找!
//Application.setAttribute("age",20);
//Session.setAttribute("age",30);
//Request.setAtribute("age",40);
> 獲取其他8個內置對象:

=========================================

JSP動作標簽
  這些jsp的動作標簽,與html提供的標簽有本質的區別。
  * 動作標簽是由tomcat(伺服器)來解釋執行!它與java代碼一樣,都是在伺服器端執行的!
  * html由瀏覽器來執行!
* <jsp:forward>:轉發!它與RequestDispatcher的forward方法是一樣的,一個是在Servlet中使用,一個是在jsp中使用!
* <jsp:include>:包含:它與RequestDispatcher的include方法是一樣的,一個是在Servlet中使用,一個是在jsp中使用!
> <%@include>和<jsp:include>有什麼不同!

<%@include> 指令:是在編譯的時候就要合併,並且只生成一個java文件和一個class文件
<jsp:include>動作標簽:是在訪問的時候執行,是兩個不同的java文件,和請求包含一樣

* <jsp:param>:它用來作為forward和include的子標簽!用來給轉發或包含的頁面傳遞參數!

=========================================

JavaBean

javaBean的規範:
1. 必須要有一個預設構造器
2. 提供get/set方法,如果只有get方法,那麼這個屬性是只讀屬性!
3. 屬性:有get/set方法的成員,還可以沒有成員,只有get/set方法。屬性名稱由get/set方法來決定!而不是成員名稱!
4. 方法名稱滿足一定的規範,那麼它就是屬性!boolean類型的屬性,它的讀方法可以是is開頭,也可以是get開頭!


內省:
內省類 --> Bean信息 --> 屬性描述符 --> 屬性的get/set對應的Method! --- > 可以反射了!

-----------------------

commons-beanutils,它是依賴內省完成!
* 導包:
> commons-beanutils.jar
> commons-logging.jar

BeanUtils.getProperty(Object bean, String propertyName)
BeanUtils.setProperty(Object bean, String propertyName, String propertyValue)
BeanUtils.populate(Map map, Object bean)

CommontUtils.toBean(Map map, Class class)

-----------------------

jsp中與javaBean相關的標簽!

* <jsp:useBean> --> 創建或查詢bean
* <jsp:useBean id="user1" class="cn.itcast.domain.User" scope="session"/> 在session域中查找名為user1的bean,如果不存在,創建之
* <jsp:useBean id="user1" class="cn.itcast.domain.User" scope="session"/>
* <jsp:setProperty>
* <jsp:setProperty property="username" name="user1" value="admin"/> 設置名為user1的這個javabean的username屬性值為admin
* <jsp:getProperty>
* <jsp:getProperty property="username" name="user1"/> 獲取名為user1的javabean的名為username屬性值

=========================================

EL表達式

1. EL是JSP內置的表達式語言!
* jsp2.0開始,不讓再使用java腳本,而是使用el表達式和動態標簽來替代java腳本!
* EL替代的是<%= ... %>,也就是說,EL只能做輸出!

2. EL表達式來讀取四大域
* 讀取的數據:1、常量 2、表達式 3、域對象,請求參數,全局配置參數,cookie
* ${xxx},全域查找名為xxx的屬性,如果不存在,輸出空字元串,而不是null。
* ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域獲取屬性!

3. javaBean導航
<%
Address address = new Address();
address.setCity("北京");
address.setStreet("西三旗");

Employee emp = new Employee();
emp.setName("李小四");
emp.setSalary(123456);
emp.setAddress(address);

request.setAttribute("emp", emp);
%>

<h3>使用el獲取request域的emp</h3>
${requestScope.emp.address.street }<!-- request.getAttribute("emp").getAddress().getStreet() --><br/>


4. EL可以輸出的東西都在11個內置對象中!11個內置對象,其中10個是Map!pageContext不是map,它就是PageContext類型,1個項9個。
11個內置對象(el):pageScope、requestScope、sessionScope、applicationScope、param、
paramValues、header、headerValues、initParam、cookie、pageContext
* 我們已經學習了四個
* param:對應參數,它是一個Map,其中key參數名,value是參數值,適用於單值的參數。
* paramValues:對應參數,它是一個Map,其中key參數名,value是多個參數值,適用於多值的參數。
* header:對應請求頭,它是一個Map,其中key表示頭名稱,value是單個頭值,適用於單值請求頭
* headerValues:對應請求頭,它是一個Map,其中key表示頭名稱,value是多個頭值,適用於多值請求頭
* initParam:獲取<context-param>內的參數!
<context-param>
<param-name>xxx</param-name>
<param-value>XXX</param-value>
</context-param>
<context-param>
<param-name>yyy</param-name>
<param-value>YYY</param-value>
</context-param>

${initParam.xxx}

* cookie:Map<String,Cookie>類型,其中key是cookie的name,value是cookie對象。 ${cookie.username.value}
* pageContext:它是PageContext類型!${pageContext.request.contextPath}

=========================================

EL函數庫(由JSTL提供的)
* 導入標簽庫:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
String toUpperCase(String input):把參數轉換成大寫
String toLowerCase(String input):把參數轉換成小寫
int indexOf(String input, String substring):從大串,輸出小串的位置!
boolean contains(String input, String substring):查看大串中是否包含小串
boolean containsIgnoreCase(String input, String substring):忽略大小寫的,是否包含
boolean startsWith(String input, String substring):是否以小串為首碼
boolean endsWith(String input, String substring):是否以小串為尾碼
String substring(String input, int beginIndex, int endIndex):截取子串
String substringAfter(String input, String substring):獲取大串中,小串所在位置後面的字元串
substringBefore(String input, String substring):獲取大串中,小串所在位置前面的字元串
String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",進行轉義
String trim(String input):去除前後空格
String replace(String input, String substringBefore, String substringAfter):替換
String[] split(String input, String delimiters):分割字元串,得到字元串數組
int length(Object obj):
可以獲
取字元串、數組、各種集合的長度!
String join(String array[], String separator):聯合字元串數組!

=========================================

自定義函數庫
* 寫一個java類,類中可以定義0~N個方法,但必須是static,而且有返回值的!
* 在WEB-INF目錄下創建一個tld文件
<function>
<name>fun</name>
<function-class>cn.itcast.fn.MyFunction</function-class>
<function-signature>java.lang.String fun()</function-signature>
</function>

* 在jsp頁面中導入標簽庫
<%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>
* 在jsp頁面中使用自定義的函數:${it:fun() }

 


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

-Advertisement-
Play Games
更多相關文章
  • 前戲 到目前為止,我們已經學過了JavaScript的一些簡單的語法。但是這些簡單的語法,並沒有和瀏覽器有任何交互。 也就是我們還不能製作一些我們經常看到的網頁的一些交互,我們需要繼續學習BOM和DOM相關知識。 JavaScript分為 ECMAScript,DOM,BOM。 BOM(Browse ...
  • 一.模板缺陷 模板的最大特點是擴展難度大,不易擴展。可能會造成邏輯冗餘 Level組件需要對不同的type產生不同的標簽 二.函數式組件 函數式組件沒有模板,只允許提供render函數 複雜的邏輯變得非常簡單 三.JSX應用 使用jsx會讓代碼看起來更加簡潔易於讀取 四.render方法訂製組件 編 ...
  • "在這裡閱讀效果更佳" 還記得當年和同桌在草稿紙上下三子棋的時光嗎 今天我們就用代碼來重溫一下年少(假設你有react基礎,沒有也行,只要你會三大框架的任意一種,上手react不難) 游戲規則 + 雙方各執一子,在九宮格內一方三子連成線則游戲結束 + 九宮格下滿未有三子連線則視為平局 "你可以點擊這 ...
  • 1.創建XMLHttpRequest let xhr=new XMLHttpRequest; 2.連接伺服器 xhr.open("get","goods.json",true) true代表非同步,false代表同步。goods.json代表請求的路徑 3.向伺服器發送請求 xhr.send() 4. ...
  • <script> //js獲取頁面所有搜索條件function GetSearchData(SearchDivID) { var ObjID= SearchDivID? SearchDivID: ".search"; //預設為類樣式.search, <div class="search"> var ...
  • VUE中CSS樣式穿透 1. 問題由來 在做兩款H5的APP項目,前期採用微信官方推薦的weui組件庫。後來因呈現的效果不理想,組件不豐富,最終項目完成後全部升級採用了有贊開發的 組件庫。同時將webpack順利從3升級到4(項目結構 webpack+vue+vuex+vue router+vant ...
  • 作者:西西 最近很流行的一句話成年人的世界沒有「容易」二字,其實程式員的世界更沒有『容易』二字。不是電腦專業出身的我初入行的時候,每晚在樓下的全時便利店敲代碼到深夜 1 - 2 點。但這其實僅僅是開始,努力了幾個月以後成功面試進入一家互聯網公司(剛入職場薪資很低),自此開啟了我的代碼職業生涯。 初 ...
  • BFC的生成 在實現CSS的佈局時,假設我們不知道BFC的話,很多地方我們生成了BFC但是不知道.在佈局中,一個元素是block元素還是inline元素是必須要知道的.而BFC就是用來格式化塊狀元素盒子,同樣還有管理內連盒子的IFC等.那首先就來瞭解一下什麼是FC. 既然BFC是一塊獨立的渲染區域, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...