北大青鳥JSP教程大全(中)[沐風(fēng)書苑]_第1頁
北大青鳥JSP教程大全(中)[沐風(fēng)書苑]_第2頁
北大青鳥JSP教程大全(中)[沐風(fēng)書苑]_第3頁
北大青鳥JSP教程大全(中)[沐風(fēng)書苑]_第4頁
北大青鳥JSP教程大全(中)[沐風(fēng)書苑]_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JDBC程序的工作模板程序的工作模板 try Class.forName(JDBC驅(qū)動類驅(qū)動類); catch (ClassNotFoundException e) System.out.println(無法找到驅(qū)動類無法找到驅(qū)動類); try Connection con=DriverManager.getConnection(JDBC URL,數(shù)據(jù)庫用戶名數(shù)據(jù)庫用戶名,密碼密碼); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Table1); whi

2、le (rs.next() int x = rs.getInt(a); String s = rs.getString(b); float f = rs.getFloat(c); con.close(); catch (SQLException e) e.printStackTrace(); 獲得數(shù)據(jù)庫連接獲得數(shù)據(jù)庫連接 發(fā)送發(fā)送Sql語句語句 處理結(jié)果處理結(jié)果 注冊注冊JDBC驅(qū)動驅(qū)動 JDBC URL用來標(biāo)識數(shù)據(jù)庫用來標(biāo)識數(shù)據(jù)庫 必須處理的異常必須處理的異常 釋放資源釋放資源 必須處理的異常必須處理的異常參考幻燈 JDBC驅(qū)動驅(qū)動 5-1 JDBC驅(qū)動由數(shù)據(jù)庫廠商驅(qū)動由數(shù)據(jù)庫廠商提供提供

3、在個(gè)人開發(fā)與測試中,可以使用在個(gè)人開發(fā)與測試中,可以使用JDBC-ODBC橋連方式橋連方式 在生產(chǎn)型開發(fā)中,推薦使用純在生產(chǎn)型開發(fā)中,推薦使用純Java驅(qū)動方式驅(qū)動方式 JDBC API JDBC Driver Manager 純純Java 驅(qū)動驅(qū)動 JDBCODBC橋橋 Java 應(yīng)用程序應(yīng)用程序 ODBC 參考幻燈 JDBC驅(qū)動驅(qū)動 5-2 橋連橋連 將對將對JDBC API的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接API的調(diào)用的調(diào)用 優(yōu)點(diǎn):可以訪問所有優(yōu)點(diǎn):可以訪問所有ODBC可以訪問的數(shù)據(jù)庫可以訪問的數(shù)據(jù)庫 缺點(diǎn):執(zhí)行效率低、功能不夠強(qiáng)大缺點(diǎn):執(zhí)行效率低、功能不夠

4、強(qiáng)大 JDBC-ODBC橋橋 Java 應(yīng)用程序應(yīng)用程序 JDBC APIODBC APIODBC層層 參考幻燈 JDBC驅(qū)動驅(qū)動 5-3 使用使用JDBC-ODBC進(jìn)行橋連進(jìn)行橋連 1、在控制面板、在控制面板ODBC數(shù)據(jù)源數(shù)據(jù)源系統(tǒng)系統(tǒng)DSN中配置數(shù)據(jù)源中配置數(shù)據(jù)源 2、編程,通過橋連方式與數(shù)據(jù)庫建立連接、編程,通過橋連方式與數(shù)據(jù)庫建立連接 -語法語法- Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con =DriverManager.getConnection(jdbc:odbc:news,sa,sa); JDBC-ODB

5、C橋驅(qū)動類橋驅(qū)動類 的完全限定類名的完全限定類名 數(shù)據(jù)源名稱數(shù)據(jù)源名稱 演示:配置演示:配置ODBC數(shù)據(jù)源數(shù)據(jù)源 參考幻燈 JDBC驅(qū)動驅(qū)動 5-4 純純Java驅(qū)動驅(qū)動 由由JDBC驅(qū)動直接訪問數(shù)據(jù)庫驅(qū)動直接訪問數(shù)據(jù)庫 優(yōu)點(diǎn):優(yōu)點(diǎn):100% Java,快又可跨平臺,快又可跨平臺 缺點(diǎn):訪問不同的數(shù)據(jù)庫需要下載專用的缺點(diǎn):訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動驅(qū)動 JDBC 驅(qū)動驅(qū)動 Java 應(yīng)用程序應(yīng)用程序 JDBC API 參考幻燈 JDBC驅(qū)動驅(qū)動 5-5 使用純使用純Java驅(qū)動方式進(jìn)行直連驅(qū)動方式進(jìn)行直連 1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包 2、

6、將驅(qū)動程序包引入工程中、將驅(qū)動程序包引入工程中 3、編程,通過純、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接驅(qū)動方式與數(shù)據(jù)庫建立連接 -語法語法- String URL=jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=news; Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); Connection con = DriverManager.getConnection(URL,sa,sa); sql server數(shù)據(jù)庫驅(qū)動類的數(shù)據(jù)庫驅(qū)動類的 完全限定類名完全限定

