天天看點

9. JSP - 核心标簽庫

JSTL核心标簽庫簡介

JSTL中的核心标簽庫主要用于完成基本的邏輯運算,在開發中使用較多。

在開發前導入相關jar包之後,還需要在頁面中通過 taglib 指令将标簽庫導入: 

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>      

這是核心庫的頭 定死了的啊  阿帕奇規定這樣使用的:

我們開始講解  核心庫中有哪些标簽:

c:out标簽

用于在頁面上輸出 EL 表達式的值,該标簽不常使用,因為不使用該标簽也能夠在頁面上輸出EL表達式。

例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <%
        request.setAttribute("name", "bihu");
    %>
    
    為什麼不經常用?   因為直接el表達式即可輸出:
    <br>
    <br>
    1. el表達式直接輸出: ${ name }
    <br>
    2. 用c:out 标簽:     <c:out value="name :  ${ name }"></c:out>

</body>
</html>      

是以,,,為什麼不經常用...

c:catch标簽

當有異常發生時,用于捕獲異常。相當于 try-catch 中的 catch 代碼塊,該标簽中隻有一個屬性 var,是捕獲到的異常對象,名稱可以自定義。該标簽不常用,一般不會在頁面中顯示異常資訊。

<c:catch var="e">
        ${ pageContext.name }        <%-- 捕獲的是這個異常!  就像 try - catch 一樣 這裡故意給個異常給他啊! --%>
        
</c:catch>

<%-- 然後我們将其捕獲的異常棧輸出: --%>
<br>
捕獲的異常: ${ e.message  }      

一般會用 調試可能用一下 。

c:if标簽

該标簽主要用于條件判斷。

  • test:判斷的條件。若為 true,則執行标簽體中的内容,否則不執行。
  • var:存儲 test 的判斷結果。不常用。
  • scope:存儲 test 判斷結果的變量的存放範圍。不常用。

三個屬性 先看代碼:

<% 
    request.setAttribute("person", "user");
%>
<c:if test="${ person == 'user' }" var="flag" scope="request">
    管理者
    <br>
    var  : 
    ${ flag }
    <br>
</c:if>      

至于 scope 我也不知道 反正不常用 ... 晚點問老師

:choose标簽

實作多分支判斷。類似于 switch-case 語句。一個 标簽中可以包含多個與一個。

這玩意和switch 差不多:

例:

<% 
    request.setAttribute("hobby", "Game");
%>
 
 <c:choose>
 <c:when test="${ hobby == 'Muisc' }">
     我喜歡聽音樂
 </c:when>
 
 <c:when test="${ hobby == 'football' }">
     我喜歡踢足球
 </c:when>
 
  <c:when test="${ hobby == 'Game' }">
     我喜歡打遊戲
 </c:when>
 
  <c:when test="${ hobby == 'Basketball' }">
     我喜歡打籃球
 </c:when>
 
 </c:choose>      

c:forEach标簽

該标簽用于循環周遊數組、集合(List、Set、Map),實際開發中使用較多。

各周遊都在裡面:

--------------------------c:forEach标簽-------------------------------------
 <br>
 -------------1.周遊數組
<%    Object[] arr = {"北京","上海","廣州","深圳"};    
    request.setAttribute("city", arr);
