jsp中的路徑、EL表示式、JSTL標籤庫
7.jsp頁面中的路徑 一般情況下,jsp中路徑問題是和我們之前在servlet中討論的html裡面的路徑問題是一樣的,但是在jsp中有一種情況是要特殊對待的。 如果在jsp頁面的上面寫了這樣一個指令碼: <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> 並且再<head>標籤中加入了一個子標籤: <base href="<%=basePath%>" />
如果在jsp頁面裡面有上面說提到的倆個東西,那麼在這個jsp頁面中,我們再去寫上一個相對路徑(最左邊沒有加/的那種路徑),它就不是相對於位址列中的當前路徑了,而是要相對於這個basePath變數所代表的這個路徑.
<base href="..">這個標籤的作用: 在沒有這個標籤的情況下,頁面中相對路徑的跳轉,都要參照位址列中的當前路徑來跳轉,但是頁面中加上了這個<base>標籤後,頁面中的相對路徑的跳轉都要參照這個標籤中所寫的路徑來跳轉。 注意:這裡說的相對路徑的跳轉指的是最左邊沒有/的那種路徑的跳轉.
8.EL表示式 形式:${ } 作用:從一個範圍裡面取值或者從一個物件中取值或是向頁面輸出值. 1.接收客戶端引數. ${param.name1 } 2.指定範圍並取值 ${pageScope.name2 } ${requestScope.name3 } ${sessionScope.name4 } ${applicationScope.name5 } 3.可以不指定範圍再去取值 ${name} 這時候會按照pageContext request session application這樣一個順序依次的去找有沒有一個叫name的值存在,一旦找到了就輸出出來,最終沒有找到那麼就什麼都不輸出。 4.取出一個物件中的屬性值. ${requestScope.student.id} ${requestScope.student.name} ${requestScope.student.age} 或者 ${student.id} ${student.name} ${student.age} 或者 ${student["id"]} ${student["name"]} ${student["age"]}
注意:比如 ${student.id}表示是要呼叫student物件中的getId方法,至於物件中有沒有id屬性對這個操作沒有任何影響.
如果Student類中一個方法是getAddress,返回一個Address類的物件,Address類中有一個方法getCity,這個時候我們就可以這樣寫去拿到city屬性的值. ${student.address.city}
5.輸出字串 ${"hello"}
6.輸出運算結果或者boolean表示式 ${1+1 } ${(1+2)*3-4+5*3 } ${1<3 } //為空的話返回true ${empty "" } ${empty "hello" } //取否 不為空的話返回true ${not empty "hello" } ${! empty "hello" } ${param.score >50 } ${param.score >60?"good":"bad" } 7.輸出陣列、集合中的元素 <% String[] str = {"hello","world"}; List<String> list = new ArrayList<String>(); list.add("zhangsan"); list.add("lisi"); Map<String,Integer> map = new HashMap<String,Integer>(); map.put("a",100); map.put("b",200); map.put("c",300); request.setAttribute("str",str); request.setAttribute("list",list); request.setAttribute("map",map); %> ${str[0] }<br> ${list[1] }<br> ${map["c"] }<br>
9.JSTL標籤庫 JSP Standard Tag Library(JSTL) 1.讓web專案支援JSTL標籤庫 在myeclipse中,建一個web專案的時候,在對話方塊下面會有提示在當前專案是否需要加入JSTL標籤庫的支援.(J2EE5.0是預設會加入對JSTL的支援的) 在eclipse中,建一個文字專案,預設都是不支援JSTL,所以需要我們自己把JSTL的jar包匯入到專案中(複製貼上到專案中的lib目錄):jstl.jar standard.jar
2.把JSTL標籤庫匯入到某一個jsp頁面中 使用jsp中的taglib指令: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> prefix="c"相當於給這個標籤庫起一個別名,將來在頁面中就是用以c開頭的標籤來使用標籤庫中的標籤。這個別名也可以叫其他的名字。 <c:forEach>標籤: 遍歷List集合: students是放進request物件中的一個List集合,集合中存放的是Student型別的物件. items=""屬性值是要遍歷的集合 var="" 屬性值是每次遍歷到的物件用什麼名字的變數去接收。 <c:forEach items="${students}" var="stu"> <tr> <td>${stu.id }</td> <td>${stu.name }</td> <td>${stu.age }</td> </tr> </c:forEach> 遍歷Map集合: map是一個Map型別的集合,放到了request物件中,entry是我們頂一個的一個變數,用做接收每次遍歷到的集合中的一組鍵值對,我們可以通過entry.key entry.value分別拿到這次遍歷到的key值和value值 <c:forEach items="${map}" var="entry"> ${entry.key }-->${entry.value.id } ${entry.value.name } ${entry.value.age }<br> </c:forEach>
<c:out>標籤: 向頁面輸出內容 <c:out value="hello"></c:out> <c:out value="${5+5}"></c:out> //students是放在request中的List集合,集合裡面是Student物件 <c:out value="${students[2].id}"></c:out> <c:set>標籤: 向某一個範圍物件中存放一個值。 <c:set var="name" value="zhangsan" scope="request"></c:set>
<c:remove>標籤: 從某個範圍物件中把某個值給移除掉. <c:remove var="name" scope="request"/>
<c:if>標籤: 條件判斷 <% request.setAttribute("score",40); %> <c:if test="${score>85 }"> <font color="red">你的分數超過了85分</font> </c:if> <c:if test="${score>95 }"> <font color="red">你的分數超過了95分</font> </c:if>
這樣寫相當於: if(score>85){ ... } if(score>95){ ... }
<c:choose>標籤 <c:when>標籤 <c:otherwise>標籤 例如: <c:choose> <c:when test="${score>=90 }">優</c:when> <c:when test="${score>=80 }">良</c:when> <c:when test="${score>=70 }">中</c:when> <c:when test="${score>=60 }">及格</c:when> <c:otherwise>差</c:otherwise> </c:choose> 相當於: if(score>=90){ }else if(score>=80){ }else if(score>=70){ }eles if(score>=60){ }else{ }