1.jsp標簽和el表達式
(1)什么是jsp標簽?
jsp標簽用來替換jsp文件中的java代碼,容器遇到jsp標簽之后,會依據標簽找到標簽類然后執行。
注: 因為直接在jsp當中寫java代碼,不利于jsp文件的維護(比如,將包含有java代碼的jsp交給美工去修改就很不方便),所以,
sun才制訂了jsp標簽技術規范。
使用jsp標簽技術,有兩大優點:
a.jsp文件維護方便。
b.方便代碼的復用。
(2)什么是el表達式?
是一套簡單的運算規則,用于給jsp標簽的屬性賦值,也可以直接輸出。
(3)el表達式的使用
1)訪問bean的屬性 (a1.jsp)
a.方式一
${user.name} 依次從pageContext,request,session,application中查找綁訂名稱為"user"的對象,找到該對象之后,
會調用該對象的"getName"方法,最后輸出該方法的運行結果。
注:
a1. el表達式會將null轉換成 ""輸出。
a2. 如果依據綁訂名找不到該對象,會輸出""。
a3.可以使用pageScope,requestScope,sessionScope,applicationScope來指定查找范圍。
b.方式二
${user["name"]}
注:
b1. []里面可以使用綁訂名。
b2. []里面可以使用從0開始的下標,用來訪問數組中的某個元素。
2)做一些簡單的運算,運算結果可以用來給jsp的標簽屬性賦值,也可以直接輸出。(a2.jsp)
a.算術運算+,-,*,/,%
注: + 只能求和,不能夠連接字符串。
b.關系運算 >,>=,<,<=,==,!=
c.邏輯運算&&,||,!
d.empty運算
empty用來判斷集合是否為空,或者是否是一個空字符串。
3)讀取請求參數值 (a3.jsp)
${param.username}等價于request.getParameter("username");
${paramValues.city}等價于request.getParameterValues("city");
(4)jstl標簽的使用
1)jstl是什么? (java standard tag lib)
apache公司開發的一套jsp標簽,后來捐獻給了sun,sun將其命名為jstl。
2)如何使用?
step1,將jstl相關的jar文件拷貝到WEB-INF/lib下。
注:如果使用的是javaee5.0或者以上版本,一般不用拷貝了。有些tomcat的版本不帶有這個jstl的jar文件,需要拷貝。
step2,使用taglib指令引入要使用的標簽。
<%@taglib uri="http://java.sun.com/jsp/jstl/core" PRefix="c"%>
uri:指定命名空間(namespace)。
prefix:命名空間的前綴。
注:uri在jstl-1.2.jar包下的META-INF下的c.tld中
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
3)jstl中的幾個核心標簽
a.if標簽 (c1.jsp)
<c:if test="" var="" scope="">標簽體</c:if>
當test屬性值為true,會執行標簽體。
test屬性可以使用el表達式來賦值。
var屬性:指定綁訂名。
scope屬性:指定綁訂范圍,可以是"page","request","session","application"。
性別:<c:if test="${user.gender=='m'}">男</c:if><br/>
<c:if test="${user.gender=='f'}">女</c:if><br/>
性別:<c:if test="${user.gender=='m'}">男</c:if><br/>
<c:if test="${user.gender!='m'}">女</c:if><br/>
性別:<c:if test="${user.gender=='m'}" var="flag" scope="page">男</c:if><br/>
<c:if test="${!flag}">女</c:if><br/>
b.choose標簽 (c2.jsp)(相當于java中的if…else if…)
<c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
when可以出現1次或者多次,當test屬性值為true時,執行標簽體的內容。otherwise可以出現0次或者1次。
<c:choose>
<c:when test="${user.gender=='m'}">男</c:when>
<c:when test="${user.gender=='f'}">女</c:when>
<c:otherwise>保密</c:otherwise>
</c:choose>
c.forEach標簽 (c3.jsp)
用來遍歷集合或者數組
<c:forEach items="" var="" varStatus=""></c:forEach>
items屬性: 指定要遍歷的集合或者數組,可以使用el表達式。
var屬性:指定綁訂名,綁訂范圍是pageContext(每一次從集合或者數組中取一個元素綁訂到pageContext上)。
varStatus屬性:指定綁訂名,綁訂值是一個封裝了當前遍歷狀態的一個對象(該對象提供了一些方法來獲得當前遍歷的狀態)。
getIndex(): 獲得當前正在被遍歷的元素的下標(從0開始)。
getCount(): 獲得當前是第幾次遍歷。
<c:forEach items="${users}" var="user" varStatus="s">
<tr class="row${s.index%2+1 }">
<td>${user.name }</td>
<td>${user.age }</td>
<td>${user.gender }</td>
<td>${s.index }</td>
<td>${s.count }</td>
</tr>
</c:forEach>
(5)自定義標簽(簡單標簽技術) (web10-2)
step1,寫一個java類,繼承SimpleTagSupport類。 (HelloTag.java)
step2,override doTag方法,在方法里,編寫相應的處理邏輯。
step3,描述標簽(.tld文件)(mytag.tld)
<body-content>有三個值
<body-content>empty</body-content>
empty:該標簽沒有標簽體。
scriptless:該標簽可以有標簽體,但是標簽體的內容不能夠包含有java代碼<% %>,<%= %>,<%! %>。
JSP:該標簽可以有標簽體,并且標簽體的內容可以含有java代碼。但是。只有復雜標簽技術支持該值。簡單標簽技術不支持JSP。
新聞熱點
疑難解答