JavaWeb應(yīng)用開發(fā)全套課件_第1頁
JavaWeb應(yīng)用開發(fā)全套課件_第2頁
JavaWeb應(yīng)用開發(fā)全套課件_第3頁
JavaWeb應(yīng)用開發(fā)全套課件_第4頁
JavaWeb應(yīng)用開發(fā)全套課件_第5頁
已閱讀5頁,還剩287頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Java Web應(yīng)用開發(fā)學(xué)習(xí)目的: 基于Java語言學(xué)習(xí)Java Web相關(guān)技術(shù) 掌握B/S體系結(jié)構(gòu)的程序設(shè)計(jì)方法 具備動(dòng)態(tài)網(wǎng)站應(yīng)用程序的開發(fā)能力課程內(nèi)容Web技術(shù)概述Java程序設(shè)計(jì)網(wǎng)頁基礎(chǔ)JSP頁面元素JSP內(nèi)置對(duì)象JDBC數(shù)據(jù)庫(kù)操作JavaBean技術(shù)EL表達(dá)式和JSTL標(biāo)簽庫(kù)Servlet技術(shù)Web設(shè)計(jì)模式Web 2.0和Ajax簡(jiǎn)介第1章 Web技術(shù)概述Web應(yīng)用演化:桌面應(yīng)用程序以前,普通PC桌面上有哪些應(yīng)用程序的圖標(biāo)?Windows Media Player等音樂播放器QQ等聊天工具網(wǎng)絡(luò)游戲客戶端Office等辦公軟件Web應(yīng)用演化:桌面應(yīng)用程序音樂播放器用戶選擇一個(gè) MP3 文

2、件音樂播放器播放 MP3 文件用戶音樂播放器的演化單機(jī)版:本地安裝播放器程序(Windows Media Player等),存儲(chǔ)音樂文件(mp3等)。Web應(yīng)用演化:桌面應(yīng)用程序音樂播放器用戶選擇一個(gè) MP3 文件音樂播放器播放 MP3 文件用戶音樂播放器的演化C/S網(wǎng)絡(luò)版:本地安裝播放器程序,音樂文件存儲(chǔ)在遠(yuǎn)程服務(wù)器上。遠(yuǎn)程服務(wù)器Web應(yīng)用演化:桌面應(yīng)用程序用戶本機(jī)音樂播放器請(qǐng)求 = 選擇要播放的文件用戶發(fā)送一個(gè)請(qǐng)求播放器發(fā)送一個(gè)響應(yīng)響應(yīng) = 音樂播放器播放選定的文件桌面應(yīng)用程序的特點(diǎn)音樂播放器的演化B/S網(wǎng)絡(luò)版:本地只需瀏覽器,應(yīng)用程序運(yùn)行在Web服務(wù)器,音樂文件也存儲(chǔ)在遠(yuǎn)程服務(wù)器上。We

3、b應(yīng)用演化:Web應(yīng)用程序Web服務(wù)器 播放一首歌作為響應(yīng)用戶請(qǐng)求播放一首歌Web應(yīng)用程序的特點(diǎn)Web應(yīng)用演化 C/S和B/S兩種體系結(jié)構(gòu)的特點(diǎn)和優(yōu)劣比較。C/S(Client/Server),客戶端/服務(wù)器結(jié)構(gòu),適用于中小型應(yīng)用程序,將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn)。系統(tǒng)的通訊開銷低,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕,系統(tǒng)升級(jí)或功能更新代價(jià)高、效率低。B/S(Browser/Server),瀏覽器/服務(wù)器結(jié)構(gòu),適用于大中型應(yīng)用程序,極少事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn)。簡(jiǎn)化客戶端電腦載荷,減輕系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低用戶

4、的總體成本,但應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重。Web應(yīng)用演化:靜態(tài)WebHTTP請(qǐng)求HTTP響應(yīng)返回所請(qǐng)求的HTML頁面查找所請(qǐng)求的頁面靜態(tài)Web應(yīng)用程序的缺點(diǎn)Web應(yīng)用演化:動(dòng)態(tài)WebHTTP請(qǐng)求HTTP響應(yīng)返回動(dòng)態(tài)生成的HTML頁面生成響應(yīng)CGIPHPASPJSP調(diào)用程序靜態(tài)Web和動(dòng)態(tài)Web應(yīng)用程序的優(yōu)劣比較HTTP協(xié)議 超文本傳輸協(xié)議HyperText Transfer Protocol使用端口發(fā)送和接收消息,默認(rèn)為80端口HTTP 協(xié)議發(fā)送請(qǐng)求信息的方法GET 方法參數(shù)以字符串形式作為請(qǐng)求信息的一部分發(fā)送,明文傳輸發(fā)送的數(shù)據(jù)有大小限制,240-255個(gè)字符之間POST 方法用于發(fā)送敏感信

5、息,密文傳輸發(fā)送的數(shù)據(jù)沒有大小限制HTTP協(xié)議HTTP 消息包括:請(qǐng)求響應(yīng)請(qǐng)求消息請(qǐng)求行請(qǐng)求頭方法資源名稱版本GET/POSTbar01.jpgHTTP/1.1瀏覽器類型內(nèi)容類型User-Agent: Mozilla/4.0 (compatible; MSIE 4.0: Windows 95 Accept: image/gif, image/jpeg, text/*, */*響應(yīng)消息 狀態(tài)行響應(yīng)頭版本狀態(tài)代碼說明HTTP/1.1200OK服務(wù)器軟件修改日期大?。ㄗ止?jié))內(nèi)容類型Server: JavaWebServerLast modified: Tuesday, 07-Sep-04 1:14:

