国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JSTL標(biāo)簽和EL表達(dá)式學(xué)習(xí)

2019-11-11 07:22:58
字體:
供稿:網(wǎng)友

JSTL簡單介紹

什么是JSTL?

JSTL是apache對(duì)EL表達(dá)式的擴(kuò)展(也就是說JSTL依賴EL),JSTL是標(biāo)簽語言!JSTL標(biāo)簽使用以來非常方便,它與jsp動(dòng)作標(biāo)簽一樣,只不過它不是JSP內(nèi)置的標(biāo)簽,需要我們自己導(dǎo)包,以及指定標(biāo)簽庫而已!,JSTL是有tld文件(JSTL1.1含有5個(gè)tld文件)和標(biāo)準(zhǔn)處理類組成

如果你使用MyEclipse開發(fā)javaWeb,那么在把項(xiàng)目發(fā)布到Tomcat時(shí),你會(huì)發(fā)現(xiàn),MyEclipse會(huì)在lib目錄下存放jstl的Jar包!如果你沒有使用MyEclipse開發(fā)那么需要自己來導(dǎo)入這個(gè)JSTL的Jar包:jstl-1.2.jar

JSLT的下載:

下載之后解壓導(dǎo)入jstl.jar和standard.jsr包導(dǎo)入lib目錄下:

http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

JSTL標(biāo)簽介紹和使用

JSTL標(biāo)簽庫:

JSTL一共包含四大標(biāo)簽庫:

core:核心標(biāo)簽庫,我們學(xué)習(xí)的重點(diǎn)fmt:格式化標(biāo)簽庫,只需要學(xué)習(xí)兩個(gè)標(biāo)簽即可sql:數(shù)據(jù)庫標(biāo)簽庫,不需要學(xué)習(xí)了,它過時(shí)了xml:xml標(biāo)簽庫,不需要學(xué)習(xí)了,它過時(shí)了

使用taglib指令導(dǎo)入標(biāo)簽庫:

除了JSP動(dòng)作標(biāo)簽外,使用其他第三方的標(biāo)簽庫都需要:

導(dǎo)包在使用標(biāo)簽的JSP頁面中使用taglib指令導(dǎo)入標(biāo)簽庫

下面是導(dǎo)入JSTL的core標(biāo)簽庫:

<%@ taglib prefix=”c”:指定標(biāo)簽庫的前綴,這個(gè)前綴可以隨便給值,但大家都會(huì)在使用core標(biāo)簽庫時(shí)指定前綴為c

uri=”http://java.sun.com/jstl/core”:指定標(biāo)簽庫的uri,它不一定是真實(shí)存在的網(wǎng)址,但它可以讓JSP找到標(biāo)簽庫的描述文件

core標(biāo)簽庫常用標(biāo)簽:

out和set標(biāo)簽:

<c:out value=”aaa”/> //輸出aaa字符串常量<c:out value=”${aaa}”/> //與${aaa}相同<c:out value=”${aaa}” default=”xxx”/> //當(dāng)${aaa}不存在時(shí),輸出xxx字符串<%request.setAttribute("a","<script>alert('hello');</script>");%><c:out value="${a }" default="xxx" escapeXml="false" />如果為escapeXml="false",則將其中的html、xml解析出來,還可以輸出轉(zhuǎn)義字符,所以會(huì)輸出hello<c:set var=”a” value=”hello”/> //在pageContext中添加name為a,value為hello的數(shù)據(jù)<c:set var="a" scope="
session">hello</c:set> //也是輸出hello<c:set var=”a” value=”hello” scope=”session”/> //在session中添加name為a,value為hello的數(shù)據(jù)

remove標(biāo)簽:

<%pageContext.setAttribute("a","pageContext");request.setAttribute("a","session");session.setAttribute("a","session"); application.setAttribute("a","application");%><c:remove var="a"/> //刪除所有域中name為a的數(shù)據(jù)!<c:out value="${a}" default="none"/><c:remove var="a" scope=”page”/> //刪除pageContext中name為a的數(shù)據(jù)

catch標(biāo)簽:

