官术网_书友最值得收藏!

第4章 JSP基礎與內置對象

4.1 JSP的基本應用

JSP是Java Server Page的縮寫,它是Servlet的擴展,是一種基于文本的程序,在Java Web應用開發時是必不可少的。JSP的特點是HTML代碼與Java程序共同存在,在接收到用戶請求時,服務器會處理Java代碼片段,然后生成處理結果的HTML頁再返回給客戶端,客戶端的瀏覽器將呈現最終頁面效果。

實例095 自定義錯誤頁面

光盤位置:光盤\MR\04\095

初級

實用指數:

實例說明

像Java程序一樣,JSP在運行時也有可能拋出異常,因此為了使界面更加友好,需要自定義錯誤頁面,應用JSP指令,當在JSP中拋出異常時,自動導向錯誤頁面。本實例將介紹如何應用JSP自定義錯誤頁面,實例運行結果如圖4.1所示。

圖4.1 自定義錯誤頁面

關鍵技術

本實例主要使用JSP中的page指令的errorPage屬性自定義錯誤頁面,代碼如下:

        <%@ page errorPage="error.jsp" %>

其中error.jsp是一個專門負責處理異常的網頁。

設計過程

(1)創建error.jsp頁面,在page指令中配置errorPage屬性,errorPage屬性值就是當發生異常時跳轉的頁面,關鍵代碼如下:

        <%@page language="java"import="java.util.*"pageEncoding="UTF-8"% errorPage="error.jsp"%>

(2)在error.jsp中,通過如下語句將該網頁聲明為異常處理網頁。

<% page isErrorPage="true"%>

秘笈心法

也可以應用web.xml文件中的error-page參數定義錯誤頁面,應用該參數配置的錯誤頁面將對所有頁面有效,也就是說,無論是在哪個頁面中出現了異常,都會被導向error-page參數所設置的錯誤頁面,代碼如下:

        <error-page>
              <error-code>404</error-code>
              <location>/error.jsp</location>
         </error-page>

實例096 導入版權信息

光盤位置:光盤\MR\04\096

初級

實用指數:

實例說明

在瀏覽網站時,通常在網頁底端會標明網站的版權所有信息,而且網站中每個網頁都包含相同內容的版權信息。在應用JSP技術開發網站時,也需要為網站添加版權信息。本實例將介紹如何應用JSP指令包含指定的版權信息,運行結果如圖4.2所示。

圖4.2 在網站的底端包含的版權信息

關鍵技術

在JSP中可以應用<jsp:include>標簽包含其他文件的內容,被包含的文件可以是JSP文件或HTML文件,<jsp:include>標簽的語法如下:

        <jsp:include page="被包含組件的絕對URL或相對URL">

設計過程

(1)創建一個包含版權信息的頁面foot.jsp,關鍵代碼如下:

        <body>
          <table border="0"align="center">
              <tr>
                  <td align="center">編程詞典銷售服務熱線:400-675-1000 網址:www.mingrisoft.com</td>
              </tr>
              <tr>
                  <td align="center">Copyright@www.mingrisoft.com All Rights Reserved! </td>
              </tr>
          </table>
        </body>

(2)創建網站的主頁面index.jsp,在該頁中應用<jsp:include>標簽將版權信息頁foot.jsp包含進來,關鍵代碼如下:

        <body>
        <table>
        ……此處省略了其他標簽的代碼
        <tr>
            <td colspan="3">
                  <jsp:include page="foot.jsp"></jsp:include>
            </td>
        </tr>
        </table>
        </body>

秘笈心法

在開發網站時,如果多數網頁都包含相同的內容,可以把這部分內容單獨放到一個文件中,其他的JSP文件通過include標簽即可將這個文件包含進來。這樣做可以提高代碼的可重用性,避免重復代碼,從而提高開發網站的效率。

實例097 應用Java程序片段動態生成表格

光盤位置:光盤\MR\04\097

初級

實用指數:

實例說明

在實際的項目開發過程中,經常需要通過JSP頁面動態顯示數據庫中的數據,如在根據條件進行查詢時,需要將查詢結果顯示在JSP頁面中,此時需要應用表格來顯示查詢結果,由于查詢結果是動態的,數據行數并不固定,因此在顯示查詢結果數據時,要根據數據的行數來確定表格的行數。本實例將介紹如何應用Java程序片段(Scriptlet)動態生成表格,運行結果如圖4.3所示,表格中的后3行是動態生成的。

圖4.3 應用Java程序片段動態生成表格

關鍵技術