%>
<br>
<c:forEach items="${ city }" var="city_temp">
                ${ city_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>

<br>
 -------------2.周遊 List
 <%    List<String> list = new ArrayList();
     list.add("張三");
     list.add("李四");
     list.add("王五");
     list.add("趙6");
    request.setAttribute("person", list);
%>
<br>
<c:forEach items="${ person }" var="person_temp">
                ${ person_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>
<br>
 -------------3.周遊 Set
 <%    Set<String> set = new HashSet();
     set.add("1 a");
     set.add("2 b");
     set.add("3 c");
     set.add("4 d");
    request.setAttribute("code", set);
%>
<br>
<c:forEach items="${ code }" var="code_temp">
                ${ code_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>

 -------------4.周遊 Map
 <%    Map<Integer,String> map = new HashMap();
     map.put(1, "資訊工程學院");
     map.put(2, "現代教育學院");
     map.put(3, "機電技術學院");
     map.put(4, "藝術學院");
     map.put(5, "經濟管理學院");
    request.setAttribute("college", map);
%>
<br>
<c:forEach items="${ college }" var="college_temp">
                ${ college_temp.key } : ${ college_temp.value }
                 <br>      <%-- 開始周遊 --%>
</c:forEach>      

特别注意 Map 的周遊 如果你不以 xxx.key xxx.value  形式來的話 如果直接輸出會輸出 key=value 這種形式

c:forEach标簽 還有幾個标簽要講解: begin 、end 和 step 和 varStatus

begin  和 end 是開始和結束的意思  在這個标簽中 他作用是 從哪裡開始周遊 到哪裡結束周遊 ,但是 都包括了 begin 和 end 【即包括自己】

step 邁步的意思  他的作用是 邁開周遊  如果為1 那就以一步走的方式周遊【即全部都周遊】 如果為2 那就以兩步走的方式周遊: 例如: 有 1 2 3 4 5 6 我的step為2 那麼我周遊的元素是:

1 3 5 , 是以這個你要認真看下就懂了

varStatus 是用來存儲狀态的,下圖講解了:【圖源自于網上 滿好的.】

9. JSP - 核心标簽庫

是以 你就可以   varStatus.xxxx 使用了:

例: 用list做資料庫 建立一個表格 規定 1 3 5 、 2 4 5 行 不同顔色:

<%-- 最好用 類 的方式存儲! ! 這裡示範就用String 和 Integer 了 !!!  --%>
<%  Map<String,Integer> table = new HashMap();
    table.put("雷軍", 32);
    table.put("柳傳志", 29);
    table.put("馬雲", 33);
    table.put("馬化騰", 41);
    table.put("陳歐", 22);
    request.setAttribute("person", table);
%>

<table border="1">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年齡</td>
</tr>

<c:forEach items="${ person }"   var="person_temp" varStatus="i">
<tr style="${ i.index % 2 == 0 ? 'background-color:#7bbfea' :'background-color:#007947' }">
<td>
${ i.index }
</td>
<td>
${person_temp.key }
</td>
<td>
${person_temp.value }
</td>
</tr>
</c:forEach>

</table>      

代碼也寫到了 集合哪裡最好存儲類 不然的話你隻能存儲就那麼兩個 如果是類,就可以 類.xx 這樣代碼健壯性和很友善 快捷 ,因為foreach周遊的是每個元素。。。。

關于 varStatus  圖示的屬性 自己多去使用即可!

圖:

9. JSP - 核心标簽庫

完全代碼:

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.Set"%>
<%@page import="java.util.HashSet"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table{
border-collapse:collapse;
}
</style>
</head>
<body>
<!-- --------------------------c:out标簽------------------------------------- -->
<br>
<br>
 <hr>
    <%
        request.setAttribute("name", "bihu");
    %>
    
    為什麼不經常用?   因為直接el表達式即可輸出:
    <br>
    <br>
    1. el表達式直接輸出: ${ name }
    <br>
    2. 用c:out 标簽:     <c:out value="name :  ${ name }"></c:out>


 <hr>
 --------------------------c:catch标簽------------------------------------- 

<c:catch var="e">
        ${ pageContext.name }        <%-- 捕獲的是這個異常!  就像 try - catch 一樣 這裡故意給個異常給他啊! --%>
        
</c:catch>

<%-- 然後我們将其捕獲的異常棧輸出: --%>
<br>
捕獲的異常: ${ e.message  }

 <hr>
 --------------------------c:if标簽------------------------------------- 
<br>
<br>
<% 
    request.setAttribute("person", "user");
%>
<c:if test="${ person == 'user' }" var="flag" scope="request">
    管理者
    <br>
    var  : 
    ${ flag }
    <br>
    
</c:if>
 --------------------------c:choose标簽-------------------------------------
 <br>
 
 <% 
    request.setAttribute("hobby", "Game");
%>
 
 <c:choose>
 <c:when test="${ hobby == 'Muisc' }">
     我喜歡聽音樂
 </c:when>
 
 <c:when test="${ hobby == 'football' }">
     我喜歡踢足球
 </c:when>
 
  <c:when test="${ hobby == 'Game' }">
     我喜歡打遊戲
 </c:when>
 
  <c:when test="${ hobby == 'Basketball' }">
     我喜歡打籃球
 </c:when>
 
 </c:choose> 
<br>
 --------------------------c:forEach标簽-------------------------------------
 <br>
 -------------1.周遊數組
<%    Object[] arr = {"北京","上海","廣州","深圳"};    
    request.setAttribute("city", arr);
%>
<br>
<c:forEach items="${ city }" var="city_temp">
                ${ city_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>

<br>
 -------------2.周遊 List
 <%    List<String> list = new ArrayList();
     list.add("張三");
     list.add("李四");
     list.add("王五");
     list.add("趙6");
    request.setAttribute("person", list);
%>
<br>
<c:forEach items="${ person }" var="person_temp">
                ${ person_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>
<br>
 -------------3.周遊 Set
 <%    Set<String> set = new HashSet();
     set.add("1 a");
     set.add("2 b");
     set.add("3 c");
     set.add("4 d");
    request.setAttribute("code", set);
%>
<br>
<c:forEach items="${ code }" var="code_temp">
                ${ code_temp } <br>      <%-- 開始周遊 --%>
</c:forEach>

 -------------4.周遊 Map
 <%    Map<Integer,String> map = new HashMap();
     map.put(1, "資訊工程學院");
     map.put(2, "現代教育學院");
     map.put(3, "機電技術學院");
     map.put(4, "藝術學院");
     map.put(5, "經濟管理學院");
    request.setAttribute("college", map);
%>
<br>
<c:forEach items="${ college }" var="college_temp">
                ${ college_temp.key } : ${ college_temp.value }
                 <br>      <%-- 開始周遊 --%>
</c:forEach>

<br>
------------------------------------制作表格
<%-- 最好用 類 的方式存儲! ! 這裡示範就用String 和 Integer 了 !!!  --%>
<%  Map<String,Integer> table = new HashMap();
    table.put("雷軍", 32);
    table.put("柳傳志", 29);
    table.put("馬雲", 33);
    table.put("馬化騰", 41);
    table.put("陳歐", 22);
    request.setAttribute("person", table);
%>

<table border="1">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年齡</td>
</tr>

<c:forEach items="${ person }"   var="person_temp" varStatus="i">
<tr style="${ i.index % 2 == 0 ? 'background-color:#7bbfea' :'background-color:#007947' }">
<td>
${ i.index }
</td>
<td>
${person_temp.key }
</td>
<td>
${person_temp.value }
</td>
</tr>
</c:forEach>

</table>




</body>
</html>      

說明: 這裡為什麼一直用request這個域存儲屬性? 随便的啊 這裡圖友善 你可以用其他的,比如pageContext 、 session 、 什麼什麼都可以 , 你喜歡。

這裡就說那麼多常用的 還有很多自己去百度....                    完。