<c:catch var="error"> <%=10/0></c:catch>//捕獲異常,后面的代碼繼續(xù)執(zhí)行<c:out value="${error}"/> //輸出異常信息

if標(biāo)簽:

if標(biāo)簽的test屬性必須是一個(gè)boolean類型的值,如果test的值為true,那么執(zhí)行if標(biāo)簽的內(nèi)容,否則不執(zhí)行

<c:set var="a" value="hello"/> <c:if test="${not empty a }" var="result" scope="session"> <c:out value="正確"/> </c:if><c:out value="${result}"></c:out> //輸出"正確"

choose,when,otherwise標(biāo)簽:

choose標(biāo)簽對(duì)應(yīng)Java中的if/else,when標(biāo)簽的test為true時(shí),會(huì)執(zhí)行這個(gè)when的內(nèi)容,當(dāng)所有when標(biāo)簽的test都為false時(shí),才會(huì)執(zhí)行otherwise標(biāo)簽的內(nèi)容,choose標(biāo)簽可以省略不寫

<c:set var="score" value="${param.score }"/> <c:choose> <c:when test="${score > 100 || score < 0}">錯(cuò)誤的分?jǐn)?shù):${score }</c:when> <c:when test="${score >= 90 }">A級(jí)</c:when> <c:when test="${score >= 80 }">B級(jí)</c:when> <c:when test="${score >= 70 }">C級(jí)</c:when> <c:when test="${score >= 60 }">D級(jí)</c:when> <c:otherwise>E級(jí)</c:otherwise> </c:choose>

forEach標(biāo)簽:

forEach當(dāng)前就是循環(huán)標(biāo)簽了,forEach標(biāo)簽有多種兩種使用方式:

使用循環(huán)變量,指定開始和結(jié)束值,類似for(int i = 1; i <= 10; i++) {}循環(huán)遍歷集合,類似for(Object o : 集合)

循環(huán)變量:

<c:set var="sum" value="0" /> <c:forEach var="i" begin="1" end="10"> <c:set var="sum" value="${sum + i}" /> </c:forEach> <c:set var="sum" value="0" /> <c:forEach var="i" begin="1" end="10" step ="2"> <c:set var="sum" value="${sum + i}" /> </c:forEach>

遍歷集合或數(shù)組方式:

<% String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"}; pageContext.setAttribute("ns", names); %> <c:forEach var="item" items="${ns }"> <c:out value="name: ${item }"/><br/> </c:forEach>

遍歷List:

<% List<String> names = new ArrayList<String>(); names.add("zhangSan"); names.add("liSi"); names.add("wangWu"); names.add("zhaoLiu"); pageContext.setAttribute("ns", names); %> <c:forEach var="item" items="${ns }" begin="1" end="3"> <c:out value="name: ${item }"/><br/> </c:forEach>

遍歷Map:

<% Map<String,String> stu = new LinkedHashMap<String,String>(); stu.put("number", "N_1001"); stu.put("name", "zhangSan"); stu.put("age", "23"); stu.put("sex", "male"); pageContext.setAttribute("stu", stu); %> <c:forEach var="item" items="${stu }"> <c:out value="${item.key }: ${item.value }"/><br/> </c:forEach>

forEach標(biāo)簽還有一個(gè)屬性:varStatus,這個(gè)屬性用來指定接收”循環(huán)狀態(tài)”的變量名,例如:<forEach varStatus=”vs” …/>,這時(shí)就可以使用vs這個(gè)變量來獲取循環(huán)的狀態(tài)了

count:int類型,當(dāng)前以遍歷元素的個(gè)數(shù)index:int類型,當(dāng)前元素的下標(biāo)first:boolean類型,是否為第一個(gè)元素last:boolean類型,是否為最后一個(gè)元素current:Object類型,表示當(dāng)前項(xiàng)目<c:forEach var="item" items="${ns }" varStatus="vs"> <c:if test="${vs.first }">第一行:</c:if> <c:if test="${vs.last }">最后一行:</c:if> <c:out value="第${vs.count }行: "/> <c:out value="[${vs.index }]: "/> <c:out value="name: ${vs.current }"/><br/> </c:forEach>