在JSP文件中,可以在“<%”和“%>”標記中直接嵌入任何有效的Java程序代碼,這種嵌入的程序片段稱為Scriptlet。應用這個標記,就可以隨時在JSP中嵌入Java程序代碼。因此實現本實例非常簡單,只要在JSP頁面的相應位置應用“<%”和“%>”標記即可動態生成表格。

設計過程

(1)創建index.jsp頁面,首先在“<%”和“%>”中定義一個字符串數組,用于存儲圖書名稱字符串,關鍵代碼如下:

        <%
            String[] bookName = {"JavaWeb典型模塊大全", "JavaWeb開發實戰寶典" , "jsp項目開發全程實錄"};
         %>

(2)在index.jsp頁的表格處,循環步驟(1)中創建的字符串數組,動態生成表格并將數據添加到表格中,關鍵代碼如下:

        <table border="1"align="center">
            <tr>
                <td align="center">編號</td>
                <td align="center">書名</td>
            </tr>
            <%
                for(int i=0; i<bookName.length; i++){
            %>
            <tr>
                <td align="center"><%=i %></td>
                <td align="center"><%=bookName[i]%></td>
            </tr>
            <%} %>
        </table>

秘笈心法

從本實例步驟(2)的代碼中可以看出,插入在JSP頁面中的一個完整的Java程序片段,可以應用<%和%>分成多個部分,在第一處的<%和%>標記中的for循環沒有返回大括號},而是在最后</table>之上添加的,這樣,在for循環中,<tr>和<td>標簽將作為循環體的內容被輸出。這段代碼在編譯后,JSP會生成相應的Servlet文件。

實例098 應用Java程序片段動態生成下拉列表

光盤位置:光盤\MR\04\098

初級

實用指數:

實例說明

在從數據庫中讀取數據時,有時需要將某些數據動態添加到下拉列表中。如在根據條件查詢數據時,需要根據下拉列表的選項值查詢數據庫,那么這個下拉列表的值就必須保證是從數據庫中讀取出來的,也就是說只有下拉列表的選項必須是數據庫中存在的數據才可以進行查詢。所以,有時可能需要通過Java程序片段動態地將數據添加到下拉列表中。運行本實例,如圖4.4所示,下拉列表中的數據是動態添加的。

圖4.4 動態生成下拉列表

關鍵技術

在實現本實例時,并沒有進行讀取數據庫,只是在“<%”和“%>”的標記中創建了一個字符串數組,然后將這個數組數據添加到下拉列表中。

提示:其實這樣和讀取數據庫中的數據再添加到下拉列表中并沒有多大區別,本實例只是為了演示如何將數據添加到下拉列表中,并沒有讀取數據庫。讀者在實現時,可以實現從數據庫中讀取數據并將其添加到下拉列表中。

設計過程

(1)新建index.jsp頁,首先在該頁中創建一個字符串數組,用于保存員工的部門信息,關鍵代碼如下:

        <%
              String[] dept = {"策劃部", "銷售部", "研發部", "人事部", "測試部"};
        %>

(2)在下拉列表處,循環這個數組,將數組中的元素添加到下拉列表中,關鍵代碼如下:

        <table height="150">
              <tr>
                  <td align="center"colspan="4">員工信息查詢</td>
              </tr>
              <tr>
                  <td>員工姓名:<input type="text"name="name"/></td>
                  <td>年齡:<input type="text"name="age"/></td>
                  <td>所在部門:
                      <select>
                            <%
                                for(int i=0; i<dept.length; i++){%>
                                      <option value="<%=dept[i] %>"><%=dept[i] %></option>
                                  <%}
                            %>
                      </select>
                  </td>
                  <td><input type="button"value="查詢"/></td>
              </tr>
              <tr>
                  <td align="center"colspan="4"height="50"></td>
              </tr>
        </table>

秘笈心法

在下拉列表的選項中,應用的是Java表達式標記輸出的數組元素,Java表達式的標記為“<%=”和“%>”,如果在JSP文件的模板文本中使用該標記,那么它能把表達式的值輸出到網頁上。

實例099 同一頁面中的多表單提交

光盤位置:光盤\MR\04\099

初級

實用指數:

實例說明

在編寫程序時,會遇到同一個頁中多個表單提交的情況。處理同一個頁中多個表單的提交主要是為每個表單提供相應的標識,當表單提交后,根據傳遞的標識來判斷提交的表單,并執行相應的處理。運行本實例,在“表單1”文本框中輸入“豆豆上線”,在“表單2”文本框中輸入“無語上線”,在“表單3”文本框中輸入“林夕上線”后,如圖4.5所示;單擊“表單2”后面的“提交”按鈕,即可顯示如圖4.6所示的頁面。

圖4.5 表單提交前的頁面

圖4.6 表單2提交后的頁面

關鍵技術