6、34 GMTContent-length: 100Content-type: text/plainHTTP協(xié)議 HTTP協(xié)議具有無狀態(tài)的特點(diǎn)。獲取文件HTTP獲取圖像 /bar01.jpg HTTP/1.1HTTP/1.1 200 OK收到bar001.jpg 獲取文件HTTP獲取圖像 /bar02.jpg HTTP/1.1HTTP/1.1 200 OK收到bar002.jpg 再次需要獲取bar001.jpg時(shí),必須再次發(fā)起連接用戶登錄網(wǎng)站后,如何以合法身份繼續(xù)其他操作JSP概述JSP ( Java Server Pages )是基于Java語言的服務(wù)器端腳本技術(shù)。JSP頁面是在HTML靜態(tài)

7、內(nèi)容中加入動(dòng)態(tài)JSP元素。JSP是在服務(wù)器端應(yīng)用的一種腳本,它接受請(qǐng)求并生成響應(yīng)。JSP工作原理客戶端JSP 頁面(.jsp)3執(zhí)行2轉(zhuǎn)譯編譯1Servlet(.java)請(qǐng)求響應(yīng)JSP 執(zhí)行過程JSP頁面的生命周期JSP經(jīng)過轉(zhuǎn)譯、編譯成Servlet類后,Servlet 容器創(chuàng)建 該類的一個(gè)實(shí)例JSP 的生命周期就是指創(chuàng)建 Servlet 實(shí)例之后其存在的時(shí)間以及何時(shí)消失生命周期的 3個(gè)方法為:jspInit()jspService()jspDestroy()Web 應(yīng)用程序開發(fā)過程設(shè)計(jì)目錄結(jié)構(gòu)編寫 Web 應(yīng)用程序代碼編寫部署描述符編譯代碼將 Web 應(yīng)用程序打包部署 Web 應(yīng)用程序執(zhí)行

8、 Web 應(yīng)用程序Web 應(yīng)用程序目錄結(jié)構(gòu) Web 應(yīng)用程序HTML 文件圖像ServletJSP 頁面JavaBeanJar 文件標(biāo)簽文件標(biāo)簽庫(kù)描述符文件部署描述器.war 文件Web 應(yīng)用程序目錄結(jié)構(gòu)文檔根目錄Web 應(yīng)用程序目錄結(jié)構(gòu)index.html, login.jsp, contactus.jspViewBooks.jsp, logo.jpgbook1.jpgAddBook.class, DeleteBook.class mbase.jar, msqlserver.jar,msutil.jarDisplayBook.tag web.xml, books.tld 文檔根目錄靜態(tài)文件(

9、html, images)WEB-INF JSPclasseslibtag.tld, web.xml Web服務(wù)器配置JSP服務(wù)器配置環(huán)境JDK + TomcatTomcat可從/免費(fèi)下載。配置方法:新建環(huán)境變量JAVA_HOME:C:jdk1.6.0_01添加環(huán)境變量Path:%JAVA_HOME%binTomcat啟動(dòng)方法:雙擊Tomcat路徑下,bin目錄中的startup.bat文件第一個(gè)JSP程序MyFirstJSP%=out.println(“This is my first JSP page”);%JSP的優(yōu)點(diǎn)將內(nèi)容與表示分離請(qǐng)求響應(yīng)JSP 頁面靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容客戶端服務(wù)器JSP

10、 程序員頁面設(shè)計(jì)人員JSP的優(yōu)點(diǎn)使用不同工具分工開發(fā)JSP 頁面靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容Web 開發(fā)工具DreamweaverMyEclipseJBuilder 頁面設(shè)計(jì)人員 JSP 程序員JSP的優(yōu)點(diǎn)強(qiáng)調(diào)可重用組件JSP 頁面 1靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容JSP 頁面 2靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容JSP 頁面 3靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容組件多個(gè) JSP 頁面使用相同的 組件Eclipse + MyEclipse開發(fā)環(huán)境簡(jiǎn)介Eclipse 是一個(gè)開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺(tái),用于通過插件組件構(gòu)建開發(fā)環(huán)境。 MyEclipse是Eclipse的插件,也是一款功能強(qiáng)大的J2EE集成開發(fā)環(huán)境 。創(chuàng)建Web 工程 開發(fā)

11、過程創(chuàng)建 JSP部署Web模塊啟動(dòng)Web服務(wù)器調(diào)試運(yùn)行Eclipse平臺(tái)簡(jiǎn)介使用Eclipse+MyEclipse開發(fā)JSP使用向?qū)?chuàng)建Web工程項(xiàng)目名稱站點(diǎn)名稱使用Eclipse+MyEclipse開發(fā)JSP創(chuàng)建JSP“新建”|”JSP”JSP文件名使用Eclipse+MyEclipse開發(fā)JSP創(chuàng)建JSP使用Eclipse+MyEclipse開發(fā)JSP部署 Web 模塊使用Eclipse+MyEclipse開發(fā)JSP啟動(dòng)Web 服務(wù)器使用Eclipse+MyEclipse開發(fā)JSP運(yùn)行JSP總結(jié)C/S與B/S體系結(jié)構(gòu)的不同靜態(tài)Web與動(dòng)態(tài)Web的不同HTTP協(xié)議的兩種請(qǐng)求信息的方法HTTP

