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
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...