7、類名 演示:在工程中引入演示:在工程中引入JDBC驅(qū)動程序包驅(qū)動程序包 數(shù)據(jù)庫名稱數(shù)據(jù)庫名稱 參考幻燈 小結(jié)小結(jié) 1 JDBC橋連與純橋連與純Java驅(qū)動兩種方式的優(yōu)缺點(diǎn)分別是什么?驅(qū)動兩種方式的優(yōu)缺點(diǎn)分別是什么? JDBC URL的作用是什么?的作用是什么? 參考幻燈 創(chuàng)建數(shù)據(jù)表:創(chuàng)建數(shù)據(jù)表:FirstLevelTitle JDBC應(yīng)用應(yīng)用 要求對新聞標(biāo)題進(jìn)行管理:要求對新聞標(biāo)題進(jìn)行管理: 1、新聞標(biāo)題存儲在、新聞標(biāo)題存儲在Sql Server 2000中中 2、通過、通過JDBC對新聞標(biāo)題進(jìn)行增、刪、改、查操作對新聞標(biāo)題進(jìn)行增、刪、改、查操作 操作步驟操作步驟 使用使用Statement插

8、入數(shù)據(jù)插入數(shù)據(jù) 使用使用PreparedStatement 增、刪、改、查數(shù)據(jù)增、刪、改、查數(shù)據(jù) 字段名稱字段名稱字段說明字段說明數(shù)據(jù)類型數(shù)據(jù)類型大小大小 Id序號序號int4 TitleName標(biāo)題名稱標(biāo)題名稱varchar50 Creator創(chuàng)建者創(chuàng)建者varchar50 CreateTime創(chuàng)建時(shí)間創(chuàng)建時(shí)間datetime8 1 2 參考幻燈 使用使用Statement插入數(shù)據(jù)插入數(shù)據(jù) 2-1 使用橋連方式向使用橋連方式向FirstLevelTitle表中插入一條記錄表中插入一條記錄 代碼片斷代碼片斷 public static void main(String args) Connec

9、tion con = null; Statement statement = null; try String strSql = insert into FirstLevelTitle values(1,軍事軍事,網(wǎng)管網(wǎng)管,getdate(); try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) System.out.println(無法找到驅(qū)動類無法找到驅(qū)動類); con = DriverManager.getConnection(jdbc:odbc:news,sa,sa); st

10、atement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally closeStatement(statement); closeConnection(con); 建立連接建立連接 執(zhí)行執(zhí)行sql語句語句 數(shù)據(jù)庫連接使用完數(shù)據(jù)庫連接使用完 畢,及時(shí)釋放畢,及時(shí)釋放 載入載入JDBC-ODBC橋驅(qū)動類橋驅(qū)動類 異常處理異常處理 異常處理異常處理 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 使用使用Statement插入數(shù)據(jù)插

11、入數(shù)據(jù) 2-2 使用純使用純Java驅(qū)動方式向驅(qū)動方式向FirstLevelTitle表中表中 插入一條記錄插入一條記錄 代碼片斷代碼片斷 public static void main(String args) Connection con = null; Statement statement = null; try String strSql = insert into FirstLevelTitle values(1,軍事軍事,網(wǎng)管網(wǎng)管,getdate(); try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);

12、 catch (ClassNotFoundException e) System.out.println(無法找到驅(qū)動類無法找到驅(qū)動類); con = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433; +DatabaseName=news,sa,sa); statement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally /

13、釋放連接釋放連接 載入載入sql server數(shù)據(jù)數(shù)據(jù) 庫驅(qū)動類庫驅(qū)動類 建立連接建立連接 執(zhí)行執(zhí)行sql語句語句 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 小結(jié)小結(jié) 2 在使用純在使用純Java驅(qū)動方式進(jìn)行數(shù)據(jù)庫連接時(shí),如果程序在運(yùn)行時(shí)驅(qū)動方式進(jìn)行數(shù)據(jù)庫連接時(shí),如果程序在運(yùn)行時(shí) 拋出異常:拋出異常: java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=news 那么出錯(cuò)的原因是什么?如何解決?那么出錯(cuò)的原因是什么?如何解決? 請單獨(dú)建立一個(gè)

14、類請單獨(dú)建立一個(gè)類ConnectionManager,專門負(fù)責(zé)建立數(shù)據(jù),專門負(fù)責(zé)建立數(shù)據(jù) 庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么 找不到合適的驅(qū)動類,原因:沒有把數(shù)據(jù)庫驅(qū)動包引入工程找不到合適的驅(qū)動類,原因:沒有把數(shù)據(jù)庫驅(qū)動包引入工程 好處在于:既便于管理、又可以提高代碼的復(fù)用性好處在于:既便于管理、又可以提高代碼的復(fù)用性 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 PreparedStatement PreparedStatement接口接口 (預(yù)編譯的(預(yù)編譯的 SQL 語句)語句) Statement 接口接口 當(dāng)當(dāng) SQL 語句將運(yùn)

