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
  • 在本篇教程中,我們學習瞭如何使用 Taurus.MVC WebMVC 框架創建一個簡單的頁面。 我們創建了一個控制器並編寫了一個用於呈現頁面的方法,然後創建了對應的視圖,並最終成功運行了應用程式。 在下一篇教程中,我們將繼續探索 Taurus.MVC WebMVC 框架的更多功能和用法。 ...
  • 一:背景 1. 講故事 很多.NET開發者在學習高級調試的時候,使用sos的命令輸出會發現這裡也看不懂那裡也看不懂,比如截圖中的這位朋友。 .NET高級調試屬於一個偏冷門的領域,國內可觀測的資料比較少,所以很多東西需要你自己去探究源代碼,然後用各種調試工具去驗證,相關源代碼如下: coreclr: ...
  • 我一直都以為c中除以2的n次方可以使用右移n位代替,然而在實際調試中發現並不都是這樣的。是在計算餘數是發現了異常 被除數:114325068 右移15計算結果:3488 除法取整計算結果:3489 右移操作計算餘數:33772 除法取整計算餘數:1005 顯然:這是不一樣的。 移位操作是一條cpu指 ...
  • 在上一篇文章中,我們介紹了ReentrantLock類的一些基本用法,今天我們重點來介紹一下ReentrantLock其它的常用方法,以便對ReentrantLock類的使用有更深入的理解。 ...
  • Excelize 是 Go 語言編寫的用於操作電子錶格辦公文檔的開源基礎庫,2024年2月26日,社區正式發佈了 2.8.1 版本,該版本包含了多項新增功能、錯誤修複和相容性提升優化。 ...
  • 雲採用框架(Cloud Adoption Framework,簡稱CAF)為企業上雲提供策略和技術的指導原則和最佳實踐,幫助企業上好雲、用好雲、管好雲,併成功實現業務目標。本雲採用框架是基於服務大量企業客戶的經驗總結,將企業雲採用分為四個階段,並詳細探討企業應在每個階段採取的業務和技術策略;同時,還 ...
  • 與TXT文本文件,PDF文件更加專業也更適合傳輸,常用於正式報告、簡歷、合同等場合。項目中如果有使用Java將TXT文本文件轉為PDF文件的需求,可以查看本文中介紹的免費實現方法。 免費Java PDF庫 本文介紹的方法需要用到Free Spire.PDF for Java,該免費庫支持多種操作、轉 ...
  • 指針和引用 當我們需要在程式中傳遞變數的地址時,可以使用指針或引用。它們都可以用來間接訪問變數,但它們之間有一些重要的區別。 指針是一個變數,它存儲另一個變數的地址。通過指針,我們可以訪問存儲在該地址中的變數。指針可以被重新分配,可以指向不同的變數,也可以為NULL。指針使用*運算符來訪問存儲在地址 ...
  • 即使再小再簡單的需求,作為研發開發完畢之後,我們可以直接上線麽?其實很多時候事故往往就是由於“不以為意”發生的。事故的發生往往也遵循“墨菲定律”,這就要求我們更要敬畏線上,再小的需求點都需要經過嚴格的測試驗證才能上線。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、是什麼 許可權是對特定資源的訪問許可,所謂許可權控制,也就是確保用戶只能訪問到被分配的資源 而前端許可權歸根結底是請求的發起權,請求的發起可能有下麵兩種形式觸發 頁面載入觸發 頁面上的按鈕點擊觸發 總的來說,所有的請求發起都觸發自前端路由或 ...