12、協(xié)議的特點(diǎn)JSP工作原理、生命周期、優(yōu)點(diǎn)Web 應(yīng)用程序開發(fā)過程Web 服務(wù)器搭建與開發(fā)環(huán)境配置MyEclipse的使用第2章 Java程序設(shè)計(jì)基礎(chǔ)回顧 Web應(yīng)用演化 HTTP協(xié)議 JSP工作原理、生命周期 Web 應(yīng)用程序開發(fā)過程 Web 服務(wù)器搭建:JDK+Tomcat Web開發(fā)環(huán)境的MyEclipse使用“抽象”的設(shè)計(jì)實(shí)例:開發(fā)一個(gè)商品管理系統(tǒng)系統(tǒng)設(shè)計(jì)基本步驟:劃定系統(tǒng)邊界明確系統(tǒng)功能抽象系統(tǒng)范圍內(nèi)的實(shí)體實(shí)例設(shè)計(jì):具有權(quán)限的管理員對(duì)商品進(jìn)行管理。功能包括對(duì)商品的增加、刪除、修改、查詢等,以及用戶權(quán)限管理。商品,用戶。抽象實(shí)體類系統(tǒng)設(shè)計(jì)一般分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)重點(diǎn)完成的抽象

13、活動(dòng),首先是將現(xiàn)實(shí)事物轉(zhuǎn)化為計(jì)算機(jī)語言所能表達(dá)的形式,即將系統(tǒng)范圍內(nèi)的實(shí)體事物抽象為實(shí)體類。實(shí)例:設(shè)計(jì)商品管理系統(tǒng)的實(shí)體類(重點(diǎn)描述屬性)。Goods類User類一般重寫繼承自O(shè)bject類的toString()方法。集合類的使用集合類對(duì)象描述一些對(duì)象的集合。數(shù)據(jù)庫(kù)里使用表來描述一些記錄的集合,Java里使用集合類對(duì)象來描述一些對(duì)象的集合。JDK 5.0之后注意泛型的使用。使用for循環(huán)或增強(qiáng)的for循環(huán)對(duì)集合進(jìn)行遍歷。封裝業(yè)務(wù)功能系統(tǒng)業(yè)務(wù)功能,一般圍繞上述實(shí)體發(fā)生,可根據(jù)不同實(shí)體設(shè)計(jì)不同業(yè)務(wù)接口。接口封裝了不同實(shí)體的各種行為(方法),設(shè)計(jì)接口其實(shí)是將現(xiàn)實(shí)活動(dòng)轉(zhuǎn)化為計(jì)算機(jī)語言所能表達(dá)的形式,此

14、時(shí)只是高度抽象,并未具體實(shí)現(xiàn)。實(shí)例:設(shè)計(jì)商品管理系統(tǒng)的數(shù)據(jù)訪問功能接口。IGoodsDAO商品數(shù)據(jù)訪問接口IUserDAO用戶數(shù)據(jù)訪問接口DAO(Data Access Object),數(shù)據(jù)訪問接口,用于封裝對(duì)數(shù)據(jù)的操作行為?;诙鄳B(tài)機(jī)制實(shí)現(xiàn)接口接口設(shè)計(jì)的作用確定系統(tǒng)功能實(shí)現(xiàn)分工開發(fā)增強(qiáng)系統(tǒng)可擴(kuò)展性實(shí)例:使用接口編寫測(cè)試類,同時(shí)實(shí)現(xiàn)接口。GoodsDAOImpl商品數(shù)據(jù)訪問實(shí)現(xiàn)類UserDAOImpl用戶數(shù)據(jù)訪問實(shí)現(xiàn)類項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)項(xiàng)目概述系統(tǒng)設(shè)計(jì)需求分析總體設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)項(xiàng)目概述 BBS論壇,是電子商務(wù)網(wǎng)站中一種常見的功能,它為上網(wǎng)用戶提供了一個(gè)自由的討

15、論區(qū)。用戶可以根據(jù)需要在論壇上發(fā)表文章,提出問題并表達(dá)自己的觀點(diǎn),俗稱為發(fā)帖子、或者“灌水”。與此同時(shí),上網(wǎng)的用戶也可以在論壇中看到其他人發(fā)表的文章,并能夠?qū)υ撐恼逻M(jìn)行回復(fù)。項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)系統(tǒng)設(shè)計(jì)需求分析項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)系統(tǒng)設(shè)計(jì)總體設(shè)計(jì)業(yè)務(wù)流程分析項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)系統(tǒng)設(shè)計(jì)總體設(shè)計(jì)功能模塊設(shè)計(jì)會(huì)員注冊(cè)會(huì)員登錄版塊查閱文章查閱發(fā)表新文章回復(fù)文章項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)概念設(shè)計(jì)(略):ER圖邏輯設(shè)計(jì)項(xiàng)目案例網(wǎng)上論壇BBS系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)概念設(shè)計(jì)(略):ER圖邏輯設(shè)計(jì)物理設(shè)計(jì)項(xiàng)目設(shè)計(jì)開發(fā)思路實(shí)體類設(shè)計(jì)User類、Board類、Topic類、Reply類數(shù)據(jù)訪問

16、接口設(shè)計(jì)UserDao接口、BoardDao接口、TopicDao接口、ReplyDao接口實(shí)現(xiàn)接口UserDaoImpl實(shí)現(xiàn)類、BoardDaoImpl實(shí)現(xiàn)類、TopicDaoImpl實(shí)現(xiàn)類、ReplyDaoImpl實(shí)現(xiàn)類總結(jié)抽象是將現(xiàn)實(shí)世界轉(zhuǎn)化為計(jì)算機(jī)語言的過程。使用封裝、繼承、多態(tài)特點(diǎn)完成系統(tǒng)的概要設(shè)計(jì)。對(duì)數(shù)據(jù)的操作經(jīng)常會(huì)用到集合類。第3章 網(wǎng)頁基礎(chǔ)目標(biāo)HTML文檔的基本結(jié)構(gòu)文字格式標(biāo)記表單的使用表格布局項(xiàng)目符號(hào)列表CSS基礎(chǔ)DIV+CSS布局JavaScript表單驗(yàn)證HTML文檔的基本結(jié)構(gòu)HTML文檔是一種純文本格式的文件,基本結(jié)構(gòu)為: 網(wǎng)頁的標(biāo)題 網(wǎng)頁的內(nèi)容 文字格式標(biāo)記標(biāo)記設(shè)置文

