Java Web程序設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(微課版)教案 項(xiàng)目4、5 JSP內(nèi)置對(duì)象、JSP內(nèi)置對(duì)象_第1頁(yè)
Java Web程序設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(微課版)教案 項(xiàng)目4、5 JSP內(nèi)置對(duì)象、JSP內(nèi)置對(duì)象_第2頁(yè)
Java Web程序設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(微課版)教案 項(xiàng)目4、5 JSP內(nèi)置對(duì)象、JSP內(nèi)置對(duì)象_第3頁(yè)
Java Web程序設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(微課版)教案 項(xiàng)目4、5 JSP內(nèi)置對(duì)象、JSP內(nèi)置對(duì)象_第4頁(yè)
Java Web程序設(shè)計(jì)項(xiàng)目實(shí)戰(zhàn)(微課版)教案 項(xiàng)目4、5 JSP內(nèi)置對(duì)象、JSP內(nèi)置對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

767-項(xiàng)目四JSP內(nèi)置對(duì)象主題任務(wù)4.1Java中連接數(shù)據(jù)庫(kù)1課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)1.熟悉JDBC3.掌握J(rèn)DBC的主要操作類和接口4.熟悉資源文件中配置數(shù)據(jù)庫(kù)能力目標(biāo)應(yīng)用JDBC連接數(shù)據(jù)庫(kù)育人目標(biāo)培養(yǎng)學(xué)生具有網(wǎng)絡(luò)安全意識(shí),提升學(xué)生民族自豪感和愛國(guó)熱情教學(xué)重點(diǎn)應(yīng)用JDBC連接數(shù)據(jù)庫(kù)教學(xué)難點(diǎn)應(yīng)用JDBC連接數(shù)據(jù)庫(kù)教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)當(dāng)我們登錄QQ時(shí),需要先注冊(cè),注冊(cè)以后,我們的個(gè)人信息放在什么地方呢,從而引出本節(jié)課的內(nèi)容。二、教學(xué)實(shí)施(80分鐘).1.任務(wù)演示本任務(wù)使用Java語言驅(qū)動(dòng)MySQL數(shù)據(jù)庫(kù),命名為“jiaqicms”數(shù)據(jù)庫(kù)中的表名為“user”的一共的記錄數(shù)打印到控制臺(tái),如圖所示2.知識(shí)準(zhǔn)備(1)JDBC簡(jiǎn)介(2)JDBC的主要操作類及接口Driver接口DriverManager類Connection接口Statement接口PreparedStatement接口resultSet接口課堂練習(xí)(教師演示、學(xué)生操作)課堂練習(xí)1:Java中數(shù)據(jù)庫(kù)連接,如圖所示。課堂練習(xí)2:實(shí)例化Statement對(duì)象,如圖所示。課堂練習(xí)3:Statement接口的和executeQuery()方法的應(yīng)用。課堂練習(xí)4:PreparedStatement()方法的應(yīng)用。課堂練習(xí)5:next()方法和getXxx()方法的應(yīng)用。3.任務(wù)實(shí)施(教師演示、學(xué)生操作)關(guān)鍵代碼:第一步:加載JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)。(1)下載MySql的jar包(2)將下載得到的文件進(jìn)行解壓(3)Eclipse中使用jar包第二步在包里面加入連接MySQL數(shù)據(jù)庫(kù)的包第三步在Eclipse中點(diǎn)擊項(xiàng)目Project——選擇屬性Propeties。第四步選擇jar包,添加到項(xiàng)目中,如圖所示。第五步數(shù)據(jù)庫(kù)準(zhǔn)備要使用JDBC來驅(qū)動(dòng)數(shù)據(jù)庫(kù),要在MySQL服務(wù)器中創(chuàng)建數(shù)據(jù)庫(kù),這里使用Navicat,創(chuàng)建一名字為“jiaqicms”的數(shù)據(jù)庫(kù),并在數(shù)據(jù)庫(kù)中創(chuàng)建一名字為“user”,具體步驟如下。設(shè)置Navicat連接準(zhǔn)備新建數(shù)據(jù)庫(kù),在本地?cái)?shù)據(jù)庫(kù)執(zhí)行右鍵,然后點(diǎn)擊“新建數(shù)據(jù)庫(kù)”創(chuàng)建名為“id”的字段,選擇類型為“intege”,設(shè)置長(zhǎng)度為3,并且設(shè)置為主鍵,設(shè)置為自動(dòng)遞增創(chuàng)建名為“username”字段點(diǎn)擊保存,在彈出的對(duì)話框中輸入表名“user”,然后點(diǎn)擊“確定”保存以后,可以關(guān)閉對(duì)話框,然后點(diǎn)擊“user”表,在彈出的對(duì)話框中準(zhǔn)備輸入內(nèi)容添加第一條記錄第六步JDBC編程實(shí)現(xiàn)從前面的知識(shí)我們已經(jīng)知道,要操作數(shù)據(jù)庫(kù),首先加載驅(qū)動(dòng),然后創(chuàng)建連接,才能進(jìn)行數(shù)據(jù)的增刪改查操作,最后要關(guān)閉數(shù)據(jù)庫(kù)連接,釋放資源。這里我們將數(shù)據(jù)名為“jiaqicms”中名為“jq_user”表的記錄數(shù)給查詢出來,打印到控制臺(tái)。這里直接給出代碼。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassMysqlDemo{ publicstaticvoidmain(String[]args){ Connectionconn=null; Statementstmt=null; Stringsql="selectcount(*)fromjq_user"; try{ //1.注冊(cè)驅(qū)動(dòng) Class.forName("com.mysql.jdbc.Driver"); //2.獲取連接 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms","root","root"); //3.實(shí)例化Statement對(duì)象 stmt=conn.createStatement(); //System.out.println(stmt); //4.執(zhí)行SQL語句,返回ResultSet結(jié)果集對(duì)象 ResultSetrs=stmt.executeQuery(sql); while(rs.next()){ System.out.println("jq_user表中一共有"+rs.getInt(1)+"行"); } }catch(Exceptione){ e.printStackTrace(); } try{ conn.close(); stmt.close(); }catch(SQLExceptione){ e.printStackTrace(); } }}4.任務(wù)拓展實(shí)際開發(fā)中不建義在Java程序中把連接數(shù)據(jù)庫(kù)的信息寫死,而是寫入到配置文件或資源文件中,這樣方便修改配置文件,而不需要重新編譯程序。在工程src目錄下創(chuàng)建名為”perties”的文件,輸入如下內(nèi)容:driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jiaqicmsusername=rootpassword=root【腳小留心】注意:該XXX.\t"/qfxl0724/article/details/_blank"properties文件,必須放在src文件夾下,不然會(huì)出錯(cuò),而且編譯器不會(huì)直接提示。讀取后綴名為properties的文件,可以通過ResourceBundle類來實(shí)現(xiàn)。ResourceBundle類是java自帶的類,類路徑:java.util.ResourceBundle,主要用來讀取項(xiàng)目中后綴為properties的配置文件。獲取配置文件的名稱,使用getBundle()方法,代碼如下:ResourceBundleresourceBundle=ResourceBundle.getBundle("db");【教你一招】注意,上面代碼中的后綴名不需要書寫。獲取資源文件中的信息:使用getString()方法,比如要讀取數(shù)據(jù)庫(kù)的用戶名,則代碼可以寫為:Stringusername=bundle.getString("username");讀取其他信息,只需要改變getString()方法中的值就可以了。將上面的例子中的配置信息可以寫到perties文件中,Java部分的驅(qū)動(dòng)代碼可以修改為如下。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?JDBC主要操作類和接口,數(shù)據(jù)庫(kù)的連接,加載jar包以及在資源文件中配置數(shù)據(jù)庫(kù)。作業(yè)布置(2分鐘)實(shí)訓(xùn)一實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力7613-項(xiàng)目四JSP內(nèi)置對(duì)象主題任務(wù)4.2數(shù)據(jù)庫(kù)查詢和模糊查詢1課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)1.掌握數(shù)據(jù)庫(kù)的一般查詢2.掌握數(shù)據(jù)庫(kù)的模糊查詢能力目標(biāo)能綜合應(yīng)用JDBC對(duì)數(shù)據(jù)庫(kù)表進(jìn)行查詢育人目標(biāo)培養(yǎng)學(xué)生具有網(wǎng)絡(luò)安全意識(shí),提升學(xué)生民族自豪感和愛國(guó)熱情教學(xué)重點(diǎn)能綜合應(yīng)用JDBC對(duì)數(shù)據(jù)庫(kù)表進(jìn)行查詢教學(xué)難點(diǎn)能綜合應(yīng)用JDBC對(duì)數(shù)據(jù)庫(kù)表進(jìn)行查詢教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)微信、騰訊QQ、郵箱、百度網(wǎng)盤…需要先登錄,登錄時(shí),需要輸入用戶名和密碼,平臺(tái)是如何知道我們輸入的用戶名和密碼是正確的呢,從而引出本節(jié)課的內(nèi)容。二、教學(xué)實(shí)施(80分鐘)1.任務(wù)演示將數(shù)據(jù)庫(kù)名為“jiaqicms”的數(shù)據(jù)庫(kù)中名字為“jq_user”表的第一條記錄的姓名和郵箱信息查詢出來,并打印輸出到控制臺(tái),如圖所示。使用關(guān)鍵字“san”對(duì)名字為“jiaqicms”的數(shù)據(jù)庫(kù)進(jìn)行模糊查詢,將查詢到的記錄中的“uername”字段的內(nèi)容輸出到控制臺(tái),如圖所示。2.知識(shí)準(zhǔn)備(1)使用PreparedStatement接口實(shí)現(xiàn)數(shù)據(jù)查詢(2)使用PreparedStatement接口實(shí)現(xiàn)模糊查詢MySQL中規(guī)定的通配符主要有以下三種:“%”號(hào)通配符:表示任何字符出現(xiàn)任意次數(shù)(可以是0次)“_”通配符:只能匹配單個(gè)字符,不能多也不能少,就是一個(gè)字符。like操作符:指MySQL后面的搜索模式是利用通配符而不是直接相等匹配進(jìn)行比較,如果like后面沒有出現(xiàn)通配符,則在SQL執(zhí)行優(yōu)化時(shí)將like等價(jià)于“=”執(zhí)行。課堂練習(xí)(教師演示、學(xué)生操作)課堂練習(xí)1:對(duì)名為”jq_user”的表進(jìn)行模糊查詢。3.任務(wù)實(shí)施(教師演示、學(xué)生操作)(1)單條或多條記錄的查詢下面通過將jq_user表中姓名為“zhangsan”的記錄打印輸出到控制臺(tái),如果“jq_user”表中有多條記錄,那么都可以打印輸出到控制臺(tái)。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ResourceBundle;publicclassMysqlDemo05{ publicstaticvoidmain(String[]args){ Connectionconn=null; PreparedStatementstmt=null; Stringsql="select*fromjq_userwhereusername=?"; Stringdriver=null; Stringurl=null; Stringusername=null; Stringpassword=null; ResourceBundlebundle=ResourceBundle.getBundle("db"); driver=bundle.getString("driver"); url=bundle.getString("url"); username=bundle.getString("username"); password=bundle.getString("password"); try{ //1.注冊(cè)驅(qū)動(dòng) Class.forName(driver); //2.獲取連接 conn=DriverManager.getConnection(url,username,password); //3.實(shí)例化prepareStatement對(duì)象 stmt=conn.prepareStatement(sql); stmt.setString(1,"zhangsan"); //4.執(zhí)行SQL語句,返回ResultSet結(jié)果集對(duì)象 ResultSetrs=stmt.executeQuery(); while(rs.next()){ System.out.println("姓名:"+rs.getString("username")+""+"郵箱:"+rs.getString("email")); } }catch(Exceptione){ e.printStackTrace(); } try{ conn.close(); stmt.close(); }catch(SQLExceptione){ e.printStackTrace(); } } }運(yùn)行結(jié)果如圖4-28所示:2.模糊查詢模糊查詢主要用在網(wǎng)站的內(nèi)容的搜索功能上,下面代碼實(shí)現(xiàn)對(duì)jq_user表中的數(shù)據(jù)進(jìn)行模糊查詢。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassMysqlDemo06{ publicstaticvoidmain(String[]args){ Stringsql="select*fromjq_userwhereusernamelike?"; try{ Class.forName("com.mysql.jdbc.Driver");//1.注冊(cè)驅(qū)動(dòng) //2.獲取連接Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms","root","root")PreparedStatementpre=conn.prepareStatement(sql);//3.實(shí)例化Statement對(duì)象,進(jìn)行預(yù)編譯 Stringusername="%san%"; pre.setString(1,username); //4.執(zhí)行SQL語句,返回ResultSet結(jié)果集對(duì)象ResultSetrs=pre.executeQuery(); while(rs.next()){ System.out.println("獲取到的姓名為:"+rs.getString("username")); } }catch(Exceptione){ e.printStackTrace(); } } }程序運(yùn)行結(jié)果如圖所示:4.任務(wù)拓展(1)靜態(tài)代碼塊在使用JDBC操作數(shù)據(jù)庫(kù)的時(shí)候,為了增加代碼的通用性,可以將數(shù)據(jù)庫(kù)連接等操作抽象為一個(gè)工具類DBUtils。這里需要用到靜態(tài)代碼塊的知識(shí),什么是靜態(tài)代碼塊呢?靜態(tài)代碼塊是定義在類中,使用關(guān)鍵字\t"/weixin_53999801/article/details/_blank"static修飾的代碼塊,在類加載時(shí)只執(zhí)行一次,無論類在那個(gè)位置,與對(duì)象無關(guān),不論產(chǎn)生多少對(duì)象,靜態(tài)代碼塊只在\t"/weixin_53999801/article/details/_blank"類加載時(shí)執(zhí)行一次,如下是靜態(tài)代碼塊的應(yīng)用。(2)工具類DBUtils有了靜態(tài)代碼塊的知識(shí)后,我們著手把數(shù)據(jù)庫(kù)操作抽成一個(gè)工具類。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?數(shù)據(jù)庫(kù)的一般查詢,通配符,模糊查詢。作業(yè)布置(2分鐘)完成實(shí)訓(xùn)任務(wù)和拓展任務(wù)教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力7620-項(xiàng)目四JSP內(nèi)置對(duì)象主題任務(wù)4.3數(shù)據(jù)庫(kù)的更新操作課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)掌握數(shù)據(jù)庫(kù)的更新操作能力目標(biāo)能靈活對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新育人目標(biāo)培養(yǎng)學(xué)生具有網(wǎng)絡(luò)安全意識(shí),提升學(xué)生民族自豪感和愛國(guó)熱情。教學(xué)重點(diǎn)數(shù)據(jù)庫(kù)的更新教學(xué)難點(diǎn)數(shù)據(jù)庫(kù)的更新教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)數(shù)據(jù)庫(kù)連接以后,可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改、插操作。要對(duì)數(shù)據(jù)進(jìn)行更新操作,可以使用Statement接口完成。該接口中需要Connection接口提供creatStatement()方法進(jìn)行實(shí)例化,進(jìn)而可以實(shí)現(xiàn)相應(yīng)的操作。二、教學(xué)實(shí)施(80分鐘)1.任務(wù)演示本任務(wù)使用Java語言驅(qū)動(dòng)MySQL數(shù)據(jù)庫(kù),命名為“jiaqicms”數(shù)據(jù)庫(kù)中的表名為“user”表中增加數(shù)據(jù)并實(shí)現(xiàn)修改刪除操作,如圖所示。2.知識(shí)準(zhǔn)備JDBC中的Statement對(duì)象用于向數(shù)據(jù)庫(kù)發(fā)送SQL語句,想完成對(duì)數(shù)據(jù)庫(kù)的增刪改查,只需要通過這個(gè)對(duì)象向數(shù)據(jù)庫(kù)發(fā)送增刪改查語句即可。Statement對(duì)象的executeUpdate()方法,用于向數(shù)據(jù)庫(kù)發(fā)送增,刪,改,查的SQL語句,executeUpdate()執(zhí)行完后,將會(huì)返回一個(gè)整數(shù),(即增刪改語句導(dǎo)致了數(shù)據(jù)庫(kù)的記錄數(shù)發(fā)生了變化)。Statement.executeQuery()用于向數(shù)據(jù)庫(kù)發(fā)送查詢語句,executeQuery()方法返回代表查詢結(jié)果的ResultSet對(duì)象。課堂練習(xí)(教師演示、學(xué)生操作)課堂練習(xí)1:使用executeUpdate(Stringsql)方法向數(shù)據(jù)中添加數(shù)據(jù)。課堂練習(xí)2:使用executeUpdate(Stringsql)方法將指定表中的數(shù)據(jù)進(jìn)行刪除。課堂練習(xí)3:使用executeUpdate(Stringsql)方法將指定表中的數(shù)據(jù)進(jìn)行修改3.任務(wù)實(shí)施(教師演示、學(xué)生操作)(1)插入數(shù)據(jù)庫(kù)表記錄。向jq_user表中增加一條新的記錄,編寫一條完整的SQL語句,并通過Statement執(zhí)行。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassMysqlDemo07{publicstaticvoidmain(String[]args)throwsException{ Connectionconn=null; Statementstmt=null; Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms","root","root"); stmt=conn.createStatement(); Stringsql="insertintojq_user(username,password,email,address)values('lier','123','233@','南京路')"; intnum=stmt.executeUpdate(sql); if(num>0){ System.out.println("數(shù)據(jù)插入成功"); conn.close(); stmt.close(); }}}運(yùn)行結(jié)果如下圖所示。(2)修改數(shù)據(jù)庫(kù)表記錄。將jq_user表中id=5的記錄password字段的值修改為“123456”,將address字段的內(nèi)容修改為“上海東路100號(hào)”,對(duì)應(yīng)的程序代碼如下。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassMysqlDemo08{ publicstaticvoidmain(String[]args)throwsException{ Connectionconn=null; Statementstmt=null; Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms","root","root"); stmt=conn.createStatement(); Stringsql="updatejq_userset`password`='123456',`address`='上海東路100號(hào)'whereid=5"; intnum=stmt.executeUpdate(sql); if(num>0){ System.out.println("數(shù)據(jù)修改成功"); conn.close(); stmt.close(); }}}運(yùn)行程序,結(jié)果如下圖所示。3.刪除數(shù)據(jù)庫(kù)表字段。將jq_user表中id=4的記錄給刪除,對(duì)應(yīng)的代碼如下。package.cqcvc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassMysqlDemo09{ publicstaticvoidmain(String[]args)throwsException{ Connectionconn=null; Statementstmt=null; Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms","root","root"); stmt=conn.createStatement(); Stringsql="deletefromjq_userwhereid=4"; intnum=stmt.executeUpdate(sql); if(num>0){ System.out.println("數(shù)據(jù)刪除成功"); conn.close(); stmt.close(); } }}運(yùn)行結(jié)果代碼如下圖所示。4.任務(wù)拓展(1)防止SQL漏洞Statement接口用于處理不帶參數(shù)的靜態(tài)sql語句,PreparedStatement接口可以處理帶參數(shù)的sql語句。Statement中SQL存在漏洞,會(huì)被攻擊導(dǎo)致數(shù)據(jù)泄露SQL會(huì)被拼接or字符。在網(wǎng)站開發(fā)中特別要注意此問題,如果是因?yàn)檫@個(gè)問題,造成網(wǎng)站數(shù)據(jù)泄露造成了損失,就是網(wǎng)站開發(fā)人員的失職。如何規(guī)避此問題呢?我們使用PreparedStatement可以防止SQL注入。PreparedStatement接口防止SQL注入的本質(zhì),把傳遞進(jìn)來的參數(shù)當(dāng)做字符,假設(shè)其中存在轉(zhuǎn)義字符,會(huì)被直接轉(zhuǎn)義。下面通過Statement接口與PreparedStatement接口代碼進(jìn)行的對(duì)比使用Statement接口登錄被SQL注入。使用PreparedStatement接口防止SQL注入從數(shù)據(jù)庫(kù)的jq_user表中知道,我們的password字段沒有為“1”的內(nèi)容,但是這里登陸成功了,這就是SQL的注入。為了防止這種情況,可以使用PreparedStatement接口來實(shí)現(xiàn)用戶登錄防止SQL注入。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?數(shù)據(jù)庫(kù)的更新操作。作業(yè)布置(2分鐘)完成實(shí)訓(xùn)二設(shè)計(jì)信貸數(shù)據(jù)分析可視化平臺(tái)用戶注冊(cè)界面教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力767-項(xiàng)目四JSP內(nèi)置對(duì)象主題任務(wù)4.4應(yīng)用連接池驅(qū)動(dòng)MySQL數(shù)據(jù)庫(kù)課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)掌握J(rèn)DBC數(shù)據(jù)庫(kù)連接池技術(shù)能力目標(biāo)能應(yīng)用JDBC數(shù)據(jù)庫(kù)連接池技術(shù)育人目標(biāo)培養(yǎng)學(xué)生具有網(wǎng)絡(luò)安全意識(shí),提升學(xué)生民族自豪感和愛國(guó)熱情。教學(xué)重點(diǎn)JDBC數(shù)據(jù)庫(kù)連接池技術(shù)教學(xué)難點(diǎn)JDBC數(shù)據(jù)庫(kù)連接池技術(shù)教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)前面已經(jīng)學(xué)習(xí)了數(shù)據(jù)庫(kù)的連接,還可以采用另外一技術(shù)技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接連接池技術(shù)。二、教學(xué)實(shí)施(80分鐘)1.任務(wù)演示本任務(wù)在實(shí)現(xiàn)JDBC連接池,實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)的訪問,如圖所示。2.知識(shí)準(zhǔn)備(1)JDBC數(shù)據(jù)庫(kù)連接池的必要性我們?cè)谇懊鎽?yīng)用通用方法訪問數(shù)據(jù)庫(kù)的時(shí)候,主要通過以下三個(gè)步驟:第一在主程序中建立數(shù)據(jù)庫(kù)連接;第二進(jìn)行SQL操作;第三斷開數(shù)據(jù)庫(kù)連接。應(yīng)用這種模式開發(fā),主要存在以下問題。普通的JDBC數(shù)據(jù)庫(kù)連接使用DriverManager來獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將Connection加載到內(nèi)存中,再驗(yàn)證用戶名和密碼(得花費(fèi)0.05s~1s的時(shí)間)。需要數(shù)據(jù)庫(kù)連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后再斷開連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源并沒有得到很好的重復(fù)利用。若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)。這種開發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無顧及的分配出去,如連接過多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。為解決傳統(tǒng)開發(fā)中的數(shù)據(jù)庫(kù)連接問題,可以采用數(shù)據(jù)庫(kù)連接池技術(shù)。(2)數(shù)據(jù)庫(kù)連接池技術(shù)數(shù)據(jù)庫(kù)連接池的基本思想:就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。在項(xiàng)目的resources資源目錄下創(chuàng)建druid的properties配置文件,properties配置文件可以隨意命名,但是文件內(nèi)容中每項(xiàng)配置的key必須是指定的名稱,這里我使用perties作為配置文件的名稱,其文件內(nèi)容如下所示:#數(shù)據(jù)庫(kù)連接參數(shù)driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testdbusername=rootpassword=123456#初始化連接的數(shù)量initialSize=3#最大連接的數(shù)量maxActive=20#獲取連接的最大等待時(shí)間(毫秒)maxWait=3000有了配置文件以后,可以使用如下代碼讀取配置文件,并得到數(shù)據(jù)源對(duì)象,然后通過數(shù)據(jù)源對(duì)象獲取數(shù)據(jù)庫(kù)連接對(duì)象。//加載配置文件InputStreamis=druidtest.class.getClassLoader().getResourceAsStream("perties");Propertiesprop=newProperties();prop.load(is);//根據(jù)配置文件內(nèi)容,創(chuàng)建出數(shù)據(jù)源對(duì)象DataSourcedataSource=DruidDataSourceFactory.createDataSource(prop);//通過數(shù)據(jù)源對(duì)象獲取數(shù)據(jù)庫(kù)連接//如果連接池中的連接已經(jīng)被用完,則會(huì)等待一定的時(shí)間(所配置的時(shí)間)//如果等待超時(shí),就會(huì)拋出異常Connectionconn=dataSource.getConnection();System.out.println(conn);有了連接對(duì)象以后,就可以很方面的操作數(shù)據(jù)庫(kù)了。3.任務(wù)實(shí)施(教師演示、學(xué)生操作)第一步創(chuàng)建名為為DruidUtil的工具類,代碼如下。package.cqcvc;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.Properties;importjavax.sql.DataSource;importcom.alibaba.druid.pool.DruidDataSourceFactory;publicclassDruidUtil{ privatestaticConnectionconn=null; privatestaticDataSourcedataSource; static{try{ InputStreamis= DruidUtil.class.getClassLoader().getResourceAsStream("perties");Propertiesprop=newProperties();prop.load(is); dataSource=DruidDataSourceFactory.createDataSource(prop); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } //獲取連接publicstaticConnectiongetConnection()throwsException{ Connectionconn=dataSource.getConnection(); returnconn; }publicstaticvoidmyclose(Connectionconn,ResultSetrs,PreparedStatementpmst)throwsException{ if(conn!=null){ conn.close(); } if(rs!=null){ rs.close(); } if(pmst!=null){ pmst.close(); }} }第二步,編寫測(cè)試代碼package.cqcvc;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassMysqlDemo11{ publicstaticvoidmain(String[]args)throwsException{ DruidUtildb=newDruidUtil(); Connectionconn=db.getConnection(); Stringsql="select*fromjq_user"; PreparedStatementpmst=conn.prepareStatement(sql); ResultSetrs=pmst.executeQuery(); while(rs.next()){ System.out.println("用戶名:"+rs.getString("username")+",郵箱:"+rs.getString("email")); } db.myclose(conn,rs,pmst); }}運(yùn)行程序,結(jié)果如下圖所示。(1)防止SQL漏洞Statement接口用于處理不帶參數(shù)的靜態(tài)sql語句,PreparedStatement接口可以處理帶參數(shù)的sql語句。Statement中SQL存在漏洞,會(huì)被攻擊導(dǎo)致數(shù)據(jù)泄露SQL會(huì)被拼接or字符。在網(wǎng)站開發(fā)中特別要注意此問題,如果是因?yàn)檫@個(gè)問題,造成網(wǎng)站數(shù)據(jù)泄露造成了損失,就是網(wǎng)站開發(fā)人員的失職。如何規(guī)避此問題呢?我們使用PreparedStatement可以防止SQL注入。PreparedStatement接口防止SQL注入的本質(zhì),把傳遞進(jìn)來的參數(shù)當(dāng)做字符,假設(shè)其中存在轉(zhuǎn)義字符,會(huì)被直接轉(zhuǎn)義。下面通過Statement接口與PreparedStatement接口代碼進(jìn)行的對(duì)比使用Statement接口登錄被SQL注入。使用PreparedStatement接口防止SQL注入從數(shù)據(jù)庫(kù)的jq_user表中知道,我們的password字段沒有為“1”的內(nèi)容,但是這里登陸成功了,這就是SQL的注入。為了防止這種情況,可以使用PreparedStatement接口來實(shí)現(xiàn)用戶登錄防止SQL注入。4.任務(wù)拓展1.ResourceBundle.getBundle()方法的應(yīng)用對(duì)于讀取配置文件,我們也可以使用ResourceBundle.getBundle()方法進(jìn)行讀取,讀取方法我們前面已經(jīng)給出過了。第一步創(chuàng)建名為DruidUtils的工具類。第二步編寫測(cè)試方法。運(yùn)行程序,結(jié)果如下圖所示。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?數(shù)據(jù)庫(kù)連接池技術(shù)的應(yīng)用。作業(yè)布置(2分鐘)完成實(shí)訓(xùn)一創(chuàng)建數(shù)據(jù)庫(kù)并進(jìn)行相關(guān)數(shù)據(jù)庫(kù)的操作教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力項(xiàng)目五JSP內(nèi)置對(duì)象主題任務(wù)5.1應(yīng)用JavaBean計(jì)算梯形的面積1課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)1.熟悉JavaBean的基本格式2.熟悉JavaBean的分類3.掌握J(rèn)avaBean規(guī)范編寫4.掌握J(rèn)avaBean的應(yīng)用能力目標(biāo)能綜合應(yīng)用JavaBean完成項(xiàng)目任務(wù)育人目標(biāo)培養(yǎng)學(xué)生代碼的規(guī)范嚴(yán)謹(jǐn)性,提高學(xué)生的分析問題,解決問題的能力教學(xué)重點(diǎn)能綜合應(yīng)用JavaBean完成項(xiàng)目任務(wù)教學(xué)難點(diǎn)能綜合應(yīng)用JavaBean完成項(xiàng)目任務(wù)教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)在數(shù)學(xué)中平行四邊形面積、三角形面積、梯形的面積的計(jì)算…,從而引出本節(jié)課的內(nèi)容。二、教學(xué)實(shí)施(80分鐘).1.任務(wù)演示編寫一個(gè)JSP頁(yè)面,該頁(yè)面提供一個(gè)表單,用戶可以通過表單設(shè)置梯形的上底、下底和高的值,并提交給本JSP頁(yè)面,該JSP頁(yè)面將計(jì)算梯形面積的任務(wù)交給一個(gè)pagebean去完成。JSP頁(yè)面使用getProperty動(dòng)作標(biāo)記顯示pagebean中的數(shù)據(jù),如圖所示2.知識(shí)準(zhǔn)備(1)JavaBean介紹(2)JavaBean的分類(3)JavaBean的規(guī)范孟子曰“不以規(guī)矩,不能成方圓”,同樣,在設(shè)計(jì)JavaBean時(shí),需要遵循有關(guān)約定:使用package語句進(jìn)行打包類中聲明的方法的訪問屬性都必須是public的。類中需提供public、無參數(shù)的構(gòu)造方法。屬性必須聲明為私有的(即用private修飾)如果類的成員變量的名字是xxx,類中提供兩個(gè)方法:getXxx(),用來獲取屬性xxx。setXxx(),用來修改屬性xxx.。也就是方法的名字用get或set為前綴,后綴是將成員變量名字的首字母大寫的字符序列。對(duì)于boolean類型的成員變量,即布爾邏輯類型的屬性,允許使用“is”代替上面的“get”和“set”。(4)使用JavaBean<jsp:useBean>動(dòng)作元素基本格式如下:<jsp:useBeanid="beanname"class=“package.class"scope=“page|request|session|application"/><jsp:getProperty>動(dòng)作元素<jsp:getProperty>用于獲取Bean對(duì)象中屬性的值。JavaBean的實(shí)例必須在<jsp:getProperty>前面定義,基本語句的格式如下:<jsp:getPropertyname="id"property="bean屬性"/>或<jsp:getPropertyname="id"property="bean屬性"/></jsp:getProperty>課堂練習(xí)(教師演示、學(xué)生操作)課堂練習(xí)1:創(chuàng)建一個(gè)Student的Bean類,如圖所示。課堂練習(xí)2:編寫Person.jsp頁(yè)面去訪問課堂練習(xí)1的bean屬性。3.任務(wù)實(shí)施(教師演示、學(xué)生操作)關(guān)鍵代碼:第一步:bean的類文件以“class"形式創(chuàng)建,為”AreaBean.java"。需要把bean文件放到my.bean包中。packagemy.bean;publicclassAreaBean{privatedoublehight,up,down,area;publicAreaBean(){ }publicdoublegetHight(){ returnhight;}publicvoidsetHight(doublehight){ this.hight=hight;}publicdoublegetUp(){ returnup;}publicvoidsetUp(doubleup){ this.up=up;}publicdoublegetDown(){ returndown;}publicvoidsetDown(doubledown){ this.down=down;}publicdoublegetArea(){ this.area=(up+down)*hight/2; returnarea;}publicvoidsetArea(doublearea){ this.area=area;}}第二步:創(chuàng)建jsp文件<bodybgcolor="f0fff0"><fontsize=4><b><jsp:setPropertyproperty="up"name="tixing"value="20"/><jsp:setPropertyproperty="down"name="tixing"value="30"/><jsp:setPropertyproperty="hight"name="tixing"value="5"/>梯形的上底:<jsp:getPropertyproperty="up"name="tixing"/><br>梯形的下底:<jsp:getPropertyproperty="down"name="tixing"/><br>梯形的高:<jsp:getPropertyproperty="hight"name="tixing"/><br>梯形的面積:<jsp:getPropertyproperty="area"name="tixing"/><br></font></b></body>4.任務(wù)拓展通過任務(wù)5.1的學(xué)習(xí),我們已經(jīng)學(xué)會(huì)使用一個(gè)簡(jiǎn)單的bean,有時(shí)在寫一個(gè)bean的時(shí)候,除了需要應(yīng)用import語句引入系統(tǒng)提供的類,可能還需要其它一些自己編寫的類,此時(shí)只要將這些類和創(chuàng)建的bean的類寫在一個(gè)Java源中即可。(1)FilenameFilter介紹FilenameFilter是一個(gè)接口,實(shí)現(xiàn)FilenameFilter接口的類的實(shí)例用于過濾不符合規(guī)格的文件名,并返回合格的文件,只有一個(gè)accpet方法。publicbooleanaccept(Filedir,Stringname){}作用:它用來測(cè)試指定的文件是否應(yīng)包含在文件列表中dir:表示文件的當(dāng)前目錄name:表示文件名File文件File類的一個(gè)對(duì)象,代表一個(gè)文件或一個(gè)文件目錄(文件夾),基本格式如下:Filef=newFile("路徑");常用的方法:String[]fs=f.list();//獲取指定目錄下的所有文件或者文件目錄的名稱數(shù)組File[]fs=f.listFiles();//獲取指定目錄下的所有文件或者文件目錄的FiLe數(shù)組FilenameFilter用來把符合要求的文件或目錄返回;因此可以調(diào)用:String[]fs=f.list(FilenameFilterfilter);;File[]fs=f.listFiles(FilenameFilterfilter);當(dāng)向list方法傳遞一個(gè)FilenameFilter接口對(duì)象時(shí),list方法在列出文件時(shí),將讓該文件調(diào)用accept方法檢查該文件是否符合accept方法指定的目錄和文件的要求。拓展應(yīng)用1:應(yīng)用bean列出JSP頁(yè)面所在目錄中特定擴(kuò)展名的文件。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?JavaBean的分類,規(guī)范和應(yīng)用,F(xiàn)ilenameFilter以及文件的應(yīng)用。作業(yè)布置(2分鐘)實(shí)訓(xùn)一應(yīng)用JavaBean實(shí)現(xiàn)留言板教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力7614-項(xiàng)目五JSP內(nèi)置對(duì)象主題任務(wù)5.2應(yīng)用JavaBean實(shí)現(xiàn)網(wǎng)站注冊(cè)功能1課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)掌握J(rèn)avaBean屬性的值的引用能力目標(biāo)能綜合應(yīng)用JavaBean屬性的值育人目標(biāo)培養(yǎng)學(xué)生代碼的規(guī)范嚴(yán)謹(jǐn)性,提高學(xué)生的分析問題,解決問題的能力教學(xué)重點(diǎn)JavaBean屬性的值綜合應(yīng)用教學(xué)難點(diǎn)JavaBean屬性的值綜合應(yīng)用教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)微信、騰訊QQ、郵箱、百度網(wǎng)盤…需要先注冊(cè),才能登錄使用相應(yīng)的產(chǎn)品服務(wù),從而引出本節(jié)課的內(nèi)容。二、教學(xué)實(shí)施(80分鐘)1.任務(wù)演示當(dāng)我們進(jìn)入歡迎界面,想購(gòu)買化妝品,需要先注冊(cè),然后才能購(gòu)買,如圖所示。運(yùn)行界面輸入信息提交后的信息2.知識(shí)準(zhǔn)備使用setProperty設(shè)置bean屬性值可以通過HTML表單的參數(shù)的值來設(shè)置bean的相應(yīng)屬性的值,要求bean屬性的名字必須在表單中有相應(yīng)的參數(shù)名字與之對(duì)應(yīng),JSP引擎會(huì)自動(dòng)將參數(shù)的字符串值轉(zhuǎn)換為bean相對(duì)應(yīng)的屬性的值。如果用HTTP表單的所有參數(shù)的值設(shè)置bean相對(duì)應(yīng)的屬性的值可以使用setProperty元素:方式一:<jsp:setPropertyname="beanname"property="*"/>該元素不再具體指定bean屬性的值將對(duì)應(yīng)表單中哪些參數(shù)指定的值,系統(tǒng)會(huì)自動(dòng)根據(jù)名字進(jìn)行對(duì)應(yīng)的匹配。課堂練習(xí)(教師演示、學(xué)生操作)課堂練習(xí)1:通過bean,實(shí)現(xiàn)表單讀取網(wǎng)站登錄信息,如圖所示。3.任務(wù)實(shí)施(教師演示、學(xué)生操作)關(guān)鍵代碼:第一步:編寫JavaBean類Registerpackagemy.bean;publicclassRegister{ Stringlogname="",password,phone="",address="",realname="";publicRegister(){ }publicStringgetLogname(){ returnlogname;}publicvoidsetLogname(Stringlogname){ this.logname=logname;}publicStringgetPassword(){ returnpassword;}publicvoidsetPassword(Stringpassword){ this.password=password;}publicStringgetPhone(){ returnphone;}publicvoidsetPhone(Stringphone){ this.phone=phone;}publicStringgetAddress(){ returnaddress;}publicvoidsetAddress(Stringaddress){ this.address=address;}publicStringgetRealname(){ returnrealname;}publicvoidsetRealname(Stringrealname){ this.realname=realname;}}第二步:編寫jsp文件<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><jsp:useBeanid="register"class="my.bean.Register"scope="request"></jsp:useBean><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Inserttitlehere</title></head><bodybgcolor="pink"><div><h1>用戶網(wǎng)站注冊(cè)</h1><formaction=""method="post"name="form"><b>用戶名由字母、數(shù)字、下劃線構(gòu)成,*的項(xiàng)必須填寫</b><br><br>*用戶名稱:<inputtype="text"name="logname"><br><br>*用戶密碼:<inputtype="password"name="password"><br><br>*重復(fù)密碼:<inputtype="password"name="again_password"><br><br>聯(lián)系電話:<inputtype="text"name="phone"><br><br>收件地址:<inputtype="text"name="address"><br><br>真實(shí)姓名:<inputtype="text"name="realname"><br><br><inputtype="submit"value="提交"></form></div><div><h1>顯示用戶網(wǎng)站注冊(cè)信息</h1><%request.setCharacterEncoding("utf-8");%><jsp:setPropertyproperty="*"name="register"/>用戶名稱:<jsp:getPropertyproperty="logname"name="register"/><br><br>用戶密碼:<jsp:getPropertyproperty="password"name="register"/><br><br>聯(lián)系電話:<jsp:getPropertyproperty="phone"name="register"/><br><br>收件地址:<jsp:getPropertyproperty="address"name="register"/><br><br>真實(shí)姓名:<jsp:getPropertyproperty="realname"name="register"/><br><br></div></body></html>4.任務(wù)拓展編寫最美的逆行者相冊(cè)任務(wù)要求:2022年8月,重慶市北碚區(qū)歇馬街道虎頭村突發(fā)山火,從山火燒起來的那一刻,各方力量開始集結(jié),消防救援人員和志愿者們?yōu)榱巳嗣裆?cái)產(chǎn)安全,在極端高溫天氣下又處于炙烤險(xiǎn)峻的一線,勇往直前、迎難而上,他們是最美的逆行者在北碚山火中讀懂重慶,應(yīng)用你學(xué)的知識(shí),做一個(gè)救火相冊(cè),如圖所示。三、教學(xué)小結(jié)(3分鐘)通過本節(jié)課的學(xué)習(xí),問學(xué)生掌握了哪些知識(shí)?JavaBean屬性值的設(shè)置作業(yè)布置(2分鐘)完成實(shí)訓(xùn)二應(yīng)用JavaBean技術(shù)實(shí)現(xiàn)四則運(yùn)算教學(xué)反思注重培養(yǎng)學(xué)生實(shí)踐動(dòng)手能力項(xiàng)目五JSP內(nèi)置對(duì)象主題任務(wù)5.3應(yīng)用JavaBean實(shí)現(xiàn)購(gòu)物車課時(shí)2教學(xué)手段啟發(fā)引導(dǎo)法項(xiàng)目教學(xué)法任務(wù)教學(xué)法教學(xué)方法演示法教學(xué)課型□理論□實(shí)訓(xùn)R一體化□(其它)教學(xué)目標(biāo)知識(shí)目標(biāo)掌握J(rèn)avaBeant的應(yīng)用掌握ArrayList的應(yīng)用能力目標(biāo)能應(yīng)用JavaBean和ArrayList制作小型網(wǎng)站育人目標(biāo)培養(yǎng)學(xué)生代碼的規(guī)范嚴(yán)謹(jǐn)性,提高學(xué)生的分析問題,解決問題的能力教學(xué)重點(diǎn)ArrayList的綜合應(yīng)用教學(xué)難點(diǎn)ArrayList的綜合應(yīng)用教學(xué)過程設(shè)計(jì)備注一、創(chuàng)建情境,導(dǎo)入新課(5分鐘)隨著“互聯(lián)網(wǎng)+”與各行業(yè)的整合,農(nóng)產(chǎn)品與互聯(lián)網(wǎng)的融合創(chuàng)造出“新農(nóng)人”、“社區(qū)團(tuán)購(gòu)”等新興事物,農(nóng)產(chǎn)品在互聯(lián)網(wǎng)銷售為農(nóng)產(chǎn)品發(fā)展提供的重要的途徑,從而引出本節(jié)課的內(nèi)容。二、教學(xué)實(shí)施(80分鐘)1.任務(wù)演示為了進(jìn)一步提高水果銷售業(yè)績(jī),便利客戶購(gòu)買商品,請(qǐng)應(yīng)用JavaBean技術(shù)實(shí)現(xiàn)購(gòu)物車系統(tǒng),主要功能包含展示水果,購(gòu)買水果,添加水果到購(gòu)物車,清空購(gòu)物車,如圖所示水果列表購(gòu)買商品2.知識(shí)準(zhǔn)備(1)ArrayList的應(yīng)用封裝業(yè)務(wù)的JavaBean是完成一定運(yùn)算和操作功能的業(yè)務(wù)類,主要包含一些特定的方法,進(jìn)行業(yè)務(wù)處理。使用JavaBean一定程度上可以將Java處理代碼從JSP頁(yè)面中分離。封裝數(shù)據(jù)的JavaBean要將表單中的用戶輸入值送入數(shù)據(jù)庫(kù)中相應(yīng)的字段,或?qū)?shù)據(jù)庫(kù)中的字段值取出并顯示到網(wǎng)頁(yè)中,需要一個(gè)專用的Bean與封裝數(shù)據(jù)的JavaBean配合完成操作。在項(xiàng)目四已經(jīng)詳細(xì)介紹了JSP中連接數(shù)據(jù)庫(kù)的多種方法和數(shù)據(jù)庫(kù)進(jìn)行增加、刪除、修改和查詢的各種操作。在同一個(gè)應(yīng)用程序中的許多地方都需要進(jìn)行數(shù)據(jù)庫(kù)連接和數(shù)據(jù)庫(kù)內(nèi)容的更新操作,可以通過所學(xué)的JavaBean技術(shù)將數(shù)據(jù)庫(kù)的一些操作封裝到Bean中,需要用到這些功能,直接調(diào)用JavaBean動(dòng)作元素來實(shí)現(xiàn)Bean的調(diào)用,具體的知識(shí)點(diǎn),前面已介紹,這里不再一一贅述3.任務(wù)實(shí)施(教師演示、學(xué)生操作)第一步:創(chuàng)建封裝商品信息的值JavaBeanpackagemy.bean;publicclassGoods{privateStringname;//商品名稱privatefloatprice;//商品價(jià)格privateintnum;//購(gòu)買商品的數(shù)量publicGoods(){ super();}publicGoods(Stringname){ super(); =name;}publicGoods(Stringname,floatprice,intnum){ super(); =name; this.price=price; this.num=num;}publicStringgetName(){ returnname;}publicvoidsetName(Stringname){ =name;}publicfloatgetPrice(){ returnprice;}publicvoidsetPrice(floatprice){ this.price=price;}publicintgetNum(){ returnnum;}publicvoidsetNum(intnum){ this.num=num;}}第二步創(chuàng)建工具JavaBean,主要實(shí)現(xiàn)中文亂碼處理和類型轉(zhuǎn)換packagemy.bean;publicclassMyTools{//實(shí)現(xiàn)字符串轉(zhuǎn)換為整型publicstaticintstrToint(Stringstr){ if(str==null||str.equals("")) str="0"; intnum=0; try{ num=Integer.parseInt(str); }catch(Exceptione){ num=0; e.printStackTrace(); } returnnum;}//實(shí)現(xiàn)中文亂碼處理publicstaticStringtoChinese(Stringstr){ if(str==null) str=""; try{ str=newString(str.getBytes("ISO-8859-1"),"utf-8"); }catch(Exceptione){ str=""; e.printStackTrace(); } returnstr;}}第三步:創(chuàng)建購(gòu)物車,主要功能是添加、移除、清空購(gòu)物車的操作packagemy.bean;importjava.util.*;importmy.bean.*;publicclassShopCar{privateArrayListbuylist=newArrayList();publicArrayListgetBuylist(){ returnbuylist;}publicvoidsetBuylist(Goodslist){//添加數(shù)據(jù) if(list!=null) { if(buylist.size()==0) { Goodstemp=newGoods(); temp.setName(list.getName()); temp.setPrice(list.getPrice()); temp.setNum(list.getNum()); buylist.add(temp); }else { inti=0; for(;i<buylist.size();i++) { Goodstemp=(Goods)buylist.get(i); if(temp.getName().equals(list.getName())) { temp.setNum(temp.getNum()+1); break; } } if(i>buylist.size()) { Goodstemp=newGoods(); temp.setName(list.getName()); temp.setPrice(list.getPrice()); temp.setNum(list.getNum()); buylist.add(temp); } } }}publicvoidremoveItem(Stringname)//移動(dòng)數(shù)據(jù){ for(inti=0;i<buylist.size();i++) { Goodstemp=(Goods)buylist.get(i); if(temp.getName().equals(MyTools.toChinese(name))) { if(temp.getNum()>1) { temp.setNum(temp.getNum()-1); break; } elseif(temp.getNum()==1) { buylist.remove(i); } } }}publicvoidclearCar()//清除數(shù)據(jù){ buylist.clear();}}第四步:創(chuàng)建水果列表頁(yè)面<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="my.bean.Goods"%><%@pageimport="java.util.*"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Inserttitlehere</title></head><body><%!staticArrayListgoodslist=newArrayList();static{ String[]names={"水龍果","芒果","西瓜","哈密瓜"}; float[]prices={4.5f,6.7f,2.4f,3.5f};for(inti=0;i<4;i++){ Goodslist1=newGoods(); list1.setName(names[i]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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)論