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
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...