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.1 關於C# C#只是一種簡單安全的新型面向對象語言,繼承了C的語法風格和C++的面向對象特性,不再提供對指針類型的支持(因此程式不可隨便訪問記憶體地址空間)、不再支持多重繼承; C#的誕生意義是生成面向.NET Framework環境的代碼,身為編程語言的一種,它作為開發工具而存在,本身並不是. ...
  • 往一張產品圖片上,加兩個小標簽,Demo實現最好的效果 素材例圖與最終效果如下: 具體實現的代碼如下: 添加引用: using System.Drawing; using System.Drawing.Drawing2D; 註意:如果添加命名空間沒效果,加一下Nuget包 System.Drawin ...
  • 前置要求:有百度賬號,實名認證以及開發者認證,創建應用並獲取到關鍵憑證:Appid、Appkey、Secretkeyk和Signkey 平臺上入門十分清楚,直接對著逐步操作即可,個人開發者審核也很快 百度網盤開放平臺地址如下:https://pan.baidu.com/union/doc/nksg0 ...
  • 使用方法 安裝 Maven <dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-join</artifactId> <version>1.2.4</version> </dependency> G ...
  • 數字常量 int: 一般的整數, long: 長整型,2.x版本需在數字後加 “L” 或 “l” ,表示長整型 如 100000000L; python3.x 版本後不分長整型,統一為int,不可加 “L” 或 “l” float: 浮點數,1.0 也為浮點數,float 可強制轉換為 int,取整 ...
  • if __name__ == "__main__" 也就是說執行當前文件,不調用模塊的時候__name__=__main__ 調用模塊的時候,測試如下: 1、新建 test01.py 文件測試代碼如下 print("這條消息來自test01") def func(): print('hello, w ...
  • 一.scoket基本介紹 1.scoket簡介(以下是來自chatgpt回答) 1)Socket(套接字)是電腦網路中用於描述主機之間通信的一種機制。它定義了一種標準的介面, 使得應用程式可以利用網路傳輸層提供的服務(如TCP或UDP)進行通信。 2)Socket的作用是在網路應用程式之間提供數據 ...
  • 一、函數的定義 可以分為以下兩種: 1、函數聲明和函數定義分離 這種方法將函數聲明和函數定義分開,通常在頭文件中先聲明函數原型,然後在源文件中實現函數定義。 例如,頭文件 example.h 中聲明瞭一個函數 add: #ifndef EXAMPLE_H #define EXAMPLE_H int ...
  • 一 回顧trait使用 https://blog.csdn.net/bushuwei/article/details/103514174發現之前本人說明很模糊,自己居然不知道為什麼其實這裡的$c,就是class B再次回顧邏輯 二 分析 self和static區別說的沒毛病 Trait基類use t ...
  • 一、延遲計算 RDD 代表的是分散式數據形態,因此,RDD 到 RDD 之間的轉換,本質上是數據形態上的轉換(Transformations) 在 RDD 的編程模型中,一共有兩種運算元,Transformations 類運算元和 Actions 類運算元。開發者需要使用 Transformations ...