jsp的標籤技術:在jsp頁面中最好不要出現java程式碼,這時我們可以使用標籤技術將java程式碼替換成標籤來表示
1.jsp標籤:sun原生提供的標籤直接在jsp頁面中就可以使用
<jsp:include> -- 實現頁面包含,動態包含
<jsp:forward> -- 實現請求轉發
<jsp:param> -- 配合上面的兩個標籤使用,在請求包含和請求轉發時用來在路徑後拼接一些請求引數
2.EL表示式:最初出現的目的是用來取代jsp頁面中的jsp指令碼表示式.但是隨著el的發展el的功能已經不限於此了
${el表示式}
(1)獲取資料:
使用中括號的地方都可以使用點號替代,除了中括號中是數字或者中括號中包含特殊字元(-.)的情況除外
在中括號中如果不用雙引號引起來則是變數,先找變數的值再拿變數的值使用.如果用雙引號則是常量,直接使用常量的值
~獲取常量
字串/數字/布林型別,直接寫在el表示式中,el直接進行輸出
~獲取域中的變數
如果el中寫的是一個變數的名,則el會呼叫pageContext的findAttribute方法,在四大作用域中以給定的名字找對應的屬性值,找到後進行輸出,如果四個域中都找不到,什麼都不輸出
~獲取陣列中的資料
~獲取集合中的資料
~獲取Map中的資料
~獲取javabean的屬性
程式碼演示:
//我是javabean package com.dzq.domain; public class UserBean { private String username; private int age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
我 的 下 面 是 jsp 頁 面 ,上 面 是javabean,哈哈哈
<%@page import="java.util.*" import="com.dzq.domain.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>獲取javabean的屬性</h1><hr> <% UserBean user=new UserBean(); user.setUsername("hello"); user.setAge(17); pageContext.setAttribute("user", user); %> ${user.username }${user.age } <h1>獲取Map中的資料</h1><hr> <% Map<String,String> map=new HashMap<String,String>(); map.put("name", "噹噹"); map.put("age", "17"); map.put("sex","男"); map.put("addr", "山東"); pageContext.setAttribute("map",map); %> ${map["name"] } ${map["addr"] } ${map.sex } ${map.age } <h1>獲取集合中的資料</h1><hr> <% List<String> list=new ArrayList<String>(); list.add("甄嬛"); list.add("果郡王"); list.add("流朱"); list.add("浣碧"); pageContext.setAttribute("list",list); %> ${list[2] } <h1>獲取陣列中的資料</h1><hr> <% String [] names={"滋味","hello","呵呵"}; pageContext.setAttribute("names", names); %> ${names[0]} <h1>獲取域中的變數資料</h1><hr> <% String name="hello"; pageContext.setAttribute("name", name); %> ${name} <h1>獲取常量資料</h1><hr> ${"發射 發射發射" } ${199 } ${true} </body> </html>
執行截圖
(2)執行運算:
算數運算
+-*/
邏輯運算
比較運算
三元運算子
empty運算子
程式碼演示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>empty </h1>判斷物件是否為空,或者字串為空,集合為空,域的屬性為空<hr> <% String str=null; pageContext.setAttribute("str", str); %> ${empty str } <h1>算數運算</h1><hr> ${1-2 } ${2-1 } ${2+"3" } //如果有非數字參加算數運算,el表示式會試圖將其轉化成數字 <h1>邏輯運算</h1><hr> ${1<0 &&3>4 ||10<5} <h1>比較運算</h1><hr> ${1==1 } ${3<=2 } <h1>三元運算</h1><hr> ${10>9?"yes":"no" } </body> </html>
(3)獲取常用開發物件:el中內建了11個內建物件,這些物件el內建的,不需要提前定義就可以直接在el中使用
!pageContext -- 有了它可以很方便的獲取jsp頁面中的9大隱式物件
!pageScope -- page域中屬性組成的Map
!requestScope -- request域中屬性組成的Map
!sessionScope -- session域中屬性組成的Map
!applicationScope --application域中屬性組成的Map
!param -- 所有請求引數組成的Map<String,String>
paramValues -- 所有請求引數組成的Map<String,String[]>
header -- 所有請求頭組成的Map<String,String>
headerValues -- 所有請求頭組成的Map<String,String[]>
!cookie -- 所有cookie資訊組成的Map<String,Cookie>
initParam -- 所有web應用的初始化引數組成Map
(4)呼叫java方法: -- 不需要大家自己會寫呼叫方法的過程,只要會呼叫別人寫好的標籤庫就可以了 fn標籤庫
~寫一個類其中包含要被el呼叫的方法,這個方法必須是靜態的方法
~寫一個tld檔案在其中對要被呼叫的靜態方法進行一下描述
~在jsp頁面中taglib指令將tld檔案引入當前jsp頁面,從而在jsp頁面中就可以呼叫描述好的方法
先寫一個java方法:
package com.dzq.util; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class ELFunc { public static String myEncode(String str,String encode){ try { return URLEncoder.encode(str, encode); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }
再寫tld檔案
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>MyELFunc</short-name> <uri>http://www.itheima.com/MyELFunc</uri> <function> <name>URLEnc</name> <function-class>com.dzq.util.ELFunc</function-class> <function-signature> java.lang.String myEncode(java.lang.String,java.lang.String)</function-signature> </function> </taglib>
jsp中呼叫java方法:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.itheima.com/MyELFunc" prefix="MyELFunc" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${MyELFunc:URLEnc("上海","UTF-8") } ${fn:toLowerCase("adaddAADTFThuhuhhhhHHhhhH") } </body> </html>
3.JSTL:
<c:out> 標籤用於輸出一段文字內容到pageContext物件當前儲存的“out”物件中。
<body> <h1>HTML轉義輸出</h1><hr> <a href="#">xxx</a> <c:out value="<a href='#'>xxx</a>"></c:out> <h1>輸出預設值</h1><hr> <% String addr="Hello哦"; %> <c:out value="${addr }" default="呵呵呵"></c:out> <h1>輸出變數</h1><hr> <% String name="張亮"; pageContext.setAttribute("name", name); %> <c:out value="${name }"></c:out> <h1>輸出常量</h1><hr> <c:out value="hello"></c:out> </body>
<c:set>標籤用於把某一個物件存在指定的域範圍內,或者設定Web域中的java.util.Map型別的屬性物件或JavaBean型別的屬性物件的 屬性。
<body> <h1>設定或修改域中javabean屬性的值</h1><hr> <% UserBean user=new UserBean(); pageContext.setAttribute("user", user); %> <c:set target="${user}" property="username" value="叭叭叭"></c:set> ${user.username } <h1>設定或修改域中Map值</h1><hr> <% Map<String,String> map=new HashMap<String,String>(); pageContext.setAttribute("map", map); %> <c:set target="${map }" property="cellphone" value="10010"></c:set> <c:set target="${map }" property="cellphone" value="10086"></c:set> ${map.cellphone } <h1>設定或修改域中的屬性值</h1><hr> <c:set var="name" value="韋小寶"></c:set> <c:set var="name" value="阿珂"></c:set> ${name } </body>
<c:remove>標籤用於刪除各種Web域中的屬性
<c:catch>標籤用於捕獲巢狀在標籤體中的內容丟擲的異常,其語法格式如下:<c:catch [var="varName"]>nested actions</c:catch>
<body> <c:catch var="e"> <% int i=1/0; %> </c:catch> ${e.message } </body>
!!<c:if test=“”>標籤可以構造簡單的“if-then”結構的條件表示式
<body> <c:if test="${2>1 }"> 確實是這樣的 </c:if> <c:if test="${2<=1 }"> 你確定??? </c:if> </body>
!!<c:choose>標籤用於指定多個條件選擇的組合邊界,它必須與<c:when>和<c:otherwise>標籤一起使用。使用<c:choose>,<c:when>和<c:otherwise>三個標籤,可以構造類似 “if-else if-else” 的複雜條件判斷結構。
<body> <% int day=3; pageContext.setAttribute("day", day); %> <c:choose> <c:when test="${day==1 }"> 星期一 </c:when> <c:when test="${day==2 }"> 星期二 </c:when> <c:when test="${day==3 }"> 星期三 </c:when> </c:choose> </body>
!!<c:forEach>標籤用於對一個集合物件中的元素進行迴圈迭代操作,或者按指定的次數重複迭代執行標籤體中的內容。
<body> <h1>實驗:遍歷10-100的偶數,如果數字所在位置是3的倍數,則顯示成紅色</h1> <c:forEach begin="10" end="100" step="2" var="i" varStatus="stat"> <c:if test="${stat.index %3==0 }"> <font color="red"> ${i } </font> </c:if> <c:if test="${stat.index %3!=0 }"> <font color="blue"> ${i } </font> </c:if> </c:forEach> <h1>迴圈執行指定的內容若干次</h1><hr> <c:forEach begin="0" end="10" step="2" var="i"> ${i }, </c:forEach> <h1>遍歷Map資料</h1><hr> <% Map map=new LinkedHashMap(); map.put("name", "hello"); map.put("jj", "hell"); map.put("heh", "hel"); pageContext.setAttribute("map", map); %> <c:forEach items="${map }" var="m"> ${m.key}:${m.value }<br> </c:forEach> <h1>遍歷集合資料</h1><hr> <% List list =new ArrayList(); list.add("美國"); list.add("韓國"); list.add("額國"); pageContext.setAttribute("list", list); %> <c:forEach items="${list }" var="l"> ${l } </c:forEach> <h1>遍歷陣列資料</h1><hr> <% String [] city={"北京","上海","南京","雲南","李靜"}; pageContext.setAttribute("city",city); %> <c:forEach items="${city }" var="c"> ${c }<br> </c:forEach> </body>
!!<c:forTokens>用來瀏覽一字串中所有的成員,其成員是由定義符號所分隔的
<body> <c:forTokens items="www.baidu.com" delims="." var="str"> ${str }<br> </c:forTokens> </body>
<c:param>標籤 在JSP頁面進行URL的相關操作時,經常要在URL地址後面附加一些引數。<c:param>標籤可以巢狀在<c:import>、<c:url>或<c:redirect>標籤內,為這些標籤所使用的URL地址附加引數。
<c:import> 標籤,實現include操作
<body> <c:import url="../index.jsp" var="p" scope="page"></c:import> bbb cccc cccc ${p } llll </body>
<c:url>標籤用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。URL重寫就是將會話標識號以引數形式附加在URL地址後面
<body> <% String url=response.encodeURL(request.getContextPath()+"/index.jsp"); %> <a href="<%=url %>">jajaj</a> <c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="url" scope="page"></c:url> <a href="${url }">bbbb</a> </body>
<c:redirect>標籤用於實現請求重定向
<body> <c:redirect url="/index.jsp" context="${pageContext.request.contextPath }"></c:redirect> </body>
4.自定義標籤技術:
暫時省略