JSP主要用于動態WEB開發,打開一個JSP頁面,會發現主要是由HTML和JAVA代碼構成,在學校剛開始接觸到JSP時,就是采用HTML中嵌入JAVA代碼的寫法(<% 若干java語句 %>),但是這樣存在一個問題就是:整個JSP看起來很亂,尤其是JAVA代碼中包含循環和判斷時。因此,便有了后來的EL表達式和JSTL標簽,用來替換掉JSP中的JAVA代碼,使整個JSP看起來整潔。
EL表達式:###
1.輸出內容
使用 ${輸出內容}這種形式來代替<%=JAVA代碼%>進行輸出
- ${name},name為域中定義的變量,能獲取到值則輸出獲取的值,否則不輸出
- ${map["name"]},獲取map中的值,也可以使用${map.name}
- ${object.getName()},object為類對象,調用getName()方法獲取值
2.執行運算 - 普通計算。${1+2},會輸出3
- 類型轉換。${"1"+2},會將2轉化為字符2進行拼接,輸出12
- 比較運算。${2>1},會輸出true
- 空值判斷。${empty(name)},會判斷name是否為空,輸出true或者false,也可以判斷對象是否為空、域中是否有屬性
- 三元表達式。${2>1?"是" : "否"},會輸出是
JSTL標簽:###
!!使用myeclipse開發的話,里面會自帶有jstl標簽庫,所以不需要導入包
!!使用eclipse開發,需要以下步驟:
- 導入jstl.jar和standard.jar兩個jar包
- 在WEB-INF目錄下導入c.tld文件
- 在web.xml中進行配置
<pre><jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
</pre>最后在jsp中引用
<pre><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%></pre>
列舉幾個常用標簽:
1. c:out 中的特殊字符會原樣輸出
<pre><c:out value="<a href='www.baidu.com'>xxx</a>" escapeXml="false"></c:out></pre>注:escapeXml控制是否轉義,默認為true,即不轉義,是什么就輸出什么(value中的值)。例子中設置escapeXml為false,則會進
行轉義輸出,即輸出xxx
**2. ** c:set 可以更改域中的值
<pre><c:set var="name" value="hahaha"></c:set></pre>注:更改域中名為name的值,若不存在,則添加name
3. c:if做判斷
<pre><c:if test="${2>1}">
2是大于1
</c:if></pre>注:test接收一個bool型的數,如果為true就執行c:if里面的代碼,否則沒變化
4. c:forEach可以遍歷
<pre><c:forEach begin="1" end="10" step="2" var="i">
${i}
</c:forEach></pre>上述代碼相當于
<pre>for(int i = 1; i <= 10; i+=2){
System.out.print(i);
}</pre>可以在forEach中添加if判斷,如下
<pre><c:forEach begin="1" end="10" step="1" var="i" varStatus="stat">
<c:if test="${stat.index % 2 == 0 }">
<font color="red">
${i }
</font>
</c:if>
<c:if test="${stat.index % 2 != 0 }">
${i }
</c:if>
</c:forEach></pre>輸出1~10,如果是偶數,設為紅色,否則,正常輸出
該標簽中有個varStatus,它有幾個屬性
index —— 當前數
count —— 目前的總數
first —— 現在指到的成員是否是第一個成員,返回類型為boolean
last —— 現在指到的成員是都是最后一個成員,返回類型為boolean
5. c:forTokens可以分割字符串
<pre><c:forTokens items="www.baidu.com" delims="." var="i">
${i}
</c:forTokens></pre>注:items表示需要切割的字符串,delims表示以什么為準進行切割,例子中是以點,var用于記錄切割的字符片段
6. c:import可以包含頁面
<pre><c:import url="/index.jsp">
</c:import></pre>上面這種方式是直接把頁面包含進來
<pre><c:import url="/index.jsp" var="p" scope="page">
</c:import>
xxx
${p}
yyy</pre>上面這種方式則是把頁面以page類型存入p中,然后在需要的位置輸出p即可
7. c:url可以保存url
<pre><c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="u" scope="page">
</c:url>
<a href="${u}">www.abc.com</a></pre>把url保存在u中,在需要的位置直接使用
8. c:redirect頁面重定向
<pre><c:redirect url="/index.jsp" context="${pageContext.request.contextPath}">
<c:param name="name" value="huang">
</c:param>
</c:redirect></pre>c:param標簽是用于保存放在url中的數據