本實例主要應用參數的傳遞,通過傳遞參數值的不同獲取不同的信息。首先設置3個顯示表單數據的對象(tex1,tex2,tex3),并且設置其初始值為空字符串,其次通過request.getParameter()方法請求對應的表單參數,如果請求的參數不為空字符串,則將參數賦給相應的對象,最后通過表單元素顯示提交后相應的信息。

設計過程

(1)通過JavaScript腳本限定文本字段不允許其為空值,關鍵代碼如下:

        <script language="javascript">
        function Mycheck(){
              if(form1.text1.value==""){
                  alert("請輸入表單的內容!! ! "); form1.text1.focus(); return;
              }
              form1.submit();
        }
        </script>
        <script language="javascript">
        function Mycheck1(){
              if(form1.text1.value==""){
                  alert("請輸入表單的內容!! "); form1.text1.focus(); return; }
              form1.submit();
        }
        </script>
        <script language="javascript">
        function Mycheck2(){
            if(form3.text3.value==""){
                  alert("請輸入表單的內容!! ! "); form3.text3.focus(); return; }
            form3.submit();
        }
        </script>

(2)設置Form表單和文本字段的相關屬性,關鍵代碼如下:

        <form name="form1" method="post" action="?formid=1">
        表單1:
            <input name="text1" type="text" class="text" value="<%=text1%>">
            <input type="button" name="submit1" value="提交" onclick="Mycheck(); ">
        </form>
        <form name="form2" method="post" action="? formid=2">
        表單2:
            <input name="text2" type="text" class="text" value="<%=text2%>">
            <input type="button" name="submit2" value="提交" onclick="Mycheck1(); ">
        </form>
        <form name="form3" method="post" action="? formid=3">
        表單3:
            <input name="text3" type="text" class="text" value="<%=text3%>">
            <input type="button" name="submit3" value="提交" onclick="Mycheck2(); ">
        </form>

(3)表單提交后,根據提交的表單獲取相關信息,關鍵代碼如下:

        <%
        String text1="";
        String text2="";
        String text3="";
        String message="";
        if(request.getParameter("text1")! =null){
              text1=request.getParameter("text1");
              message="提交了第1個表單,提交內容為"+text1+"";
        }
        if(request.getParameter("text2")! =null){
              text2=request.getParameter("text2");
              message="提交了第2個表單,提交內容為"+text2+"";
        }
        if(request.getParameter("text3")! =null){
              text3=request.getParameter("text3");
              message="提交了第3個表單,提交內容為"+text3+"";
        }
        %>

秘笈心法

應用參數傳遞時,如果是提交到本頁,也可以省略文件名直接輸入問號“?”加參數和值進行參數傳遞,如action="?formid=1"。

實例100 在JSP腳本中插入JavaScript代碼

光盤位置:光盤\MR\04\100

初級

實用指數:

實例說明

所謂的JSP腳本,也就是前幾個實例中用到的Java程序片段(Scriptlet)。在實際應用中,有時需要在JSP腳本中插入JavaScript代碼,如在一些網站中添加注冊信息時,注冊成功后可能需要彈出一個“注冊成功”的提示信息窗口,這就需要在JSP腳本中插入JavaScript的alert()方法來實現。運行本實例,如圖4.7所示,輸入用戶注冊信息,單擊“注冊”按鈕后,將彈出注冊成功的提示框。

圖4.7 在JSP腳本中插入JavaScript代碼

關鍵技術

在JSP腳本中插入JavaScript代碼,可以應用JSP中的out隱含對象,通過out對象可以向客戶端瀏覽器輸出信息,并且管理應用服務器上的輸出緩沖區。在使用out對象輸出數據時,可以對數據緩沖區進行操作,及時清除緩沖區中的殘余數據,為其他的輸出讓出緩沖空間。待數據輸出完畢后,要及時關閉輸出流。

out對象一個最基本的應用就是向客戶端瀏覽器輸出信息。out對象可以輸出各種數據類型的數據,在輸出非字符串類型的數據時,會自動轉換為字符串進行輸出。out對象提供了println()方法向頁面中輸出信息的方法,應用該方法可以直接輸出HTML標簽,因此,可以應用它來輸出<script>和</script>標簽之間的JavaScript代碼,其代碼如下:

        <%
              out.println("<script> alert(’輸出彈出提示窗口!'); <script>")
        %>

注意:應用out對象的println()方法輸出HTML標簽時,是以字符串格式輸出的,如果輸出標簽體的屬性信息,需要應用轉義字符“\”,如輸出一個文本框元素:out.println("<input type=\"text\" name=\"user\"/>")。

設計過程