15、行多次時(shí),盡語句將運(yùn)行多次時(shí),盡 量使用量使用PreparedStatement,以,以 便提高運(yùn)行效率便提高運(yùn)行效率 PreparedStatement 接口繼承接口繼承 Statement接口接口 PreparedStatement比普通的比普通的Statement對象使用起來更對象使用起來更 加靈活,更有效率加靈活,更有效率 參考幻燈 使用使用PreparedStatement插入數(shù)據(jù)插入數(shù)據(jù) public class NewsFirstTitleDB2 public static void main(String args) Connection con = null; Prepare

16、dStatement pStatement = null; try SimpleDateFormat hmFromat = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss); con = ConnectionManager.getConnection(); String strSql = insert into FirstLevelTitle values(?,?,?,?); pStatement = con.prepareStatement(strSql); pStatement.setInt(1, 1); pStatement.setString(2, 軍

17、事軍事); pStatement.setString(3, 管理員管理員); pStatement.setString(4, hmFromat.format(new Date(); pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); 參數(shù)化的查詢語句參數(shù)化的查詢語句 設(shè)置每個(gè)設(shè)置每個(gè) ? 參數(shù)的值,參數(shù)的值

18、, 列號從列號從1開始開始 執(zhí)行執(zhí)行sql語句語句 參考幻燈 使用使用PreparedStatement刪除數(shù)據(jù)刪除數(shù)據(jù) public class NewsFirstTitleDB3 public static void main(String args) Connection con = null; PreparedStatement pStatement = null; try con = ConnectionManager.getConnection(); String strSql = delete from FirstLevelTitle where TitleName = ?; p

19、Statement = con.prepareStatement(strSql); pStatement.setString(1, 軍事軍事); int row = pStatement.executeUpdate(); System.out.println(“成功刪除了成功刪除了+row+行數(shù)據(jù)行數(shù)據(jù)!); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con);

20、返回刪除記錄的行數(shù)返回刪除記錄的行數(shù) 參考幻燈 使用使用PreparedStatement更新數(shù)據(jù)更新數(shù)據(jù) public class NewsFirstTitleDB4 public static void main(String args) Connection con = null; PreparedStatement pStatement = null; try con = ConnectionManager.getConnection(); String strSql = update FirstLevelTitle set Creator = ? where Id = ?; pSta

21、tement = con.prepareStatement(strSql); pStatement.setString(1, 編輯編輯); pStatement.setInt(2, 1); int row = pStatement.executeUpdate(); System.out.println(成功更新了成功更新了+row+行數(shù)據(jù)行數(shù)據(jù)!); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.c

22、loseConnection(con); 返回更新記錄的行數(shù)返回更新記錄的行數(shù) 參考幻燈 小結(jié)小結(jié) 3 使用使用PreparedStatement語句執(zhí)行如下操作:語句執(zhí)行如下操作: 刪除表刪除表FirstLevelTitle中所有中所有Id小于小于10的記錄,并在控制臺的記錄,并在控制臺 輸出刪除記錄的行數(shù)輸出刪除記錄的行數(shù) 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 使用使用PreparedStatement查詢數(shù)據(jù)查詢數(shù)據(jù) 2-1 public class NewsFirstTitleDB5 public static void main(String args) int id = 0; Con

