EL表達(dá)式和JSTL標(biāo)簽庫(kù): 在JSP頁(yè)面代替java代碼,便于編寫(xiě)
一.EL表達(dá)式
作用: ${} 簡(jiǎn)化腳本表達(dá)式 <%= %>
j2ee1.4以前版本需指定<%@ page isELIgnored="false">
j2ee1.4以后版本默認(rèn)支持EL表達(dá)式
1.EL內(nèi)置對(duì)象
?
EL內(nèi)置11個(gè)對(duì)象,不需定義可直接使用
pageScope 獲取page域?qū)傩越M成的Map
requestScope 獲取reqeust域?qū)傩越M成的Map
sessionScope 獲取session域?qū)傩越M成的Map
applicationScope 獲取application域?qū)傩越M成的MappageContext 獲取jsp的9大隱式對(duì)象, 如 ${pageContext.request}
initParam 獲取在web.xml配置的WEB應(yīng)用參數(shù)param 請(qǐng)求參數(shù)Map<String,String>, 如: ${param.userName}
paramValues 請(qǐng)求參數(shù)Map<String,String[]>, 如: ${paramValues.userName[1]}
header 請(qǐng)求頭Map<String,String[]>, 如: ${header["Accept-Language"] }
headerValues 請(qǐng)求頭Map<String,String[]>cookie 獲取cookie對(duì)象, 如 ${cookie.JSESSIONID.name} ${cookie.JSESSIONID.value}
2.EL語(yǔ)法
1.常量(直接輸出到HTML)
?
${"字符串"} ${123} ${true}
2.變量(在四大域搜尋)
???
${userName} 在四大域搜尋變量名的值,不存在則返回"" (相當(dāng)于 <%= pageContext.findAttribute("userName") %>)${pageScope.userName}${requestScope.userName}${sessionScope.userName}${applicationScope.userName}搜尋數(shù)組/集合對(duì)象${myList[0]}搜尋map對(duì)象${myMap.key} ${myMap["key-first.last"]} key名是數(shù)字或特殊符(.-),必須用[]搜尋javaBean對(duì)象${user.getName()} 相當(dāng)于 <%=user.getName()%>
3.簡(jiǎn)單運(yùn)算
??? 算數(shù)運(yùn)算
???????
${1+"2"} 非數(shù)字都被轉(zhuǎn)成數(shù)字,不能轉(zhuǎn)就報(bào)錯(cuò),空元素當(dāng)作沒(méi)參與關(guān)系運(yùn)算 > gt < lt >= ge <= le != ne == eq${a>2}邏輯運(yùn)算 && and || or ! not${a>2 && b>2}三元表達(dá)式${name == null ? "張三" : name}域中指定的屬性是否空 empty/not empty${not empty name}
?
3.調(diào)用java方法
EL表達(dá)式可調(diào)用java靜態(tài)方法,步驟如下:
1)編寫(xiě)一個(gè)包含靜態(tài)方法的類 ?
2)編寫(xiě)一個(gè)tld文件,配置靜態(tài)方法
?
<?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> <uri>http://www.lioil.win/method</uri><short-name>my</short-name><function><name>elMethod</name><function-class>win.lioil.Method</function-class><function-signature>java.lang.String method(java.lang.String)</function-signature></function> </taglib>
3)在jsp中引入tld文件: <%@ taglib uri="http://www.lioil.win/method" prefix="my"%>???? ?
4)在jsp中調(diào)用java靜態(tài)方法: ${my:elMethod("x")}
* 對(duì)字符串進(jìn)行操作,可以用EL函數(shù)庫(kù)(JSTL標(biāo)簽庫(kù))
?
二.JSP原生標(biāo)簽(很少用)
sun公司推出的原生標(biāo)簽,屬于jsp規(guī)范,不需引入第三方標(biāo)簽庫(kù)<jsp:inclue> 替代request.getRequestDispatcher().include()
<jsp:forward> 替代request.getRequestDispatcher().forward()
<jsp:param> 在url后接請(qǐng)求參數(shù)在域中搜尋名為id的bean,沒(méi)有就在該域中創(chuàng)建
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>將請(qǐng)求參數(shù)存到bean對(duì)象, property指定請(qǐng)求參數(shù)/beanName對(duì)象屬性名,param指定請(qǐng)求參數(shù)
<jsp:setProperty name="bean" property="" param=""/>獲取bean對(duì)象的屬性值到輸出流, property指定屬性名
<jsp:getProperty name="bean" property="" />
?
三.JSTL標(biāo)簽庫(kù)(常用)
全稱Java Standard Tag Library,由JCP(Java Community Process)指定標(biāo)準(zhǔn), 和EL配合取代JSP的Java代碼,以便開(kāi)發(fā)
1.下載JSTL標(biāo)簽庫(kù)(Taglibs)
一般使用JSTL1.1以上版本,現(xiàn)在最新版是JSTL1.2.5
在Apache Tomcat官網(wǎng)下載JSTL標(biāo)簽庫(kù)(Taglibs)
下載地址: http://tomcat.apache.org/download-taglibs.cgi
下載頁(yè)面有4個(gè)jar包:
?
Impl: taglibs-standard-impl-1.2.5.jar JSTL實(shí)現(xiàn)類庫(kù)Spec: taglibs-standard-spec-1.2.5.jar JSTL標(biāo)準(zhǔn)接口EL: taglibs-standard-jstlel-1.2.5.jar JSTL1.0標(biāo)簽-EL相關(guān)Compat: taglibs-standard-compat-1.2.5.jar 兼容版本
從README得知:
???
如果不使用JSTL1.0標(biāo)簽,可以忽略taglibs-standard-jstlel包,README沒(méi)有介紹taglibs-standard-compat包,估計(jì)應(yīng)該是兼容以前版本標(biāo)簽庫(kù),所以一般只需要 taglibs-standard-impl 和 taglibs-standard-spec 兩個(gè)jar包Maven依賴配置如下:<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version></dependency><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version></dependency>
把上述兩個(gè)jar包加到項(xiàng)目,或者復(fù)制到Tomcat/lib(所有項(xiàng)目都可以共用,一勞永逸)
2.核心標(biāo)簽庫(kù)
??? core 核心標(biāo)簽庫(kù)
??? fmt? 國(guó)際化標(biāo)簽
??? sql? 數(shù)據(jù)庫(kù)標(biāo)簽(廢棄)
??? xml? XML標(biāo)簽(廢棄)
在jsp中引入 core fmt 標(biāo)簽庫(kù):
??? <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
??? <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
1.core標(biāo)簽庫(kù)
輸出默認(rèn)轉(zhuǎn)義<c:out value="<h1>header</h1>" default="value"/><c:out value="${name}"/>操作域變量 <c:set var="name" value="value" scope="page"/>Map對(duì)象 <c:set target="${myMap}" property="name1" value="value1" scope="request"/>Bean對(duì)象 <c:set target="${myBean}" property="name2" value="value2" scope="request"/>刪除屬性 <c:remove var="name" scope="request"/>捕獲異常 <c:catch var="e"><%= 1/0 %></c:catch> ${e.message }條件判斷<c:if test="${i>1}" var="result" scope="page">大于1</c:if><c:if test="${i<1}" var="result" scope="page">小于1</c:if><c:choose><c:when test="${day == 1}">星期一</c:when><c:when test="${day == 2}">星期二</c:when><c:when test="${day == 3}">星期三</c:when><c:when test="${day == 4}">星期四</c:when><c:when test="${day == 5}">星期五</c:when><c:otherwise>休息日</c:otherwise></c:choose>
循環(huán)
??? 1.遍歷集合List???? ?
???
<table border="1"><tr><th>名稱</th><th>是否是集合中第一個(gè)元素</th><th>是否是集合中最后一個(gè)元素</th><th>顯示當(dāng)前遍歷的索引</th><th>顯示當(dāng)前遍歷的計(jì)數(shù)</th></tr><c:forEach items="${myList}" var="it" varStatus="st" ><tr><td>${pageScope.it}</td><td>${pageScope.st.first}</td><td>${pageScope.st.last}</td><td>${pageScope.st.index}</td><td>${pageScope.st.count}</td></tr> </c:forEach></table>
??? 2.遍歷Map
???
<c:forEach items="${myMap}" var="entry" >${entry.key }:${entry.value }<br></c:forEach>
??? 3.循環(huán)計(jì)數(shù)(for i)
???
<c:forEach begin="1" end="100" step="1" var="num" >${num}</c:forEach>
分隔字符串
???
<c:forTokens items="sdfa,fsad,fds" delims="," var="result">${result}<br></c:forTokens>
在URL后加參數(shù)
?
<c:param> 嵌套在<c:import>、<c:url>、<c:redirect>,為這些標(biāo)簽所用URL附加參數(shù)實(shí)現(xiàn)include功能<c:import url="/index.jsp" var="p" scope="page"></c:import>輸出: ${p}URL重寫(xiě)<c:url value="/index.jsp" context="${pageContext.request.contextPath}" var="eurl" scope="page"></c:url> <a href="${eurl}">xxx</a>請(qǐng)求重定向<c:redirect url="/index.jsp" context="${pageContext.request.contextPath}"></c:redirect>
?
2.fmt標(biāo)簽庫(kù)
格式化日期 <fmt:formatDatevalue="<%=new Date()%>" pattern="yyyy/MM/dd hh:mm:ss" var="date" scope="request" />${requestScope.date}格式化數(shù)字 <fmt:formatNumber value="3.1415926" pattern="0000.00000000000" var="num1" scope="request" /><fmt:formatNumber value="3.1415926" pattern="####.###########" var="num2" scope="request" />${requestScope.num1}<br>${requestScope.num2}<br>
?
?
總結(jié)
以上是生活随笔為你收集整理的spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。