17、字不同的大小、字體、字型、色彩。設(shè)置文字大小的格式為: 被設(shè)置的文字 超鏈接鏈接到同一目錄內(nèi)的網(wǎng)頁文件 熱點(diǎn)文本 鏈接到下一級(jí)目錄中的網(wǎng)頁文件 熱點(diǎn)文本 鏈接到上一級(jí)目錄中的網(wǎng)頁文件 熱點(diǎn)文本 鏈接到根目錄中的網(wǎng)頁文件 熱點(diǎn)文本 表格表格的標(biāo)記為,行的標(biāo)記為,表項(xiàng)的標(biāo)記為。格式為: 表頭1 表頭2 表項(xiàng)1 表項(xiàng)2 表項(xiàng)1 表項(xiàng)2 表格應(yīng)用【】表單在網(wǎng)頁中,通過表單交流和反饋信息。格式為: action 屬性規(guī)定當(dāng)提交表單時(shí),向何處發(fā)送表單數(shù)據(jù)。method 屬性規(guī)定以什么方法發(fā)送表單數(shù)據(jù)。表單表單示例: 用戶名: 密 碼: 下拉列表框 多行文本框劉德華張學(xué)友郭富城黎明編輯框默認(rèn)顯示的內(nèi)容 表單

18、標(biāo)記常用屬性如下:屬性type可設(shè)置選擇鈕的類型屬性value可設(shè)置該選擇鈕的控制初值,用以告訴表單制作者選擇結(jié)果屬性checked表示是否為缺省選中項(xiàng)屬性name屬性是控制名,同一組的選擇鈕的控制名是一樣的。 表格與表單的結(jié)合應(yīng)用【】表格布局表格表格布局表格布局是傳統(tǒng)的布局方式。中心思想:設(shè)計(jì)網(wǎng)頁第一步首先就是進(jìn)行頁面布局,而不是填寫內(nèi)容。主要思路是:縱向:表格的堆砌橫向:表格的嵌套 項(xiàng)目符號(hào)列表標(biāo)記和表項(xiàng)標(biāo)記建立無序列表。格式為: 第一個(gè)列表項(xiàng) 第二個(gè)列表項(xiàng) 層疊樣式表CSS簡(jiǎn)介CSS(Cascading Style Sheet,“層疊樣式表”或“級(jí)聯(lián)樣式表”)是一組格式設(shè)置規(guī)則,用于控制

19、Web頁面的外觀。內(nèi)嵌樣式內(nèi)部樣式表外部樣式表CSS的應(yīng)用DIV+CSS布局DIV層DIV+CSS布局DIV+CSS布局是目前流行的布局方式。主要思路:設(shè)計(jì)網(wǎng)頁第一步首先就是進(jìn)行頁面抽象,將網(wǎng)頁內(nèi)容歸類劃分為不同的DIV層:DIV層也可以發(fā)生嵌套,這種嵌套可以理解為父層與子層的繼承關(guān)系,父層的CSS樣式會(huì)作用于子層:JavaScriptJavaScript function check() if(1.value=) alert(請(qǐng)輸入姓名); return false; return true; 第4章 JSP的頁面元素第一個(gè)JSP程序第一個(gè)JSP程序第一個(gè)JSP程序 第一個(gè)JSP程序JSP頁

20、面元素 -1靜態(tài)內(nèi)容指 令表達(dá)式腳本代碼JSP 頁面HTML靜態(tài)文本以“ ” 結(jié)束。如:聲 明動(dòng)作.如:注釋JSP 頁面元素 -2聲明腳本代碼指令JSP 頁面構(gòu)成 JSP頁面構(gòu)成早上好!下午好!靜態(tài)內(nèi)容表達(dá)式注釋動(dòng)作元素腳本代碼注釋JSP注釋方式:Java注釋方式:指令元素指令元素表現(xiàn)形式如下: JSP指令元素主要有三種類型的指令:includepagetaglibPage指令page 指令用于設(shè)置 JSP 頁面的屬性page 指令屬性languageimportbuffererrorPageisErrorPagePage指令errorPage示例字符串str的長(zhǎng)度為錯(cuò)誤處理頁面錯(cuò)誤信息Inc