23、nection con = null; PreparedStatement pstmt = null; ResultSet resSet = null; try con = ConnectionManager.getConnection(); String sqlStr = select max(id) from FirstLevelTitle ; pstmt = con.prepareStatement(sqlStr); resSet = pstmt.executeQuery(); if (resSet.next() id = resSet.getInt(1); catch (Excepti

24、on e) e.printStackTrace(); finally ConnectionManager.closeResultSet(resSet); ConnectionManager.closeStatement(pstmt); ConnectionManager.closeConnection(con); System.out.println(新的一級新聞標(biāo)題的新的一級新聞標(biāo)題的Id為:為: + (id + 1); 查詢新聞一級標(biāo)查詢新聞一級標(biāo) 題的題的Id的最大值的最大值 關(guān)閉結(jié)果關(guān)閉結(jié)果 集、語句、集、語句、 以及連接以及連接 對新聞一級標(biāo)題對新聞一級標(biāo)題Id的的 最大值加一,作為

25、新最大值加一,作為新 的一級標(biāo)題的的一級標(biāo)題的Id 獲取數(shù)據(jù),列獲取數(shù)據(jù),列 號從號從1開始開始 返回結(jié)果集返回結(jié)果集 參考幻燈 從數(shù)據(jù)庫中取出所有的新聞一級標(biāo)題從數(shù)據(jù)庫中取出所有的新聞一級標(biāo)題 代碼片斷代碼片斷 public static List getAllFirstLevelTitleList() /省略部分變量聲明語句省略部分變量聲明語句 ArrayList list = new ArrayList(); try dbConnection = ConnectionManager.getConnection(); String strSql = select * from FirstL

26、evelTitle order by CreateTime desc; pStatement = dbConnection.prepareStatement(strSql); res = pStatement.executeQuery(); while (res.next() int id = res.getInt(id); String title = res.getString(TitleName); String creator = res.getString(Creator); Date time = res.getDate (“CreateTime”); FirstLevelTitl

27、e fTitle = new FirstLevelTitle(id, title,creator, time); list.add(fTitle); /省略省略catch、finally子句子句 return list; 使用使用PreparedStatement查詢數(shù)據(jù)查詢數(shù)據(jù) 2-2 查詢新聞一級標(biāo)題查詢新聞一級標(biāo)題 創(chuàng)建標(biāo)題對象,并添創(chuàng)建標(biāo)題對象,并添 加入加入ArrayList中中 返回結(jié)果集返回結(jié)果集 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 總結(jié)總結(jié) 使用使用PreparedStatement語句執(zhí)行如下操作:語句執(zhí)行如下操作: 取出表取出表FirstLevelTitle中中Id的最大值

28、的最大值 向表向表FirstLevelTitle中插入一行新記錄,其中中插入一行新記錄,其中Id值為原值為原Id最大最大 值值加一加一 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 Thank you 參考幻燈 JSP簡介簡介 第四章第四章 21參考幻燈 回顧回顧 JDBC的英文全稱是什么?的英文全稱是什么? JDBC的主要作用是什么的主要作用是什么 ? PreparedStatement 與與 Statement相比,具有什么優(yōu)相比,具有什么優(yōu) 勢?勢? 參考幻燈 預(yù)習(xí)檢查預(yù)習(xí)檢查 為什么第一次請求為什么第一次請求JSP頁面時(shí),響應(yīng)速度比較慢?頁面時(shí),響應(yīng)速度比較慢? JSP文件中,有幾種注釋方法?格

29、式是什么?文件中,有幾種注釋方法?格式是什么? 參考幻燈 本章任務(wù)本章任務(wù) 為新聞發(fā)布系統(tǒng)創(chuàng)建為新聞發(fā)布系統(tǒng)創(chuàng)建JSP頁面頁面 能夠在能夠在Eclipse中部署運(yùn)行該新聞發(fā)布系統(tǒng)中部署運(yùn)行該新聞發(fā)布系統(tǒng) 參考幻燈 掌握掌握J(rèn)SP的定義、作用、以及頁面組成的定義、作用、以及頁面組成 掌握如何創(chuàng)建掌握如何創(chuàng)建JSP頁面頁面 掌握掌握J(rèn)SP頁面的執(zhí)行過程頁面的執(zhí)行過程 本章目標(biāo)本章目標(biāo) 參考幻燈 為什么需要為什么需要JSP 2-1 為什么需要基于為什么需要基于B/S技術(shù)的動態(tài)網(wǎng)頁?技術(shù)的動態(tài)網(wǎng)頁? B/S技術(shù)的特點(diǎn)是什么?技術(shù)的特點(diǎn)是什么? 使用動態(tài)網(wǎng)頁,可以動態(tài)輸出網(wǎng)頁內(nèi)容、同用戶進(jìn)行交互、對網(wǎng)頁

30、內(nèi)容使用動態(tài)網(wǎng)頁,可以動態(tài)輸出網(wǎng)頁內(nèi)容、同用戶進(jìn)行交互、對網(wǎng)頁內(nèi)容 進(jìn)行在線更新進(jìn)行在線更新 應(yīng)用應(yīng)用 服務(wù)器服務(wù)器 IE IE 解釋執(zhí)行解釋執(zhí)行 HTML文件文件 從服務(wù)器端檢索到的信息從服務(wù)器端檢索到的信息 返回響應(yīng)返回響應(yīng) 客戶端的請求信息客戶端的請求信息 發(fā)送請求發(fā)送請求 訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫 返回結(jié)果返回結(jié)果 運(yùn)行運(yùn)行JSP等服務(wù)等服務(wù) 器端腳本程序器端腳本程序 1 用戶輸入用戶輸入 2 3 4 數(shù)據(jù)庫數(shù)據(jù)庫 服務(wù)器服務(wù)器 參考幻燈 為什么需要為什么需要JSP 2-2 如何在瀏覽器上動態(tài)輸出當(dāng)前日期?如何在瀏覽器上動態(tài)輸出當(dāng)前日期? 輸出當(dāng)前日期輸出當(dāng)前日期 你好,你好,ACCP!

31、今天是今天是 顯然,無法通過靜態(tài)顯然,無法通過靜態(tài)HTML完成這個(gè)效果,試一試完成這個(gè)效果,試一試JSP,看看是否可行,看看是否可行 運(yùn)行結(jié)果運(yùn)行結(jié)果 參考幻燈 什么是什么是JSP JSP(Java Server Pages)是指:)是指: 在在HTML中嵌入中嵌入Java腳本語言腳本語言 由應(yīng)用服務(wù)器中的由應(yīng)用服務(wù)器中的JSP引擎來編譯和執(zhí)行嵌入的引擎來編譯和執(zhí)行嵌入的Java腳本語言腳本語言 命令命令 然后將生成的整個(gè)頁面信息返回給客戶端然后將生成的整個(gè)頁面信息返回給客戶端 JSP頁面頁面 數(shù)據(jù)庫數(shù)據(jù)庫 服務(wù)器服務(wù)器 應(yīng)用應(yīng)用 服務(wù)器服務(wù)器 編譯、執(zhí)行編譯、執(zhí)行 客戶端客戶端 嵌入嵌入 J

32、ava腳本語言腳本語言 12 3 4 返回頁面信息返回頁面信息 參考幻燈 JSP 頁面組成頁面組成 4-1 JSP 頁面的元素包括:頁面的元素包括: 靜態(tài)內(nèi)容靜態(tài)內(nèi)容 指指 令令 表達(dá)式表達(dá)式 小腳本小腳本 HTML靜態(tài)文本靜態(tài)文本 以以“ ” 結(jié)束。結(jié)束。 比如:比如: 聲聲 明明 標(biāo)準(zhǔn)動作標(biāo)準(zhǔn)動作 以以“jsp: 動作名動作名 ” 開始,以開始,以“ ” 結(jié)束結(jié)束 比如:比如: 注釋注釋 參考幻燈 JSP 頁面組成頁面組成 4-2 輸出當(dāng)前日期輸出當(dāng)前日期 你好,你好,ACCP!今天是!今天是 指令指令 靜態(tài)內(nèi)容靜態(tài)內(nèi)容 小腳本小腳本 表達(dá)式表達(dá)式 注釋注釋 參考幻燈 JSP 頁面組成頁面

33、組成 4-3 在瀏覽器上觀看運(yùn)行結(jié)果在瀏覽器上觀看運(yùn)行結(jié)果 查看網(wǎng)頁源文件查看網(wǎng)頁源文件 可以通過源代碼查看可以通過源代碼查看 到到HTML注釋的內(nèi)容注釋的內(nèi)容 所有注釋內(nèi)容都不可見所有注釋內(nèi)容都不可見 參考幻燈 JSP 頁面組成頁面組成 4-4 合理、詳細(xì)的注釋有利于代碼后期的維護(hù)和閱讀合理、詳細(xì)的注釋有利于代碼后期的維護(hù)和閱讀 在在JSP文件的編寫過程中,共有三種注釋方法:文件的編寫過程中,共有三種注釋方法: HTML的注釋方法:的注釋方法: JSP注釋標(biāo)記:注釋標(biāo)記: 在在JSP腳本中使用注釋:腳本中使用注釋: 缺點(diǎn):不安全,加大缺點(diǎn):不安全,加大 網(wǎng)絡(luò)傳輸負(fù)擔(dān)網(wǎng)絡(luò)傳輸負(fù)擔(dān) 參考幻燈 小

34、結(jié)小結(jié) 1 請編寫一個(gè)請編寫一個(gè)JSP頁面頁面exercise1.jsp,要求:,要求: 至少包含三種注釋至少包含三種注釋 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 創(chuàng)建新聞發(fā)布系統(tǒng)的創(chuàng)建新聞發(fā)布系統(tǒng)的JSP頁面頁面 5-1 回憶第一章內(nèi)容,請說明開發(fā)回憶第一章內(nèi)容,請說明開發(fā)JSP動態(tài)網(wǎng)站的幾動態(tài)網(wǎng)站的幾 個(gè)步驟個(gè)步驟 創(chuàng)建創(chuàng)建Web項(xiàng)目項(xiàng)目 開發(fā)步驟開發(fā)步驟 設(shè)計(jì)設(shè)計(jì)Web 項(xiàng)目的項(xiàng)目的 目錄結(jié)構(gòu)目錄結(jié)構(gòu) 編寫代碼編寫代碼 (創(chuàng)建(創(chuàng)建 JSP) 部署、運(yùn)行部署、運(yùn)行 本章將從這里開始,帶領(lǐng)大家創(chuàng)本章將從這里開始,帶領(lǐng)大家創(chuàng) 建新聞發(fā)布系統(tǒng)的建新聞發(fā)布系統(tǒng)的JSP頁面頁面 參考幻燈 創(chuàng)建新聞發(fā)布

35、系統(tǒng)的創(chuàng)建新聞發(fā)布系統(tǒng)的JSP頁面頁面 5-2 設(shè)計(jì)設(shè)計(jì)Web項(xiàng)目的目錄結(jié)構(gòu):項(xiàng)目的目錄結(jié)構(gòu): 創(chuàng)建目錄創(chuàng)建目錄ch04:存放:存放JSP頁面頁面 創(chuàng)建目錄創(chuàng)建目錄CSS:存放樣式表文件:存放樣式表文件 創(chuàng)建目錄創(chuàng)建目錄images:存放圖片:存放圖片 參考幻燈 創(chuàng)建新聞發(fā)布系統(tǒng)的創(chuàng)建新聞發(fā)布系統(tǒng)的JSP頁面頁面 5-3 使用使用JSP模板向?qū)?chuàng)建模板向?qū)?chuàng)建JSP頁面,共有三步:頁面,共有三步: 1 2 3 右鍵點(diǎn)擊右鍵點(diǎn)擊“WebRoot”下的下的“ch04”,從右鍵菜單中選擇:新建,從右鍵菜單中選擇:新建其他其他 在新彈出的窗口中,選擇在新彈出的窗口中,選擇“Web”下的下的“JSP”,

