目標:l 進一步體會JSP應用;l 掌握運算式語言的使用;l 掌握標準標籤庫的使用;l 掌握<jsp:forward>標籤的使用;l 掌握<jsp:include>標籤的使用;l 掌握<%@ include指令的使用。內容:l 通過登入功能進一步體會JSP技術,在開發過程中介紹運算式語言和JSTL的用法;l 在此基礎上對代碼進行修改,體會相關標籤的用法。1、 要完成的功能完成登入功能,首先需要一個用於輸入登入資訊的介面(使用者名稱和口令),然後有處理檔案完成判斷,處理檔案用於判斷登入資訊是否合法。如果成功,使用登入成功的介面進行響應,如果登入失敗,應該專向登入失敗的介面。假設:因為資料庫連接相關內容沒有介紹,不能進行真正的登入驗證,所以假設使用者名稱為zhangsan,口令為lisi的時候登入成功,其它情況登入失敗。2、 首先編寫登入介面 <%@ page contentType="text/html;charset=gb2312"%>請登入<br><form name="form1" method="post" action="login_process.jsp"> 使用者ID:<input type="text" name="userid"><br> 口令:<input type="password" name="userpass"><br> <input type="submit" value="登入"><input type="reset" value="重設"></form>注意:這裡沒有進行用戶端驗證,主要強調其它內容,在實際處理中,只要涉及輸入資訊就應該進行驗證。 使用者輸入資訊之後,需要對使用者輸入的資訊進行驗證,判斷使用者輸入資訊是否正確,這裡不用嵌入Java代碼的方式,使用JSTL中的標籤完成判斷,下面介紹如何判斷。3、 如何判斷?在JSTL的核心標記庫(core)有一個if標記用於完成判斷。使用方法如下:1)需要把兩個壓縮包jstl.jar和standard.jar放到WEB-INF/lib下面;2)聲明核心標記庫<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>3)使用if標記基本文法格式:<c:if test=”” [var=”” scope=””]> 滿足條件的時候要執行的代碼</c:if>test屬性是必須的,是if的判斷條件,var屬性和scope屬性是可選的,如果希望把判斷的結果儲存起來,可以使用var屬性和scope屬性,var屬性指出儲存的變數的名字,scope指出變數的作用範圍。test的內容應該是結果為true或者false的運算式語言的值。要使用運算式語言,下面介紹運算式語言的基本用法。4、 運算式語言(EL)的使用基本格式:開始標記“${” 結束標記“}”中間的內容可以是某個對象,某個對象的屬性,若干對象的運算結果。例(訪問請求參數中的值):如果要操作使用者輸入的userid,可以使用 ${param.userid} 相當於下面的代碼:<% String userid = request.getParameter(“userid”); out.println(userid);%>例(訪問某個對象的屬性):如果要操作某個對象的屬性,假設在request中存在對象user(類型為User),user有屬性userid,要直接顯示這個userid,如何顯示,採用EL,可以寫成${user.userid},相當於下面的代碼:<%User user = request.getAttribute(“user”);String userid = user.getUserid();out.println(userid);%>注意:對屬性的訪問方式也可以使用中括弧,例如可以使用下面的代碼訪問userid:${user[“userid”]}兩種情況下只能使用中括弧的方式:l 如果屬性中包含了特殊符號,例如“.”;l 如果要訪問的屬性是一個變數。例(在運算式語言中進行運算):如果要進行運算:${3+5}下面介紹在EL中可以使用那些運算。5、 EL中可以進行哪些運算?常用的運算如下:1)數學運算+-*/ %2)關係運算> >= == <= < != 3) 邏輯運算&& || !6、 如何編寫這個處理常式login_process.jsp登入成功或者失敗的時候直接提示。<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:if test="${param.userid==/"zhangsan/" && param.userpass==/"lisi/"}"> 登入成功!</c:if><c:if test="${param.userid!=/"zhangsan/" || param.userpass!=/"lisi/"}"> 登入失敗!</c:if> 當登入失敗或者成功的時候,會顯示不同的提示。但是正常情況下在需要採用專門的頁面進行響應,下面介紹用法。7、 在伺服器端,如何?頁面之間的跳轉?在JSP中提供了一個標籤<jsp:forward>,該標籤可以完成跳轉。文法格式:<jsp:forward page=”目標檔案”/> page屬性指出要跳轉到哪個檔案。作用:當檔案執行到這個標籤的時候,會轉向執行目標檔案,這個標籤之後的內容不再執行。例:有兩個檔案a.jsp和b.jsp,a.jsp檔案內容如下aaaa<jsp:forward page=”b.jsp”/>AAAAAb.jsp檔案的內容是BBBBBB如果現在訪問a.jsp,會得到結果:BBBBBBB注意:在<jsp:forward>標籤之前的內容雖然執行了,但是沒有顯示,之後的內容沒有執行。地址欄中顯示是第一個檔案的名字,顯示的內容是第二個檔案的。8、 修改登入處理檔案<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:if test="${param.userid==/"zhangsan/" && param.userpass==/"lisi/"}"> <jsp:forward page="success.jsp"/></c:if><c:if test="${param.userid!=/"zhangsan/" || param.userpass!=/"lisi/"}"> <jsp:forward page="failure.jsp"/></c:if>另外需要編寫success.jsp和failure.jsp9、 success.jsp的內容<%@ page contentType="text/html;charset=gb2312"%>登入成功的介面!10、 failure.jsp的內容<%@ page contentType="text/html;charset=gb2312"%>登入失敗的介面!需要注意標籤的結束符。標籤都有開始標誌和結束標誌,例如<c:if test=”true”> 內容</c:if> 也可以寫成:<c:if test=”true”/> 第二種方式中標籤體為空白。Html代碼格式要求不嚴格,可以沒有結束符,例如:<input type=”text” name=”userid”>11、 <jsp:include>標籤把上面的login_process.jsp檔案中的<jsp:forward修改為<jsp:include查看效果。文法格式:與<jsp:forward>相似.作用:包含。在程式運行到這個標籤的時候,轉向執行目標檔案,目標檔案執行完之後繼續執列標籤之後的內容。與方法調用非常像。與<jsp:forward>的區別:對於標籤之前的內容,jsp:forward之前的內容執行,但不顯示,jsp:include執行也顯示。對於標籤之後的內容,jsp:forward不執行了,jsp:include執行並且要顯示。12、 include指令文法格式與page指令相同:<%@ include file=”目標檔案”%>作用:包含目標檔案。具體為:運行之前,把目標檔案的內容拷貝到include指令所在的位置,形成一個檔案,然後運行。與<jsp:include>的區別:<jsp:include>所在的檔案和要轉向的檔案分別執行,<%@ include指令是在轉換的時候,把目標檔案的內容拷貝到當前檔案,啟動並執行時候只有一個檔案。用途:把各個頁面的共用部分單獨做成檔案,例如網站的logo,和著作權連絡方式等資訊。在需要的時候使用<%@ include>指令進行包含。例:需要在每個網頁中顯示著作權資訊。這時候需要把著作權資訊單獨寫在一個檔案中,下面是著作權資訊檔contact.jsp的內容:<%@ page contentType="text/html;charset=gb2312"%>光大電腦培訓學校著作權電話:888888在login.jsp中包含該著作權資訊之後的代碼如下:<%@ page contentType="text/html;charset=gb2312"%>請登入<br><form name="form1" method="post" action="login_process.jsp"> 使用者ID:<input type="text" name="userid"><br> 口令:<input type="password" name="userpass"><br> <input type="submit" value="登入"><input type="reset" value="重設"></form><%@ include file="contact.jsp"%> 如果出現錯誤:
org.apache.jasper.JasperException: /login.jsp(8,0) Invalid byte 1 of 1-byte UTF-8 sequence.
需要設定編碼方式,在分頁檔的上面添加語句:<%@ page contentType="text/html;charset=gb2312"%>參考教材:《Java Web程式設計基礎教程》