javaweb:JSP、JSTL標簽和EL表達式

来源:https://www.cnblogs.com/jmsstudy/archive/2022/07/30/16530986.html
-Advertisement-
Play Games

據我理解,標簽是為了使得jsp內容更加簡潔,編寫起來更加方便,不用再去在jsp里寫大段的java代碼,標簽就顯得與html格外契合;當然,並不是一定要使用標簽,只用jsp的語法來寫java代碼也可以實現功能,只是稍顯繁瑣。 言歸正傳,我們在使用標簽之前首先需要導入兩個依賴 <dependency> ...


據我理解,標簽是為了使得jsp內容更加簡潔,編寫起來更加方便,不用再去在jsp里寫大段的java代碼,標簽就顯得與html格外契合;當然,並不是一定要使用標簽,只用jsp的語法來寫java代碼也可以實現功能,只是稍顯繁瑣。

言歸正傳,我們在使用標簽之前首先需要導入兩個依賴

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

導入以來之後,我們的標簽就可以使用了。

 

1.JSP標簽

常用的JSP標簽有三個,分別為

<jsp:include page=""></jsp:include>

<jsp:forward page=""></jsp:forward>

<jsp:param value="" name=""/>

第一個標簽是用來進行網頁之間的拼接,page裡面寫入的是需要拼接頁面的路徑,前面在網頁拼接中已經使用過,在此就不再展示效果;

第二個標簽是請求轉發,page裡面寫入的是請求轉發到的頁面的路徑;

第三個標簽是通常與上面兩個標簽混合使用,它的作用是攜帶一些參數,獲取這些參數的方法是request.getParameter(String key),接下來我們結合第二個請求轉發的標簽做一下測試

首先定義兩個頁面,一個是pa1.jsp,一個是pa2.jsp

pa1.jsp

<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ja1</title>
</head>
<body>
<jsp:forward page="ja2.jsp">
<jsp:param value="jms"  name="name"/>
<jsp:param value="100" name="age"/>
</jsp:forward>
</body>
</html>

pa2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ja2</title>
</head>
<body>
<h1>姓名:<%= request.getParameter("name") %></h1>
<h1>年齡:<%= request.getParameter("age") %></h1>
</body>
</html>

我們訪問pa1.jsp,看一下能不能請求到pa2.jsp並讀取到數據

 

 

沒有問題。

 

2.JSTL標簽

常用的JSTL標簽是核心標簽了

第一步:引用核心標簽庫的語法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>,將這一句話加在jsp文件的開頭;

我們來說一些常用的標簽

(1).<c:if></c:if>和<c:out/> 

<c:if></c:if>就還跟程式中的if是一樣的,它具有以下三個屬性:

test:if的判斷條件語句,是必須的;

var:儲存條件結果的變數,就是定義一個變數值為true或false,非必須;

scope:var屬性的作用域,預設是當前頁面(page),非必須;

<c:out/>就是輸出語句,也具有三個屬性:

value:輸出的內容,必須;

default:輸出的預設值,預設就是主題內容,非必須;

escapeXml:是否忽略XML特殊字元。預設是true,非必須;

下麵我們來看一下這兩個標簽的實際用法:

建立一個頁面coreif.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>coreif</title>
</head>
<body>
<form action="coreif.jsp"  method="get">
用戶名:<input type="text" name="username" value="${param.username }"><br>
<input type="submit" value="登錄"><br>
</form>
<c:if test="${param.username == 'guanliyuan001'}" var="logined">
    <c:out value="登陸成功"></c:out>
</c:if>
<c:out value="${logined }"></c:out>
</body>
</html>

 

 然後我們輸入用戶名為“guanliyuan001”再登陸

 

 (2).<c:set/>和<c:choose></c:choose>

<c:set/>適用於保存數據的標簽,它具有五個屬性:

var:儲存信息的變數;

value:儲存的值;

scope:作用域,預設是當前頁面(page);

還有兩個屬性 不常用,在此就不做介紹了。

<c:choose></c:choose>與java switch語句和if else if else語句功能相似,他還有兩個子標簽<c:when></c:when>和<c:otherwise></c:otherwise>

具體語法如下:

<c:choose>

  <c:when test ="">

  ...

  </c:when/>

  <c:when test ="">

  ...

  </c:when/>

  <c:when test ="">

  ...

  </c:when/>

  ...

  <c:otherwise>

  ...

  </c:otherwise>

</c:choose/>

下麵我們來看一下這兩個標簽的實際用法:

建立一個頁面setchose.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>setchoose</title>
</head>
<body>
<form action="setchoose.jsp"  method="get">
成績<input type="text" name="s" value="${param.s }"><br>
<input type="submit"><br>
</form>
<c:set var="score" value="${param.s }"/>
<c:choose>
    <c:when test="${score >= 90 }">
        <h1>成績優秀</h1>
    </c:when>
    <c:when test="${score >= 80 }">
        <h1>成績良好</h1>
    </c:when>
    <c:when test="${score >= 70 }">
        <h1>成績一般</h1>
    </c:when>
    <c:when test="${score >= 60 }">
        <h1>成績及格</h1>
    </c:when>
    <c:when test="${score >= 0 }">
        <h1>成績不及格</h1>
    </c:when>
    <c:otherwise>
        <h1></h1>
    </c:otherwise>
</c:choose>
</body>
</html>

 

 

 

 

 

 

 

 (3).<c:forEach></c:forEach>

這個標簽封裝了java的for、while、dowhile迴圈,它具有以下屬性:

 

屬性描述是否必要預設值
items 要被迴圈的信息
begin 開始的元素(0=第一個元素,1=第二個元素) 0
end 最後一個元素(0=第一個元素,1=第二個元素) Last element
step 每一次迭代的步長 1
var 代表當前條目的變數名稱
varStatus 代表迴圈狀態的變數名稱

 

接下來我們演示以下它的實際用法:

建立一個頁面foreach.jsp

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>foreach</title>
</head>
<body>
<% 
    ArrayList<String> arry = new ArrayList<>();
    arry.add("this is 1");
    arry.add("this is 2");
    arry.add("this is 3");
    arry.add("this is 4");
    arry.add("this is 5");
    request.setAttribute("number", arry);
%>
<c:forEach var = "num" items="${number }">
    <c:out value="${num }"/><br>
</c:forEach>

<c:forEach var = "i" begin="1" end="5">
    i =<c:out value="${i }"/><br>
</c:forEach>

</body>
</html>

 

 3.EL表達式

EL 表達式語法如下:

${EL表達式}

 

(本文僅作個人學習記錄用,如有紕漏,敬請指正)


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