36、點(diǎn)擊,點(diǎn)擊“下一步下一步” 在下一個(gè)新彈出的窗口中,輸入文件名在下一個(gè)新彈出的窗口中,輸入文件名index.jsp,點(diǎn)擊,點(diǎn)擊“完成完成” 演示:使用演示:使用JSP模板向?qū)?chuàng)建模板向?qū)?chuàng)建JSP頁面頁面 參考幻燈 創(chuàng)建新聞發(fā)布系統(tǒng)的創(chuàng)建新聞發(fā)布系統(tǒng)的JSP頁面頁面 5-4 手工創(chuàng)建手工創(chuàng)建JSP頁面,共有兩步:頁面,共有兩步: 1 2 右鍵點(diǎn)擊右鍵點(diǎn)擊“WebRoot”下的下的“ch04”,選擇:新建,選擇:新建文件文件 在新彈出的窗口中,輸入文件名在新彈出的窗口中,輸入文件名index.jsp,點(diǎn)擊,點(diǎn)擊“完成完成” 演示:手工創(chuàng)建演示:手工創(chuàng)建JSP頁面頁面 參考幻燈 創(chuàng)建新聞發(fā)布系統(tǒng)的

37、創(chuàng)建新聞發(fā)布系統(tǒng)的JSP頁面頁面 5-5 采用你認(rèn)為最方便的方式,把靜態(tài)新聞發(fā)布系統(tǒng)的所采用你認(rèn)為最方便的方式,把靜態(tài)新聞發(fā)布系統(tǒng)的所 有頁面轉(zhuǎn)換為有頁面轉(zhuǎn)換為JSP頁面,并部署運(yùn)行頁面,并部署運(yùn)行 演示:頁面轉(zhuǎn)換、并部署運(yùn)行演示:頁面轉(zhuǎn)換、并部署運(yùn)行 參考幻燈 生活中的歡迎頁面生活中的歡迎頁面 通常情況下,訪問某個(gè)網(wǎng)站時(shí),我們只需要知道網(wǎng)站的域通常情況下,訪問某個(gè)網(wǎng)站時(shí),我們只需要知道網(wǎng)站的域 名就可以了。名就可以了。 比如:比如: 現(xiàn)在看到的就是現(xiàn)在看到的就是 新浪的首頁面新浪的首頁面 參考幻燈 如何設(shè)置歡迎頁面如何設(shè)置歡迎頁面 歡迎頁面,就是歡迎頁面,就是web應(yīng)用的默認(rèn)訪問頁面應(yīng)用的默