forTokens標(biāo)簽:

通過指定分隔符將字符串分隔為一個(gè)數(shù)組然后迭代它們,delims:分隔符

<c:forTokens items="google,runoob,taobao" delims="," var="name"> <c:out value="${name}"/><p></c:forTokens> //輸出google runoob taobao

c:import 標(biāo)簽:

使用c:import標(biāo)簽可以包含一個(gè)FTP服務(wù)器中不同的網(wǎng)頁內(nèi)容

<c:import var="data" url="http://www.runoob.com"/><c:out value="${data}"/> //以上程序?qū)?huì)打印http://www.runoob.com"頁面的源代碼<c:import url="/import.jsp" context="/WebProjext"/> //引入同一個(gè)服務(wù)器下的另外一個(gè)Project

c:redirect>標(biāo)簽:

c:redirect標(biāo)簽通過自動(dòng)重寫URL來將瀏覽器重定向至一個(gè)新的URL,它提供內(nèi)容相關(guān)的URL,并且支持c:param標(biāo)簽,context:緊接著一個(gè)本地網(wǎng)絡(luò)應(yīng)用程序的名稱

<c:redirect url="if.jsp"> <c:param name="aa" value="123"></c:param>//傳參數(shù)</c:redirect> //用${param.aa}可以獲得

url標(biāo)簽:該標(biāo)簽會(huì)在需要重寫URL時(shí)添加

<c:url value="/"/> //輸出上下文路徑:/項(xiàng)目名/<c:url value="/" var="a" scope="request"/> //把本該輸出的結(jié)果賦給變量a,范圍為request<c:url value="/AServlet"> <c:param name="username" value="abc"/> <c:param name="passWord" value="123"/></c:url> //輸出:/項(xiàng)目名/AServlet?username=abc&password=123,如果參數(shù)中包含中文,那么會(huì)自動(dòng)使用URL編碼!

fmt標(biāo)簽庫常用標(biāo)簽:

fmt標(biāo)簽庫是用來格式化輸出的,通常需要格式化的有時(shí)間和數(shù)字

格式化時(shí)間:

<% Date date = new Date(); pageContext.setAttribute("d", date); %> <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>

格式化數(shù)字:

<% double d1 = 3.5; double d2 = 4.4; pageContext.setAttribute("d1", d1); pageContext.setAttribute("d2", d2); %> <fmt:formatNumber value="${d1 }" pattern="0.00"/><br/> <fmt:formatNumber value="${d2 }" pattern="#.##"/>

JSTL(fn函數(shù)):

首先,我們要在頁面的最上方引用:

<%@ taglib prefix="fn" uri="http://Java.sun.com/jsp/jstl/functions" %>

基本函數(shù)使用:

fn:contains(string, substring)

<c:if test="${fn:contains("你好","你好了嗎")}"/> //前面的字符串是否包含后面的fn:containsIgnoreCase(string, substring) //忽略大小寫的包含fn:endsWith(string, suffix) //假如參數(shù)string以參數(shù)suffix結(jié)尾,返回truefn:indexOf(string, substring) //返回參數(shù)substring在參數(shù)string中第一次出現(xiàn)的位置

fn:escapeXml(string)

將有非凡意義的XML (和HTML)轉(zhuǎn)換為對(duì)應(yīng)的XML,character entity code,并返回

<c:out value="${fn:excapeXml('<book>歌曲</book>')}"/> <!--輸出&lt;book&gt;歌曲&lt;book&gt;-->

JSP訪問JavaBean:

1.導(dǎo)入javaBean類

<%@ page import="com.anllin.bean.Person" %>

2.聲明javaBean對(duì)象

<jsp:useBean id="person" class="com.anllin.bean.Person"></jsp:useBean>

其實(shí)相當(dāng)于

<% Person person = new Person(); %>

Id表示生成一個(gè)類的實(shí)例,一般id不能重復(fù),用于表示不同的對(duì)象,如果相同則表示同一個(gè)對(duì)象,這種情況下jsp會(huì)報(bào)錯(cuò)

3.訪問javaBean屬性