-Advertisement-
Play Games
更多相關文章
  • JetBrAIns GoLand 是Mac os系統上由JetBrAIns推出的一個GO語言集成開發工具環境,基於IntelliJ平臺,支持JetBrAIns插件體系,擁有針對GO語言的代碼助手、代碼編輯器、代碼調試等工具,支持前端和後端開發,並且支持IntelliJ插件,可以大大提高Go語言開發者 ...
  • 配置不同生產環境 本文適用於開發環境下需要打包項目至生產環境,避免開發環境的配置文件泄露。 設置maven 作用:1. 手動調節運行時的不同環境 2. 打包時可以不會有其它環境的文件 註:每次換環境前(打包前)記得手動clean清楚,因為idea不會在換環境後自動清除另一個環境的文件 在pom文件中 ...
  • 介紹 本篇文章主要針對於電腦二級考試的崽崽,當然想瞭解Python和學習Python的崽崽也是可以看本篇文章的;畢竟,手機和電腦都可以運行Python;本篇我文章雖然是筆記,但是也純靠手打,希望關註和點贊一下,期待我的其他隨筆和文章;文章作者由博客園狐小妖用戶撰寫,非來自於博客園且不帶轉載註明,均 ...
  • 前言:最近幾個月很忙,都沒有時間寫文章了,今天周末剛好忙完下班相對早點(20:00下班)就在家把之前想總結的知識點寫出來,於是就有了這篇文章。雖無很高深的技術,但小技巧有大用處。 有時我們經常需要將實現了某個基類或某個介面的所有Bean進行分類管理,在需要用到的時候按需獲取實現了某個基類或某個介面的 ...
  • 最近學習了es的視頻,感覺這個產品對於查詢來說非常方便,但是如何應用到我們自己的 產品中來呢。因為我們的產品數據更新太快,其實不太適合用es做主力存儲。並且我們的業務還沒有到那種巨量級別,產品的伺服器容量也有限,所以我打算根據es的倒排索引的原理,自己寫一個查詢的組件。 我的理解是這樣的,有大量的文 ...
  • 終止線程的執行 一、強制終止線程的執行 強制終止用的是stop()方法,因為這種方法會丟失數據,所以一般不採用這種方法。 原理是直接殺死線程,這樣的話線程中沒有保存的數據就會丟失 /* 在java中強制終止一個線程 */ public class ThreaTest09 { public stati ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 獲取線程對象的名稱 1.獲取當前線程對象 //調用當前線程對象,currentThread()這方法出現在main()方法中,當前線程就是主線程 //這代碼出現在哪,就是獲取到哪個線程對象 Thread t=Thread.currentCurrent() 2.獲取線程對象的名字 String nam ...
一周排行
    -Advertisement-
    Play Games
  • public static void GetRegistData() { string name = "huishuangzhu"; //搜索到註冊表根目錄 RegistryKey hkml = Registry.ClassesRoot; //搜索到註冊表根目錄下的XXX文件夾。 RegistryK ...
  • 用acme.sh自動部署功能變數名稱證書 安裝ACME 目前使用量最大的免費SSL證書就是Let’s Encrypt,自2018-03開始,Let’s Encrypt官方發佈上線了免費的SSL泛功能變數名稱證書,目前通過DNS方式獲取比較快,國內可以通過鵝雲的DNSPod功能變數名稱API或者貓雲功能變數名稱API自動簽發Let’ ...
  • 經常看到有群友調侃“為什麼搞Java的總在學習JVM調優?那是因為Java爛!我們.NET就不需要搞這些!”真的是這樣嗎?今天我就用一個案例來分析一下。 昨天,一位學生問了我一個問題:他建了一個預設的ASP.NET Core Web API的項目,也就是那個WeatherForecast的預設項目模 ...
  • 1、環境搭建 1.1 依賴 <!-- nacos註冊中心 註解 @EnableDiscoveryClient --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba- ...
  • ULID:Universally Unique Lexicographically Sortable Identifier(通用唯一詞典分類標識符) UUID:Universally Unique Identifier(通用唯一標識符) 為什麼不選擇UUID UUID 目前有 5 個版本: 版本1: ...
  • 虛基類/抽象類 抽象類:有純虛函數的類 虛繼承 通過修飾繼承方式, 如代碼2是虛繼承,被虛繼承的類稱為虛基類 虛繼承派生類的記憶體佈局方式 先是vbptr => 派生類的數據 =>基類的數據 , 對比代碼1和代碼2,發現原本基類數據在前面,派生類數據在後面,但是在虛繼承的時候 基類數據方式放到了後面, ...
  • 下麵給出 Kafka 一些重要概念,讓大家對 Kafka 有個整體的認識和感知,後面還會詳細的解析每一個概念的作用以及更深入的原理 • Producer:消息生產者,向 Kafka Broker 發消息的客戶端。 • Consumer:消息消費者,從 Kafka Broker 取消息的客戶端。 • ...
  • 前面介紹了對稱加密演算法,本文將介紹密碼學中另一類重要應用:消息摘要(Digest),什麼是消息摘要?簡單的定義是:對一份數據,進行一個單向的Hash函數,生成一個固定長度的Hash值,這個值就是這份數據的摘要,也稱為指紋。 ...
  • 弟弟最近要考試,臨時抱佛腳在網上找了一堆學習資料複習,這不剛就來找我了,說PDF上有水印,影響閱讀效果,到時候考不好就怪資料不行,氣的我差點當場想把他揍一頓! 算了,弟弟長大了,看在打不過他的份上,就不打他了~ 稍加思索,我想起了Python不是可以去水印?說搞就搞! 去除水印原理 去除方法: 用 ...
  • 作者:陳昌浩 1 導讀 if…else…在代碼中經常使用,聽說可以通過Java 8的Function介面來消滅if…else…!Function介面是什麼?如果通過Function介面介面消滅if…else…呢?讓我們一起來探索一下吧。 2 Function介面 Function介面就是一個有且僅有 ...