38、認(rèn)訪問頁面 在配置文件在配置文件web.xml中設(shè)置歡迎頁面中設(shè)置歡迎頁面 index.jsp 假定在假定在web應(yīng)用應(yīng)用(news)下存在一個(gè)下存在一個(gè)index.jsp頁面,頁面, 輸入輸入http:/localhost:8080/news地址時(shí),地址時(shí),web容器會容器會 默認(rèn)調(diào)用默認(rèn)調(diào)用index.jsp頁面頁面 參考幻燈 JSP 執(zhí)行過程執(zhí)行過程 2-1 3 執(zhí)行執(zhí)行 2 翻譯翻譯 編譯編譯 1 請求請求 響應(yīng)響應(yīng) Web容器處理容器處理JSP文件請求需要經(jīng)過文件請求需要經(jīng)過3個(gè)階段:個(gè)階段: 翻譯階段:翻譯階段:JSP文件會被文件會被Web容器中的容器中的JSP引擎轉(zhuǎn)換成引擎轉(zhuǎn)換成

39、Java源碼源碼 編譯階段:編譯階段:Java源碼會被編譯成可執(zhí)行的字節(jié)碼源碼會被編譯成可執(zhí)行的字節(jié)碼 執(zhí)行階段:容器接受了客戶端的請求后,執(zhí)行編譯成字節(jié)碼的執(zhí)行階段:容器接受了客戶端的請求后,執(zhí)行編譯成字節(jié)碼的 JSP文件;處理完請求后,容器把生成的頁面反饋給客戶端進(jìn)行文件;處理完請求后,容器把生成的頁面反饋給客戶端進(jìn)行 顯示顯示 應(yīng)用服務(wù)應(yīng)用服務(wù) 器器 客戶端客戶端 JSP文件文件 .java .class 參考幻燈 JSP 執(zhí)行過程執(zhí)行過程 2-2 執(zhí)行執(zhí)行 第二次請求第二次請求 響應(yīng)響應(yīng) 第一次請求之后,第一次請求之后,Web容器可以重用已經(jīng)編譯好的字節(jié)容器可以重用已經(jīng)編譯好的字節(jié) 碼