<jsp:setProperty property="name" name="person" value="jack"/><jsp:getProperty property="name" name="person"/><br>

其實(shí)相當(dāng)于

<% person.setName("jack"); person.getName();%>

也可以使用JSTL:

<c:set target="${person}" property="name" value="jark"/>//相當(dāng)于:<c:set target="${person}" property="name">jark</c:set><c:out value="${person.name}"/>

具體介紹:http://www.cnblogs.com/zfc2201/archive/2011/08/17/2143615.html

EL表達(dá)式介紹

EL(Expression Language)表達(dá)式語言:用于計(jì)算和輸出存儲(chǔ)在標(biāo)志位置(page、request、session、application)的java對(duì)象的值

EL是JSP2.0規(guī)范的一部分,只要容器支持Servlet2.4/JSP2.0,就可以在JSP2.0網(wǎng)頁中直接使用EL

EL表達(dá)式的使用

基本格式:${表達(dá)式}

所有的EL都是以"${"開始,以"}"結(jié)尾表達(dá)式與開始符和終結(jié)符的空格被忽略表達(dá)式的值為null,則在頁面中顯示為一個(gè)空字符串,而不是null

運(yùn)算符的介紹:

算術(shù)運(yùn)算:+、-、*、/或div、%或mod關(guān)系運(yùn)算:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge邏輯運(yùn)算:&&或and、||或or、!或not特殊運(yùn)算:empty(是否為null或空字符串)、?:(三元運(yùn)算符)轉(zhuǎn)義符:/${變量}

EL 提供”.”和”[ ]”兩種運(yùn)算符來存取數(shù)據(jù):

當(dāng)要存取的屬性名稱中包含一些特殊字符,如.或?等并非字母或數(shù)字的符號(hào),就一定要使用”[ ]”,例如:

${user.My-Name}應(yīng)當(dāng)改為${user["My-Name"] }

如果要?jiǎng)討B(tài)取值時(shí),就可以用“[ ]“來做,而“.“無法做到動(dòng)態(tài)取值,例如:

${sessionScope.user[data]}中data 是一個(gè)變量

EL常用的隱式對(duì)象:

作用域(以下11個(gè)EL作用域名稱也是EL提供的隱式對(duì)象):

EL中存取變量:

EL存取變量數(shù)據(jù)的方法很簡單,例如:${username},它的意思是取出某一范圍中名稱為username的變量

因?yàn)槲覀儾]有指定哪一個(gè)范圍的username,所以它會(huì)依序從Page、Request、Session、Application范圍查找

假如途中找到username,就直接回傳,不再繼續(xù)找下去,但是假如全部的范圍都沒有找到時(shí),就回傳null

屬性范圍在EL中的名稱:

Page PageScopeRequest RequestScopeSession SessionScopeApplication ApplicationScope

特別強(qiáng)調(diào):

1.注意當(dāng)表達(dá)式根據(jù)名稱引用這些對(duì)象之一時(shí),返回的是相應(yīng)的對(duì)象而不是相應(yīng)的屬性,例如:即使現(xiàn)有的pageContext 屬性包含某些其他值,${pageContext}也返回 PageContext 對(duì)象

2.注意 <%@ page isELIgnored=”true” %> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認(rèn)的啟用EL語言

基本使用舉例:

< %=request.getParameter(“username”)% >等價(jià)于${ param.username } //注意EL會(huì)進(jìn)行自動(dòng)類型轉(zhuǎn)換
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵武市| 哈尔滨市| 政和县| 新野县| 武邑县| 磴口县| 八宿县| 大方县| 墨玉县| 南雄市| 临西县| 兴山县| 志丹县| 军事| 棋牌| 乐平市| 汉源县| 江孜县| 嘉鱼县| 南昌市| 上杭县| 泊头市| 抚宁县| 阳西县| 玉环县| 汤原县| 教育| 营口市| 岑溪市| 大同县| 宜阳县| 井陉县| 揭东县| 岳普湖县| 宁海县| 汝阳县| 平凉市| 香格里拉县| 饶阳县| 石狮市| 两当县|