(1)創建用戶注冊的表單頁index.jsp,將表單提交到save.jsp頁,關鍵代碼如下:

        <form action="save.jsp"method="post">
              ……
        </form>

(2)創建save.jsp頁,該頁只是為了演示如何在JSP腳本中插入JavaScript代碼,并沒有真正對表單數據進行處理,如何獲取表單數據,會在后面的實例中具體介紹。save.jsp的關鍵代碼如下:

        <%
              out.println("<script> alert(’注冊成功!'); window.location.href='index.jsp'; </script>");
        %>

秘笈心法

out對象的類一個比較重要的功能就是對緩沖區進行管理。通過調用out對象的clear()方法可以清除緩沖區的內容。這類似于重置響應流,以便重新開始操作。如果響應已經提交,則會產生IOException異常的負作用。out對象還提供了另一種清除緩沖區內容的方法,即clearBuffer()方法,通過該方法可以清除緩沖區的“當前”內容,而且即使內容已經提交給客戶端,也能夠訪問該方法。

實例101 將頁面轉發到用戶登錄頁面

光盤位置:光盤\MR\04\101

初級

實用指數:

實例說明

通過<jsp:forward>動作標識可以將請求轉發到其他的Web資源,如另一個JSP頁面、HTML頁面、Servlet等。執行請求轉發后,當前頁面將不再被執行,而是去執行該標識指定的目標頁面。運行本實例,將顯示如圖4.8所示的用戶登錄頁面。

圖4.8 將頁面轉發到用戶登錄頁面

關鍵技術

<jsp:forward>動作標識的語法格式如下:

        <jsp:forward page="url"/>

        <jsp:forward page="url">
        子動作標識<jsp:param>
        </jsp:forward>

page屬性:用于指定請求轉發的目標頁面。該屬性值可以是一個指定文件路徑的字符串,也可以是表示文件路徑的JSP表達式。但是請求被轉向的目標文件必須是內部的資源,即當前應用中的資源。

JSP的動作標識<jsp:param>可以作為其他標識的子標識,用于為其他標識傳遞參數,其語法格式如下:

        <jsp:param name="參數名" value="參數值" />

參數說明

? name:用于指定參數名稱。

? value:用于設置對應的參數值。

例如,通過<jsp:param>標識為<jsp:forward>標識指定參數,可以使用下面的代碼:

        <jsp:forward page="modify.jsp">
        <jsp:param name="userId"value="7"/>
        </jsp:forward>

在上面的代碼中,實現了在請求轉發到modify.jsp頁面的同時,傳遞了參數userId,其參數值為7。

設計過程

(1)創建一個名稱為index.jsp的文件,該文件為中轉頁,用于通過<jsp:forward>動作標識將頁面轉發到用戶登錄頁面(login.jsp),其具體代碼如下:

        <%@page language="java"contentType="text/html;charset=GB18030"pageEncoding="GB18030"%>
        <html>
        <head>
        <meta http-equiv="Content-Type"content="text/html;charset=GB18030">
        <title>中轉頁</title>
        </head>
        <body>
        <jsp:forward page="login.jsp"/>
        </body>
        </html>

(2)編寫login.jsp文件,在該文件中添加用于收集用戶登錄信息的表單及表單元素,具體代碼如下:

        <%@page language="java"contentType="text/html;charset=GB18030"pageEncoding="GB18030"%>
        <html>
        <head>
        <meta http-equiv="Content-Type"content="text/html;charset=GB18030">
        <title>用戶登錄</title>
        </head>
        <body>
        <form name="form1"method="post"action="">
        用戶名: <input   name="name"type="text"id="name"style="width:120px"><br>
        密&nbsp; &nbsp;碼: <input name="pwd"type="password"id="pwd"style="width:120px"><br>
        <br>
        <input type="submit"name="Submit"value="提交">
        </form>
        </body>
        </html>

秘笈心法

通過<jsp:param>動作標識指定的參數,將以“參數名=值”的形式加入到請求中。它的功能與在文件名后面直接加“?參數名=參數值”是相同的。

主站蜘蛛池模板: 珠海市| 太仓市| 海淀区| 乐东| 元阳县| 杭州市| 封丘县| 望江县| 周口市| 晋中市| 祁阳县| 紫阳县| 增城市| 乃东县| 富川| 高阳县| 泰顺县| 永修县| 六安市| 黎城县| 化隆| 外汇| 彰武县| 咸阳市| 大化| 皋兰县| 通海县| 乌鲁木齐市| 虹口区| 墨玉县| 泽库县| 嘉黎县| 茌平县| 同江市| 班戈县| 金寨县| 吉木萨尔县| 琼中| 怀来县| 通许县| 舟曲县|