40、文件碼文件 應(yīng)用服務(wù)器應(yīng)用服務(wù)器 客戶端客戶端 .class 注意:如果對注意:如果對JSP文件進(jìn)行了修改,文件進(jìn)行了修改,Web容器會重新對容器會重新對 JSP文件進(jìn)行翻譯和編譯文件進(jìn)行翻譯和編譯 演示:演示:JSP頁面修改前后的響應(yīng)速度頁面修改前后的響應(yīng)速度 參考幻燈 JSP運(yùn)行環(huán)境運(yùn)行環(huán)境 Web容器(如:容器(如:Tomcat)提供)提供 JSP引擎,負(fù)責(zé)引擎,負(fù)責(zé)JSP文件的執(zhí)行,文件的執(zhí)行, 提供提供JSP的運(yùn)行時(shí)環(huán)境的運(yùn)行時(shí)環(huán)境 在在Eclipse中部署中部署Web應(yīng)用,等應(yīng)用,等 同于在同于在Web容器中部署容器中部署Web應(yīng)用應(yīng)用 與與Eclipse中中Web應(yīng)用的應(yīng)用的 目

41、錄結(jié)構(gòu)一模一樣目錄結(jié)構(gòu)一模一樣 參考幻燈 小結(jié)小結(jié) 2 為什么為什么JSP頁面在第一次請求時(shí)會比較慢,而之后對同頁面在第一次請求時(shí)會比較慢,而之后對同 樣的樣的JSP頁面的請求會非??欤宽撁娴恼埱髸浅??? 參考幻燈 總結(jié)總結(jié) 歡迎登錄新聞發(fā)布系統(tǒng)歡迎登錄新聞發(fā)布系統(tǒng) 在運(yùn)行在運(yùn)行welcome.jsp時(shí),會出現(xiàn)什么現(xiàn)象?如何時(shí),會出現(xiàn)什么現(xiàn)象?如何 改正?改正? 出現(xiàn)中文亂碼,出現(xiàn)中文亂碼, 把字符集改為:把字符集改為:GBK WEB-INF文件夾中的內(nèi)容無法對外發(fā)布,文件夾中的內(nèi)容無法對外發(fā)布, 把把images文件夾拖至文件夾拖至WebRoot文件夾下文件夾下 參考幻燈 Thank yo

42、u 參考幻燈 JSP指令和腳本元素指令和腳本元素 第五章第五章 47參考幻燈 回顧回顧 為什么第一次請求為什么第一次請求JSP頁面時(shí),響應(yīng)速度比較慢?頁面時(shí),響應(yīng)速度比較慢? JSP文件中,有幾種注釋方法?格式是什么?文件中,有幾種注釋方法?格式是什么? 參考幻燈 預(yù)習(xí)檢查預(yù)習(xí)檢查 列舉一些列舉一些page指令的常用屬性,并說明它們的作用指令的常用屬性,并說明它們的作用 在在JSP文件中,有幾種輸出數(shù)值的方法(如:輸出文件中,有幾種輸出數(shù)值的方法(如:輸出10與與 30的乘積)?分別怎樣表示?的乘積)?分別怎樣表示? 參考幻燈 本章任務(wù)本章任務(wù) 升級新聞發(fā)布系統(tǒng)升級新聞發(fā)布系統(tǒng) 顯示存儲在數(shù)據(jù)

43、庫中的新聞一級標(biāo)題顯示存儲在數(shù)據(jù)庫中的新聞一級標(biāo)題 頁面顯示效果:頁面顯示效果: 參考幻燈 掌握掌握page指令的常用屬性指令的常用屬性 掌握掌握J(rèn)SP 腳本元素的用法腳本元素的用法 小腳本小腳本 表達(dá)式表達(dá)式 方法聲明方法聲明 本章目標(biāo)本章目標(biāo) 參考幻燈 為什么需要為什么需要page指令指令 在在Java文件中,通過兩種方式引入其它包中的類:文件中,通過兩種方式引入其它包中的類: 使用使用import關(guān)鍵字(優(yōu)點(diǎn):一次引入,處處使用)關(guān)鍵字(優(yōu)點(diǎn):一次引入,處處使用) 使用完全限定的類名(即必須加上包名)使用完全限定的類名(即必須加上包名) 在在Java文件中,如何引入其它包中的類?文件中,