21、lude指令作用:在JSP網(wǎng)頁中插入其他文件。方法一:方法二:動(dòng)作% for(int i = 1; i font size=“”Hello JSPInclude指令示例腳本元素JSP 腳本元素包括:JSP 腳本元素表達(dá)式腳本代碼聲明聲明%!public int fact(int j) int result = 1;for(int i = 1; i 表達(dá)式 JSP表達(dá)式 PI 的值: 100,99中最大的值 : 100,99中最小的值 : 3+2-5的值 : (3+2)=5的值 : (3+2)!=5的值 :表達(dá)式腳本代碼 以直角三角形的形式顯示數(shù)字 % for(int i=1;i10;i+) f

22、or(int j=1;j=i;j+) out.println(j); out.println(); %腳本代碼scriptlet%int a=10;int b=20;out.println(a = +a+);out.println(b = +b+);out.println(a + b = + (a+b) +);out.println(a - b = + (a-b) +);out.println(a * b = + (a*b) +);out.println(b / a = + (b/a) +);%腳本代碼% for(int i = 0; i % for(int j = 0; j 腳本代碼體會(huì)下列

23、兩條語句的不同聲明成員變量與腳本代碼變量的區(qū)別綜合實(shí)例使用JSP聲明和Scriptlet及表達(dá)式的聯(lián)合使用將整數(shù)金額自動(dòng)轉(zhuǎn)化為兩位小數(shù)的金額 轉(zhuǎn)化前的金額轉(zhuǎn)化后的金額 第5章 JSP內(nèi)置對(duì)象回顧JSP 腳本元素包括:表達(dá)式、腳本代碼 和聲明JSP 表達(dá)式包括在 標(biāo)簽內(nèi), JSP腳本代碼包括在內(nèi), JSP聲明包括在內(nèi)JSP 指令有 page、include 和 taglib指令,JSP 指令包括在 標(biāo)簽內(nèi)page 指令用于設(shè)置 JSP 頁面的屬性回顧 以直角三角形的形式顯示數(shù)字 % for(int i=1;i10;i+) for(int j=1;j=i;j+) out.println(j); o

24、ut.println(); %例題: % for(int i=1;i10;i+) for(int j=1;j 本章目標(biāo)了解內(nèi)置對(duì)象的分類及組成運(yùn)用輸入輸出對(duì)象:request、response 和 out運(yùn)用作用域通信對(duì)象:session、application和pageContext理解 Servlet 相關(guān)對(duì)象:page 和 config理解錯(cuò)誤對(duì)象:exception內(nèi)置對(duì)象介紹在JSP中,因?yàn)閷?duì)某些對(duì)象已經(jīng)做了聲明,不像一般Java對(duì)象那樣用”new”去獲取實(shí)例,而是可以直接在JSP頁面使用的對(duì)象。這些對(duì)象是在JSP頁面初始化時(shí)生成的。稱這些對(duì)象為內(nèi)置對(duì)象或者隱含對(duì)象(Implicit

25、 Object)。內(nèi)置對(duì)象介紹JSP 頁面內(nèi)置對(duì)象客戶端響應(yīng)請(qǐng)求 響應(yīng)請(qǐng)求服務(wù)器內(nèi)置對(duì)象介紹簡(jiǎn)單示例 內(nèi)置對(duì)象分類內(nèi)置對(duì)象輸入輸出對(duì)象作用域通信對(duì)象Servlet 對(duì)象錯(cuò)誤對(duì)象requestresponseoutsessionpageContextapplicationpageconfigexceptionrequest對(duì)象表示客戶端對(duì)網(wǎng)頁的請(qǐng)求使用 HTTP 協(xié)議處理客戶端的請(qǐng)求JSP 頁面request 對(duì)象客戶端請(qǐng)求信息表示并存儲(chǔ)客戶端的請(qǐng)求請(qǐng)求服務(wù)器request對(duì)象request對(duì)象常用方法String getParameter(String name) 根據(jù)頁面表單組件名稱獲取請(qǐng)求

26、頁面提交數(shù)據(jù)String getParameterValues (String name) 獲取頁面請(qǐng)求中一個(gè)表單組件對(duì)應(yīng)多個(gè)值時(shí)的用戶的請(qǐng)求數(shù)據(jù)request對(duì)象100request對(duì)象request對(duì)象request對(duì)象 大風(fēng)車 最喜愛的節(jié)目是:%for(int i = 0; i ; request對(duì)象客戶端向服務(wù)器發(fā)送數(shù)據(jù)時(shí),有Get和Post方法:Post方法,如:提交formGet方法,如:/s?wd=jsprequest對(duì)象request對(duì)象的其他方法獲取系統(tǒng)信息獲取請(qǐng)求行信息獲取請(qǐng)求標(biāo)頭信息管理請(qǐng)求作用域內(nèi)的屬性request.setAttribute(String name,

27、Object object)request.getAttribute(String name)request.removeAttribute(String name)response對(duì)象response對(duì)象和request對(duì)象的性質(zhì)相反,它代表的是對(duì)客戶端的響應(yīng),也就是說可以通過response對(duì)象來組織發(fā)送到客戶端的數(shù)據(jù)。JSP 頁面response 對(duì)象客戶端從服務(wù)器中檢索的信息 存儲(chǔ)信息,以在響應(yīng)客戶端請(qǐng)求時(shí)發(fā)送此信息響應(yīng)服務(wù)器response對(duì)象設(shè)置響應(yīng)報(bào)頭setHeader方法 setContentType方法 response重定向sendRedirect方法response對(duì)象r

28、esponse重定向response.sendRedirect(“目標(biāo).jsp”);轉(zhuǎn)向request.getRequestDispatcher(“目標(biāo).jsp).forward(request,response);思考:什么時(shí)候request對(duì)象失效?108out對(duì)象out是向客戶端的輸出流進(jìn)行寫操作的對(duì)象。在JSP頁面中可以用out對(duì)象把除腳本以外的所有信息發(fā)送到客戶端的瀏覽器。使用 print() 和 println() 方法JSP 頁面out 對(duì)象客戶端創(chuàng)建輸出流創(chuàng)建輸出流以顯示信息 請(qǐng)求輸出流在網(wǎng)頁上顯示輸出流服務(wù)器session對(duì)象Web 服務(wù)器為單個(gè)用戶發(fā)送的多個(gè)請(qǐng)求創(chuàng)建會(huì)話存儲(chǔ)

29、有關(guān)用戶會(huì)話的所有信息session 對(duì)象最常用的方法有:void setAttribute(String name,Object value) 以鍵/值的方式,將一個(gè)對(duì)象的值存放到session 中 Object getAttribute(String name)根據(jù)名稱去獲取session中存放對(duì)象的值session對(duì)象 application對(duì)象應(yīng)用程序的 JSP 頁面組合起來形成一個(gè)應(yīng)用程序所有JSP頁面,所有客戶端都共享application對(duì)象application對(duì)象最常用的方法有:void setAttribute(String name,Object value) 以鍵/值的

30、方式,將一個(gè)對(duì)象的值存放到application中Object getAttribute(String name) 根據(jù)名稱去獲取application中存放對(duì)象的值application對(duì)象 其他內(nèi)置對(duì)象pageContext對(duì)象管理頁面作用域中的屬性pageContext對(duì)象最常用的方法有:void setAttribute(String name,Object value) 以鍵/值的方式,將一個(gè)對(duì)象的值存放到pageContext中Object getAttribute(String name) 根據(jù)名稱去獲取pageContext中存放對(duì)象的值 示例購(gòu)物車login.jsp 登錄 用

31、戶名 密碼 chklogin.jsp 登錄檢驗(yàn)error.jsp 登錄失敗 用戶名或密碼不正確!請(qǐng)重新登錄show.jsp(1) 顯示所有書籍show.jsp(2) 顯示所有書籍 序號(hào)書名 %for (int i = 0; i a href=detail.jsp?bookId= detail.jsp(1)顯示某書詳細(xì)信息%int bookId = Integer.parseInt(request.getParameter(bookId);ArrayList bookList = (ArrayList)session.getAttribute(bookList);String bookName

32、= ;for (int i = 0; i detail.jsp(2)顯示某書詳細(xì)信息的詳細(xì)信息 input type=hidden value=“ name=bookIdBuy / input type=hidden value=“ name=bookNameBuy / 繼續(xù)選購(gòu) buy.jsp 將選購(gòu)書籍放入集合中已放入購(gòu)物車結(jié)帳付款繼續(xù)選購(gòu)checkout.jsp(1)顯示選購(gòu)書籍并結(jié)帳 選購(gòu)書名 %for (int i = 0; i checkout.jsp(2)顯示選購(gòu)書籍并結(jié)帳 銀行帳號(hào): 帳號(hào)密碼: ending.jsp & invalidate.jsp安全離開已安全離開示例分頁/

33、index.jsp%String curPage = request.getParameter(page); int start = (Integer.parseInt(curPage) - 1) * 5; for(int i = start; i start + 5; i+) out.println( + data.get(i) + ); % 上一頁 a href=tunePage.jsp?curPage=&action=previous上一頁 分頁/續(xù)上index.jsp 下一頁 a href=tunePage.jsp?curPage=&action=next下一頁 分頁/tunePage

34、.jspCookieCookie類提供了3個(gè)方法從客戶端獲取存儲(chǔ)在計(jì)算機(jī)上的cookie信息:request.getCookies();cookieName.getName();cookieName.getValue();config對(duì)象config對(duì)象jspconfig/jspconfig.jspLocalHostMyServerjspconfig/jspconfig.jsp第6章 JDBC目標(biāo)了解JDBC體系結(jié)構(gòu)通過JDBC-ODBC橋驅(qū)動(dòng)程序連接數(shù)據(jù)庫(kù)檢索和瀏覽數(shù)據(jù)庫(kù)中的數(shù)據(jù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的更新使用預(yù)編譯語句操作數(shù)據(jù)庫(kù)JDBC簡(jiǎn)介JDBC (Java DataBase Connectivit

35、y)是Java數(shù)據(jù)庫(kù)連接的簡(jiǎn)稱;由一組用Java語言編寫的類和接口組成,位于java.sql包中;提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口(API)。JDBC簡(jiǎn)介 Java 程序 JDBC 驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)SQL 命令 結(jié)果 SQL包接口名 說明 DriverManager此類用于加載和卸載各種驅(qū)動(dòng)程序并建立與數(shù)據(jù)庫(kù)的連接Connection此接口表示與數(shù)據(jù)的連接Statement此接口用于執(zhí)行 SQL 語句并將數(shù)據(jù)檢索到 ResultSet 中 PreparedStatement此接口用于執(zhí)行預(yù)編譯的 SQL 語句 ResultSet此接口表示了查詢出來的數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)果集SQL包開 始 導(dǎo)入 java

36、.sql包 加載并注冊(cè)驅(qū)動(dòng)程序 創(chuàng)建 Connection 對(duì)象 創(chuàng)建PreparedStatement 對(duì)象 執(zhí)行語句 關(guān)閉ResultSet 對(duì)象 關(guān)閉Statement對(duì)象 關(guān)閉連接 結(jié)束 使用ResultSet對(duì)象 Import java.sql.*;Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection con = DriverManager.getConnection(“jdbc:odbc:數(shù)據(jù)源”);PreparedStatement psmt = con.prepareStatement(sql);ResultSet r

37、s = psmt.executeQuery( );int num = psmt.executeUpdate( );rs.close(); psmt.close(); con.close();連接數(shù)據(jù)庫(kù)在SQL Server中創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表“管理工具”-”數(shù)據(jù)源(ODBC)”,配置數(shù)據(jù)源 import java.sql.*; Connection conn = null; try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);String url = “jdbc:odbc:study”; conn = DriverManager.getConne

38、ction(url, “sa”, “sa”);System.out.println(數(shù)據(jù)庫(kù)連接成功); catch(SQLException ex1) ex1.printStackTrace(); finally try if(conn != null) conn.close(); catch(SQLException ex2) ex2.printStackTrace(); com.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver:/localhost:1433;DataBaseName=bbs 檢索數(shù)據(jù)庫(kù)(1)s

39、elect 員工編號(hào)員工姓名員工職務(wù) 所屬部門基本工資 檢索數(shù)據(jù)庫(kù)(2)讀取字段名ResultSetMetaData rsmd = rs.getMetaData();int numberOfColumn = rsmd.getColumnCount(); %for (int i = 1; i = cols; i+) out.print(“ + rsmd.getColumnLabel(i) + “”); % %for(int i = 1; i 檢索數(shù)據(jù)庫(kù)(3)可滾動(dòng)的數(shù)據(jù)集 % stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

40、 ResultSet.CONCUR_READ_ONLY); String sql = select * from 員工檔案; rs = stmt.executeQuery(sql); if (request.getParameter(row) != null) String row = request.getParameter(row); if (row.equals(first) ) rs.first(); else if (row.equals(last) rs.last();else if (Integer.parseInt(row) 首記錄a href=ScrollQuery.jsp?

41、row=上一條a href=ScrollQuery.jsp?row=下一條尾記錄更新數(shù)據(jù)庫(kù) executeUpdate() Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; try conn = DriverManager.getConnection(url, user, password); String sql = insert into 員工檔案 values(?,?,?,?,?); psmt = conn.prepareStatement(sql); psmt.setString(1,

42、 “11”); psmt.setString(2, “jake”); psmt.setString(3, “manager”); psmt.setString(4, “研發(fā)部”); psmt.setString(5, “2000”); int num = psmt.executeUpdate(); 使用事務(wù)在數(shù)據(jù)庫(kù)系統(tǒng)中,可以把一系列對(duì)數(shù)據(jù)源的操作作為一個(gè)整體來對(duì)待,這個(gè)整體稱為一次事務(wù)。事務(wù)開始后,如果事務(wù)中的所有操作都能正確執(zhí)行,則將這些操作全部施加到數(shù)據(jù)庫(kù)上;否則,就取消所有的操作,這時(shí),數(shù)據(jù)庫(kù)中的數(shù)據(jù)和執(zhí)行事務(wù)前的數(shù)據(jù)是一樣的。使用事務(wù)conn = DriverManager.getC

43、onnection(url, user, password);conn.setAutoCommit(false);/關(guān)閉自動(dòng)提交模式String sql = insert into 員工檔案 values(?,?,?,?,?);psmt=conn.prepareStatement(sql);psmt.setString(1,20);psmt.setString(2,段金鎖);psmt.setString(3,經(jīng)理助理);psmt.setString(4,研發(fā)部);psmt.setString(5,2000);psmt.executeUpdate();psmt=conn.prepareState

44、ment( update 員工檔案 set 基本工資=3800 where 員工姓名=jake);psmt.executeUpdate();mit();/正常則提交事務(wù),出現(xiàn)異常則回滾conn.rollback()conn.setAutoCommit(true); 思考在查詢或更新數(shù)據(jù)庫(kù)的每一次操作中,都要在連接和關(guān)閉數(shù)據(jù)庫(kù)的語句中重復(fù)部分代碼,合適嗎?import java.sql.*;try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); String url = “jdbc:odbc:study”; Connection conn = Dri

45、verManager.getConnection(url, “sa”, “sa”); catch(ClassNotFoundException ex1) System.out.println(ex1.getMessage); catch(SQLException ex2) System.out.println(ex2.getMessage); finally try if(conn != null) conn.close(); catch(SQLException ex) out.println(ex.getMessage); 數(shù)據(jù)庫(kù)連接重用 JSP頁面1底層類(可重用)JSP頁面2BaseD

46、ao 數(shù)據(jù)訪問層工具類/BaseDao.java類封裝了數(shù)據(jù)庫(kù)的連接和關(guān)閉操作package dao.impl;import java.sql.*;public class BaseDao private static final String DRIVER_CLASS =com.microsoft.jdbc.sqlserver.SQLServerDriver; private static final String DATABASE_URL = jdbc:microsoft:sqlserver:/localhost:1433; + DataBaseName=bbs; private stat

47、ic final String DATABASE_USRE = sa; private static final String DATABASE_PASSWORD = sa; BaseDao 數(shù)據(jù)訪問層工具類/返回Connection對(duì)象 public static Connection getConnection() Connection conn = null; try Class.forName(DRIVER_CLASS); conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USRE, DATABASE_PASSWORD)

48、; catch (ClassNotFoundException ex) System.out.println(ex.getMessage(); catch (SQLException ex) System.out.println(ex.getMessage(); return conn; BaseDao 數(shù)據(jù)訪問層工具類public static void closeConnection(Connection conn) try if (conn != null) conn.close(); catch (SQLException ex) System.out.println(ex.getMe

49、ssage(); public static void closePreparedStatement(PreparedStatement psmt) try if (psmt != null) psmt.close(); catch (SQLException ex) System.out.println(ex.getMessage(); public static void closeResultSet(ResultSet rs) try if (rs != null) rs.close(); catch (SQLException ex) System.out.println(ex.get

50、Message(); 利用BaseDao類連接數(shù)據(jù)庫(kù) JSP頁面1調(diào)用 結(jié)果 底層類(可重用)JSP頁面2利用BaseDao類連接數(shù)據(jù)庫(kù) 員工編號(hào) 員工姓名 員工職務(wù) 所屬部門 基本工資 項(xiàng)目中BaseDao類的設(shè)計(jì)public int executeSQL(String preparedSql, String param) Connection conn = null;PreparedStatement pstmt = null;int num = 0;try conn = getConnection(); pstmt = conn.prepareStatement(preparedSql)

51、; if (param != null) for (int i = 0; i param.length; i+) pstmt.setString(i + 1, parami); num = pstmt.executeUpdate(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); finally closeAll(conn, pstmt, null); return num;/ UserDaoImplpublic int addUser(User

52、 user) String sql = insert into TBL_USER “ + (uname,upass,gender,head,regTime) “ + “ values(?,?,?,?,?); String param = user.getUName(), user.getUPass(), user.getGender(),user.getHead(),new Date(); return this.executeSQL(sql, param); 企業(yè)級(jí)開發(fā)對(duì)Dao層的要求 企業(yè)級(jí)開發(fā)需要穩(wěn)健和高效的數(shù)據(jù)訪問層完成對(duì)數(shù)據(jù)庫(kù)的增刪改查操作能夠處理數(shù)據(jù)庫(kù)發(fā)生的各種錯(cuò)誤可以靈活的修改配

53、置提供方便使用的工具高性能數(shù) 據(jù) 庫(kù)請(qǐng)求響應(yīng)操作結(jié)果要求高效、穩(wěn)健的數(shù)據(jù)訪問層打開連接,操作數(shù)據(jù)庫(kù),關(guān)閉連接多次重復(fù)操作數(shù)據(jù)庫(kù)連接池普通電話 建立連接,等待回應(yīng)熱線電話 已建立連接連接已連接開始通話開始通話已連接,直接通話連接中流程框架圖標(biāo)使用規(guī)范 連接池中的連接數(shù) 據(jù) 庫(kù)想要獲得連接返回一個(gè)連接返回一個(gè)已連接好的空閑連接應(yīng)用程序從連接池中獲得連接連接池是由容器提供的,用來管理池中連接對(duì)象應(yīng)用程序連接池Connection1Connection2Connection3數(shù)據(jù)源簡(jiǎn)介 數(shù)據(jù)源(DataSource)javax.sql.DataSource接口負(fù)責(zé)建立與數(shù)據(jù)庫(kù)的連接從Tomcat的數(shù)據(jù)

54、源獲得連接把連接保存在連接池中應(yīng)用程序Connection1Connection2Connection3數(shù) 據(jù) 庫(kù)想要獲得連接返回一個(gè)連接連接池連接池中的連接對(duì)象是由誰創(chuàng)建的呢?JNDI介紹 如何獲得DataSource對(duì)象數(shù)據(jù)源由Tomcat提供,不能在程序中創(chuàng)建實(shí)例使用JNDI獲得DataSource引用什么是JNDIJNDI(Java Naming and Directory Interface,Java命名和目錄接口)是一組在Java應(yīng)用中訪問命名和目錄服務(wù)的APIjavax.namming.Context接口的lookup()方法應(yīng)用程序jdbc/d1jdbc/d2數(shù)據(jù)源數(shù)據(jù)源名稱C

55、onnectioncontext.lookup( jdbc/d1 )使用JNDI獲取連接對(duì)象 import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;public class BaseDao public static Connection getConnection() try Context ic = new InitialContext(); DataSource source = (Data

56、Source)ic.lookup(java:comp/env/jdbc/bbs); Connection conn = source.getConnection(); return conn; catch (SQLException e1) e1.printStackTrace(); catch (NamingException e2) e2.printStackTrace(); return null; 使用JNDI和數(shù)據(jù)源要導(dǎo)入的包通過Context、DataSource獲取Connection對(duì)象分為兩部分java:comp/env為JavaEE默認(rèn)路徑j(luò)dbc/bbs為DataSour

57、ce名JNDI的配置name指定Resource的JNDI名稱auth指定管理Resource的Manager(Container:由容器創(chuàng)建和管理|Application:由Web應(yīng)用創(chuàng)建和管理)type指定Resource所屬的Java類maxActive指定連接池中處于活動(dòng)狀態(tài)的數(shù)據(jù)庫(kù)連接的最大數(shù)目maxIdle指定連接池中處于空閑狀態(tài)的數(shù)據(jù)庫(kù)連接的最大數(shù)目maxWait指定連接池中的連接處于空閑的最長(zhǎng)時(shí)間,超過這個(gè)時(shí)間會(huì)拋出異常,取值為-1,表示可以無限期等待 Tomcat的conf/context.xml中的配置 JNDI的配置 加入數(shù)據(jù)庫(kù)驅(qū)動(dòng)文件把數(shù)據(jù)庫(kù)驅(qū)動(dòng)的.jar文件,加入到T

58、omcat的commonlib中應(yīng)用程序的web.xml文件的配置在web.xml中配置 jdbc/bbs javax.sql.DataSource Container 指定JNDI的名字,與元素中的name一致指定引用資源的類名,與元素中的type一致指定管理所引用資源的管理者與元素中的auth一致總結(jié)使用JDBC技術(shù)實(shí)現(xiàn)數(shù)據(jù)訪問層(Dao) UserDaoImpl BoardDaoImplBaseDao TopicDaoImpl ReplyDaoImpl第7章 JavaBean在JSP中的應(yīng)用什么是面向?qū)ο??三大面向?qū)ο筇匦裕悍庋b、繼承和多態(tài)類是對(duì)相似事物的抽象。類的本質(zhì)作用:可重用 Ba

59、seDao類BaseDao類對(duì)數(shù)據(jù)庫(kù)操作行為的抽象public class BaseDao private static final String DRIVER_CLASS = “.; private static final String DATABASE_URL = .; private static final String DATABASE_USRE = .; private static final String DATABASE_PASSWORD = .; public static Connection getConnection() public static void clo

60、seConnection(Connection conn) public static void closePreparedStatement(PreparedStatement psmt) public static void closeResultSet(ResultSet rs) JavaBean思想小孩的積木 面向?qū)ο蟮木幊掏ǔR灶惖膶?shí)例化對(duì)象為基礎(chǔ)進(jìn)行驅(qū)動(dòng)的。使用JavaBean將面向?qū)ο缶幊碳夹g(shù)引入到JSP腳本中。積木塊組裝成品JavaBean組件組件間協(xié)作應(yīng)用程序“用戶登錄” 體會(huì)抽象問題1:有什么實(shí)體?問題3:該實(shí)體應(yīng)具有什么功能?答1:“用戶”實(shí)體答3:“用戶”具有“判斷是否

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論