n EL:表達(dá)式語言,在支持servlet2.4/JSP2.0或以上版本的容器中有效。
n 語法: ${ expression }
n 例如:
n ${ sessionScope.user.name}
n User user=(User)session.getAttribute(“user”);
n String name=user.getName();
n EL:表達(dá)式語言,在支持servlet2.4/JSP2.0或以上版本的容器中有效。
n 語法: ${ expression }
n 例如:
n ${ sessionScope.user.name}
n User user=(User)session.getAttribute(“user”);
n String name=user.getName();
n EL存取變量數(shù)據(jù)的方法
n ${ 變量 }
n 存取某一范圍的變量值,沒有制定范圍默認(rèn)為page假如找不到依次為request,session,application;
n 假如全部范圍都找不到,就返回null
n ${username} 或 ${requestScope.username}
n EL中的四大隱含對象
n PageScope
n RequestScope
n SessionScope
n ApplicationScope
n pageContext
n 表示此JSP的PageContext
n pageScope
n 取得page范圍的屬性名稱所對應(yīng)的值
n requestScope
n 取得request范圍的屬性名稱所對應(yīng)的值
n sessionScope
n 取得session范圍的屬性名稱所對應(yīng)的值
n applicationScope
n 取得application范圍的屬性名稱所對應(yīng)的值
n param
n 如同request.getParameter(String name),返回String值
n paramValues
n 如同reqeust.getParameterValues(String name);返回String[]值
JSTL --java標(biāo)準(zhǔn)標(biāo)簽函數(shù)庫:
n JSTL是一個(gè)標(biāo)準(zhǔn)的已經(jīng)制定好的標(biāo)簽庫,可以用到各種領(lǐng)域,如:基本輸入輸出、流程控制、循環(huán)、XML文件解析、數(shù)據(jù)庫查詢及國際化應(yīng)用等。
n JSTL中提供的標(biāo)簽主要分為5類
n 核心標(biāo)簽庫
n I18N標(biāo)簽庫
n SQL標(biāo)簽庫
n XML標(biāo)簽庫
n 函數(shù)標(biāo)簽庫
JSTL
前置名稱
URI
范例
核心標(biāo)簽庫
c
http://java.sun.com/jsp/jstl/core<c:out>
I18N格式標(biāo)簽庫
fmt
http://java.sun.com/jsp/jstl/fmt<fmt:formatDate>
SQL標(biāo)簽庫
sql
http://java.sun.com/jsp/jstl/sql<sql:query>
XML標(biāo)簽庫
xml
http://java.sun.com/jsp/jstl/xml<xml:forBach>
函數(shù)標(biāo)簽庫
fn
http://java.sun.com/jsp/jstl/functions<fn:split>
n 使用比較
n Jsp : <%= userList.getUser().getPhoneNumber()%>
n Jstl :
<c:out value=“<%= userList.getUser().getPhoneNumber()%>”/>
n Jstl + el :
<c:out value=“${userList.user.phoneName}”/>
JSTL 的使用
n JSTL必須在支持Servlet2.4且Jsp2.0以上版本的容器上才行。
n JSTL是由Apache組織的JakartaProject所實(shí)現(xiàn),所以可以到Apache網(wǎng)站去下載,一般是.zip格式的。
n jakarta-taglibs-standard-1.1.2.zip
JSTL –安裝
n 從
www.apache.org下載
jakarta-taglibs-standard-current.zip 包
n 將akarta-taglibs-standard-1.1.2/lib中的jstl.jar, standard.jar文件拷貝到WEB-INF/lib目錄。
n 解壓縮下載的文件,將jakarta-taglibs-standard-1.1.2/tld目錄全部拷貝到WEB-INF/目錄下。
n 核心標(biāo)簽庫:基本輸入輸出、流程控制、迭代操作和URL操作。
n 聲明:
<%@taglib prefix=“c” uri=“
http://java.sun.com/jsp/jstl/core”%>
n 分為四大類:
n 表達(dá)式操作:out, set, remove,catch;
n 流程控制:if,choose,when, otherwise;
n 迭代操作:forEach,forTokens;
n URL操作:import,url,redirect,param;
<c:set>與<c:out>:
n <c:set>主要用來將變量存儲(chǔ)至jsp范圍中或是javabean的屬性中。
n <c:set var=“” value=“” scope=“” />
n 將value中的值存儲(chǔ)至scope指定的var變量名中
n <c:set var=“” scope=“” />
n 內(nèi)容體
n </c:set>
n 將內(nèi)容體中的信息存儲(chǔ)至scope指定的var變量名中
n <c:set value=“” target=“bean”
property=“propertyName”/>
n 將value中的值存儲(chǔ)到target指定的bean中的property屬性中
n <c:set var=“number” value=“${1+8}” scope=“session”/>
n <c:set var=“number” scope=“session”>
n ${2+3}
n </c:set>
n <c:set target=“User” property=“name” value=“Tom”/>
n <c:set target=“User” property=“name” value=“${param.name}”/>
n 切記:
n var 和 scope這兩個(gè)屬性的值不能使用表達(dá)式來表示
n var=“${name}” scope=“${ourScpe}”
n <c:out>主要是用來顯示數(shù)據(jù)的內(nèi)容,和<%= %>是一樣的效果。
n <c:out value=“” [defalut=“”] [escapeXml=“true”]/>
n value:表示需要顯示出來的值
n default:假如value中的值為null,則顯示defalut的值
n escapeXml:是否轉(zhuǎn)換非凡字符,如:<轉(zhuǎn)換成<
n value屬性是必須的
n default和escapeXml是可選屬性
n <c:out value=“hello,JSTL!”/>
n <c:out value=“${3+5}”/>
n <c:out value=“${param.number}” [default=“2006” ]/>
n <c:out value=“<p>有非凡字符</p>” />
n <p>有非凡字符</p>
n <c:out value=“<p>有非凡字符</p>” escapeXml=“false”/>
n 有非凡字符
<c:remove>:
n <c:remove>主要用來移出變量
n <c:remove var=“varName” [scope=“{p/r/s/a}”]/>
n Scope 的默認(rèn)值為page.
n 假如沒有設(shè)定scope值,則從page/request/
session/application范圍依次查找,找到就刪除,假如找不到就不做任何事情。
n <c:remove var=“number” scope=“session”/>
流程控制標(biāo)簽
n <c:if>
n <c:chose>
n <c:when>
n <c:otherwise>
n <c:if>的用途和我們一般在程序中用的if一樣
n <c:if test=“testCondition” [var=“” scope=“”]/>
n <c:if test=“${sessionScope.username==“admin”}”>
n Admin你好!
n </c:if>
n <c:choose>表示選擇,但要作為<c:when>與<c:otherwise>的父標(biāo)簽來使用。
n <c:choose>
n 內(nèi)容
n </c:choose>
n 可選內(nèi)容:
n 空白
n 1或多個(gè)<c:when>
n 0或多個(gè)<c:otherwise>
n <c:when> 的用途和我們一般在程序中的when一樣
n <c:when test=“testCondition”>
n 內(nèi)容
n </c:when>
n <c:otherwise>表示所有條件都不成立時(shí)執(zhí)行
n < c:otherwise>
n 內(nèi)容
n </ c:otherwise >
n 假如和<c:choose>一起用必須放在<c:choose>與</c:choose>中間,且必須放在<c:otherwise>前使用。
n 選擇條件:
n <c:choose>
n <c:when test=“${condition }”>
n ….
n </c:when>
n <c:when test=“${condition }”>
n ….
n </c:when>
n <c:otherwise>
n ….
n </c:otherwise>
n </c:choose>
<c:forEach>:
n <c:forEach>
n 為循環(huán)控制,它可以將集合(Collection)中的成員循序?yàn)g覽一遍
n 當(dāng)條件符合時(shí),就會(huì)持續(xù)反復(fù)執(zhí)行< c:forEach>的本體內(nèi)容
n 迭代循環(huán):
n <c:forEach items=“” var=“ ” begin=“”
n end=“” step=“”>
n ……
n </c:forEach>
n 參數(shù)說明:
n items:被迭代的集合對象
n var:用來存放現(xiàn)在指到的成員,String
n begin:開始位置,int
n end:結(jié)束位置,int, end 值必須大于begin
n step:每次迭代的間隔數(shù),int,必須大于0
總結(jié):要使用JSTL標(biāo)簽的話首先要導(dǎo)入JSTL.JAR的價(jià)包,在我們自己的項(xiàng)目中利用工具可以添加上去了;使用<c></c>標(biāo)簽的話,假如沒有c.tld文件,我們就需要找到相應(yīng)的.c.tld文件COPY到WEB-INF/lib/和web.xml文件等級(jí)的目錄下了;如c.tld 文件的內(nèi)容如下:
<taglib 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"
version="2.0">
<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
<validator>
<description>
Provides core validation features for JSTL tags.
</description>
<validator-class>
org.apache.taglibs.standard.tlv.JstlCoreTLV
</validator-class>
</validator>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上面是省略掉的板塊[不省略的話大概有幾千行的代碼吧。。。。。。]
</taglib>
其實(shí)別害怕,我們用的時(shí)候指要知道一個(gè)uri屬性就可以了…………………………………………………………..如上面的:
<uri>http://java.sun.com/jsp/jstl/core</uri>
因?yàn)槲覀冊?lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>頁面中的這個(gè)屬性上面就要用到:uri這個(gè)屬性 prefix=”c”是指標(biāo)簽的前綴是C
OK,我們就可以在頁面中使用JSTL標(biāo)簽了,現(xiàn)在我們只說<C></C>標(biāo)簽
下面了帶點(diǎn)實(shí)質(zhì)的:
參考一下了:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<jsp:directive.page import="Bean.Message"/>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'showmessage.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script type="text/javascript">
function change()
{
document.myform.submit();
//document.myform.nowpage.value=a;
}
</script>
<%
//ArrayList<Message> list=(ArrayList)request.getAttribute("list");
%>
<body bgcolor="#8080c0">
<form name="myform" action="ShowMessageListServlet" method="post" >
<table align="center" bgcolor="#8080c0" border="1">
<tr>
<td><font color="blue" size=5>學(xué)員編號(hào)</font></td>
<td><font color="blue" size=5>學(xué)員姓名</font></td>
<td><font color="blue" size=5>留言標(biāo)題</font></td>
<td><font color="blue" size=5>留言內(nèi)容</font></td>
<td><font color="blue" size=5>留言時(shí)間</font></td>
</tr>
<c:forEach items="${requestScope.list}" var="list">
<tr>
<td><c:out value="${list.id}"/></td>
<td><c:out value="${list.username}"/></td>
<td><c:out value="${list.title}"/></td>
<td><c:out value="${list.message}"/></td>
<td><c:out value="${list.sendDate}"/></td>
</tr>
</c:forEach>
<tr>
<td>總共${requestScope.messagecount}條留言</td>
<td>當(dāng)前第${requestScope.nowpage}頁<a href="ShowMessageListServlet?nowpage=1 }">首頁</a>/<a href="ShowMessageListServlet?nowpage=${requestScope.pagecount}">尾頁</a></td>
<c:if test="${requestScope.nowpage>1}">
<td><a href="ShowMessageListServlet?nowpage=<%=Integer.parseInt(request.getAttribute("nowpage").toString())-1%>">上一頁</a></td>
</c:if>
<c:if test="${requestScope.nowpage==1}">
<td><a><font color="blue">已是首頁</font></a></td>
</c:if>
<c:if test="${requestScope.nowpage<requestScope.pagecount}">
<td><a href="ShowMessageListServlet?nowpage=<%=Integer.parseInt(request.getAttribute("nowpage").toString())+1 %>">下一頁</a></td>
</c:if>
<c:if test="${requestScope.nowpage==requestScope.pagecount}">
<td><a><font color="blue">已是尾頁</font></a></td>
</c:if>
<td>跳轉(zhuǎn)到第
<select name="nowpage" onChange="change()">
<c:forEach begin="1" end="${requestScope.pagecount}" var="i">
<c:choose>
<c:when test="${requestScope.nowpage==i}">
<option value="${i}" selected>${i}</option>
</c:when>
<c:when test="${requestScope.nowpage!=i}">
<option value="${i}">${i}</option>
</c:when>
</c:choose>
</c:forEach>
</select>頁</td>
</tr>
</table>
</form>
</body>
</html>
上面的是一個(gè)分頁顯示留言的主頁面,大家有愛好的可以研讀一下,基本上用到了<C></C>的很多的標(biāo)簽了……可以說是一個(gè)很經(jīng)典的例子了,但還是EL表達(dá)式和JSTL的綜合版了,上面也用到了EL表達(dá)式的一些知識(shí);
總結(jié):EL表達(dá)式是取值或得到值的表達(dá)式.......對于數(shù)據(jù)的操作可以采用EL表達(dá)式,而JSTL中的一些標(biāo)簽更多的是對頁面流程的控制......所以二者結(jié)合起來就實(shí)現(xiàn)了取值和顯示值的效果,以實(shí)現(xiàn)了Servlet和JSP頁面顯示的綜合運(yùn)用………..最終實(shí)現(xiàn)網(wǎng)站的控制和現(xiàn)實(shí)流程;
好了,到今天為止,JSP課程的一小部分已講完了....更多的問題和技術(shù)上的交流,請?jiān)诒救说腝Q:458563488或者269957018留言就可以了….謝謝各位耐心的訪問和閱讀我博客上面的文章..希望和以技術(shù)交流為目的而來的訪客成為筆友…共同努力,一起進(jìn)步;