44、如何引入其它包中的類? 在在JSP文件中,同樣可以使用文件中,同樣可以使用import關(guān)鍵字引入關(guān)鍵字引入Java類文件,一旦引入,整類文件,一旦引入,整 個(gè)個(gè)JSP文件都可用。文件都可用。 此時(shí),需要使用到此時(shí),需要使用到page指令。指令。 參考幻燈 page指令示例指令示例 輸出當(dāng)前日期輸出當(dāng)前日期 你好,你好,ACCP! 今天是今天是 已經(jīng)通過已經(jīng)通過page指令的指令的import 屬性引入這些類文件了屬性引入這些類文件了 參考幻燈 什么是什么是page指令指令 page指令指令 通過設(shè)置內(nèi)部的多個(gè)屬性來定義整個(gè)頁面的屬性通過設(shè)置內(nèi)部的多個(gè)屬性來定義整個(gè)頁面的屬性 語法:語法: pa

45、ge指令常用屬性指令常用屬性 屬性屬性描述描述默認(rèn)值默認(rèn)值 language指定指定JSP頁面使用的腳本語言頁面使用的腳本語言java import 通過該屬性來引用腳本語言中使用到通過該屬性來引用腳本語言中使用到 的類文件的類文件 無無 contentType用來指定用來指定JSP頁面所采用的編碼方式頁面所采用的編碼方式 text/html, ISO-8859-1 參考幻燈 小結(jié)小結(jié) 1 編寫一個(gè)編寫一個(gè)JSP,要求:,要求: 向一個(gè)向一個(gè)ArrayList對象中添加對象中添加10個(gè)字符串個(gè)字符串 使用使用for循環(huán)進(jìn)行添加,存儲內(nèi)容依次是循環(huán)進(jìn)行添加,存儲內(nèi)容依次是 “第第1個(gè)字符個(gè)字符

46、串串” 、”第第10個(gè)字符串個(gè)字符串“ 最后在頁面上輸出:添加完畢最后在頁面上輸出:添加完畢 使用使用page指令來引入指令來引入ArrayList類類 JSP頁面不能出現(xiàn)中文亂碼頁面不能出現(xiàn)中文亂碼 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 JSP 腳本元素腳本元素 JSP 腳本元素腳本元素 小腳本小腳本 表達(dá)式表達(dá)式 聲明聲明 JSP 腳本元素是用來嵌入腳本元素是用來嵌入Java代碼的,主要用來實(shí)現(xiàn)頁代碼的,主要用來實(shí)現(xiàn)頁 面的動態(tài)請求面的動態(tài)請求 JSP 腳本元素包括:腳本元素包括: 參考幻燈 什么是小腳本什么是小腳本 JSP 小腳本小腳本 就是在就是在JSP頁面里嵌入一段頁面里嵌入一段Jav

47、a代碼代碼 語法:語法: 輸出當(dāng)前日期輸出當(dāng)前日期 你好,你好,ACCP! 今天是今天是 out.print負(fù)責(zé)在頁面上負(fù)責(zé)在頁面上 進(jìn)行輸出進(jìn)行輸出 在在JSP中嵌入的中嵌入的 Java代碼代碼 參考幻燈 小結(jié)小結(jié) 2 使用兩個(gè)一維數(shù)組分別存儲學(xué)生姓名、學(xué)生成績使用兩個(gè)一維數(shù)組分別存儲學(xué)生姓名、學(xué)生成績 在頁面中每隔一行輸出一名學(xué)生的姓名與成績在頁面中每隔一行輸出一名學(xué)生的姓名與成績 運(yùn)行結(jié)果示意圖運(yùn)行結(jié)果示意圖 完整代碼實(shí)現(xiàn)完整代碼實(shí)現(xiàn) 參考幻燈 什么是表達(dá)式什么是表達(dá)式 表達(dá)式表達(dá)式 表達(dá)式是對數(shù)據(jù)的表示,系統(tǒng)將其作為一個(gè)值進(jìn)行計(jì)算和顯示表達(dá)式是對數(shù)據(jù)的表示,系統(tǒng)將其作為一個(gè)值進(jìn)行計(jì)算和顯示 語法:語法: 使用表達(dá)式顯示數(shù)據(jù)。使用表達(dá)式顯示數(shù)據(jù)。 顯然,表達(dá)式更有利于在顯然,表達(dá)式更有利于在 HTML中顯示數(shù)據(jù)中顯示數(shù)據(jù) 12 使用小腳本顯示數(shù)據(jù)使用小腳本顯示數(shù)據(jù) 參考幻燈 小結(jié)小結(jié) 3 使用一個(gè)一維數(shù)組存儲兩個(gè)學(xué)生的成績,在頁面中輸出使用一個(gè)一維數(shù)組存儲兩個(gè)學(xué)生

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論