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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

項目四JSP內(nèi)置對象

主題任務4.1Java中連接數(shù)據(jù)庫

課時2教學手段啟發(fā)引導法項目教學法任務教學法

教學方法演示法

教學課型□理論□實訓10一體化口(其它)

1.熟悉JDBC

知識目標3.掌握JDBC的主要操作類和接口

4.熟悉資源文件中配置數(shù)據(jù)庫

教學目標

能力目標應用JDBC連接數(shù)據(jù)庫

培養(yǎng)學生具有網(wǎng)絡安全意識,提升學生民族自豪感

育人目標

和愛國熱情

教學重點應用JDBC連接數(shù)據(jù)庫

教學難點應用JDBC連接數(shù)據(jù)庫

教學過程設計備注

一、創(chuàng)建情境,導入新課(5分鐘)

當我們登錄QQ時,需要先注冊,注冊以后,我們的個人

信息放在什么地方呢,從而引出本節(jié)課的內(nèi)容。

二、教學實施(80分鐘)

.1.任務演示

本任務使用Java語言驅(qū)動MySQL數(shù)據(jù)庫,命名為

“jiaqicms”數(shù)據(jù)庫中的表名為“user”的一共的記錄數(shù)打印到控

制臺,如圖所示

I*MarkersOPropertiesServers泥DataSourceE>

<terminated>MysqlDemc[JavaApplication]D:\JSP\eclipse-

jq_user及牛一關彎3年

2.知識準備

(1)JDBC簡介

(2)JDBC的主要操作類及接口

■Driver接口

■DriverManager類

■Connection接口

■Statement接口

■PrcparcdStatcmcnt接口

■resultSet接口

課堂練習(教師演示、學生操作)

課堂練習1:Java中數(shù)據(jù)庫連接,如圖所示。

伍Markers二PropertiesifoServers詼DataSourceExplorerLSnippets*.ProblemsCConsole區(qū)、

yterminated)My$qlDemo[JavaApplication]C:\ProgramFile5\J?va\jdk-15.0.1\bin^avdw.exe(2022知月13日下午

|com.mysql.jdbc.3DBC4Connection@64616ca2

課堂練習2:實例化Statement對象,如圖所示。

<terminated>MysqlDemo[JavaApplication]D:\JSP\eclipse-

com.mysql.jdbc.Statement工mp述13e39c73

課堂練習3:Statement接口的和executeQueryO方法的應

用。

<terminated>MysqlDemo[JavaApplication]D:\JSP\eclipse

com.mysql.jdbc.JDBC42ResultSet@7e0b85f9

課堂練習4:PreparedStatement。方法的應用。

i*Markers二PropertiesASewsSourceEvpbrer上Snippets£Prob!em$0Console4SearchtErrorlog^Terminal

<term'nated>MysqlDemoOI[JavaApplication]CAProgumRe$VavaWk?15A1\bi旭raw.exe(2022^7^14EJF^156cU)

[elect*fromjq_userwhere'username'=?and'password'=?

com.mysql.jdbc.JDBC42ResultSet03567135c

課堂練習5:next。方法和getXxx()方法的應用。

I?Markers□PropertiesvflServersS務DataSourceExplorerSSnippets艮Problems日Console汽

〈terminated》My^qlDefno04[JavaApplication)G\ProgramFile$Vava\jdk-15.0.1\bin\javaw.exe(2022^7^146

獲取到而姓名為:zhangsan

3.任務實施(教師演示、學生操作)

關鍵代碼:

第一步:加載JDBC數(shù)據(jù)庫驅(qū)動。

(1)下載MySql的jar包

(2)將下載得到的文件進行解壓

(3)Eclipse中使用jar包

第二步在包里面加入連接MySQL數(shù)據(jù)庫的包

第三步在Eclipse中點擊項目Project選擇屬性

Propetieso

第四步選擇jar包,添加到項目中,如圖所示。

第五步數(shù)據(jù)庫準備

Connectionconn=null;

Statementstint=null;

Stringsql="selectcount(*)fromjq_user";

try{

"1.注冊驅(qū)動

Class.forNamc("coin.niysql.jdbc.Driver");

〃2.獲取連接

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicms,,,"root","roo

t");

〃3.實例化Statement對象

stmt=conn.createStatementO;

//System.out.println(stint);

//4.執(zhí)行SQL語句,返回ResultSet結果集對象

ResukSetrs=stint.executeQuery(sql);

while(rs.next()){

System.out.println("jq_user表中一共有"+rs.geilnl(l)+"行");

}

}catch(Exceptionc){

e.printStackTracei');

}

try{conn.close();

stmt.close();

}catch(SQLExceptione){

e.printStackTracei");

)

})

4.任務拓展

實際開發(fā)中不建義在Java程序中把連接數(shù)據(jù)庫的信息寫

死,而是寫入到配置文件或資源文件中,這樣方便修改配置文

件,而不需要重新編譯程序。

在工程sre目錄下創(chuàng)建名為“pcrties”的文件,輸入如

下內(nèi)容:

driver=com.mysqLjdbc.Driver

url=jdbc:mysql://localhost:3306/jiaqicms

username=root

password=root

【腳小留心】

注意:該XXX.properties文件,必須放在src文件夾下,

不然會出錯,而且編譯器不會直接提示。

讀取后綴名為properties的文件,可以通過ResourceBundle

類來實現(xiàn)。ResourceBundle類是java自帶的類,類路徑:

java.util.ResourceBundle,主要用來讀取項目中后綴為

properties的配置文件。

獲取配置文件的名稱,使用getBundle()方法,代碼如下:

ResourceBundleresourceBundle=

ResourceBundle.getBundle(ndbn);

【教你一招】

注意,上面代碼中的后綴名不需要書寫。

獲取資源文件中的信息:使用getString。方法,比如要讀

取數(shù)據(jù)庫的用戶名,則代碼可以寫為:

Stringusername^undle.getStringC'username");

讀取其他信息,只需要改變getString()方法中的值就可以

了。

將上面的例子中的配置信息可以寫到perties文件

中,Java部分的驅(qū)動代碼可以修改為如下。

三、教學小結(3分鐘)

通過本節(jié)課的學習,問學生掌握了哪些知識?

JDBC主要操作類和接口,數(shù)據(jù)庫的連接,加載jar包以

及在資源文件中配置數(shù)據(jù)庫。

作業(yè)布置(2分鐘)實訓一實現(xiàn)數(shù)據(jù)庫的連接

教學反思注重培養(yǎng)學生實踐動手能力

項目四JSP內(nèi)置對象

主題任務4.2數(shù)據(jù)庫查詢和模糊查詢

課時2教學手段啟發(fā)引導法項目教學法任務教學法

教學方法演示法

教學課型□理論□實訓I0一體化口(其它)

1.掌握數(shù)據(jù)庫的一般查詢

知識目標

2.掌握數(shù)據(jù)庫的模糊查詢

教學目標能力目標能綜合應用JDBC對數(shù)據(jù)庫表進行查詢

培養(yǎng)學生具有網(wǎng)絡安全意識,提升學生民族自豪感

育人目標

和愛國熱情

教學重點能綜合應用JDBC對數(shù)據(jù)庫表進行查詢

教學難點能綜合應用JDBC對數(shù)據(jù)庫表進行查詢

教學過程設計備注

一、創(chuàng)建情境,導入新課(5分鐘)

微信、騰訊QQ、郵箱、百度網(wǎng)盤…需要先登錄,登錄時,

需要輸入用戶名和密碼,平臺是如何知道我們輸入的用戶名和

密碼是正確的呢,從而引出本節(jié)課的內(nèi)容。

二、教學實施(80分鐘)

1.任務演示

將數(shù)據(jù)庫名為“jiaqicms”的數(shù)據(jù)庫中名字為“jqjiser”表

的第一條記錄的姓名和郵箱信息查詢出來,并打印輸出到控制

臺,如圖所示。

-8-

[?Markers二Properties泉Servers誦DataSourceExpl

〈terminated〉MysqlDemo05[JavaApplication]D:\JSP\eclipse

姓名:zhangsan郵箱:1888@qq.com

使用關鍵字“san”對名字為“jiaqicms”的數(shù)據(jù)庫進行模

糊查詢,將查詢到的記錄中的“uername”字段的內(nèi)容輸出到控

制臺,如圖所示。

[?Markers二Properties泉ServersE與DataSourceExp!

〈terminated〉MysqlDemo05[JavaApplication]D:\JSP\eclipse

姓名:zhangsan由E箱:1888@qq.com

2.知識準備

(1)使用PreparedStatement接口實現(xiàn)數(shù)據(jù)查詢

(2)使用PreparedStatement接口實現(xiàn)模糊查詢

MySQL中規(guī)定的通配符主要有以下三種:

■“%”號通配符:表示任何字符出現(xiàn)任意次數(shù)(可以是0

次)

■“,通配符:只能匹配單個字符,不能多也不能少,就

是一個字符。

■like操作符:指MySQL后面的搜索模式是利用通配符而

不是直接相等匹配進行比較,如果like后面沒有出現(xiàn)通

配符,則在SQL執(zhí)行優(yōu)化時將like等價于執(zhí)行。

課堂練習(教師演示、學生操作)

課堂練習1:對名為“jq_user”的表進行模糊查詢。

3.任務實施(教師演示、學生操作)

-9-

(1)單條或多條記錄的查詢

下面通過將jq_user表中姓名為“zhangsan”的記錄打印輸

出到控制臺,如果"jq_user”表中有多條記錄,那么都可以打印

輸出到控制臺。

package.cqcvc;

importjava.sql.Connection;

importjava.sqLDriverManager;

importjava.sql.PreparedStatement;

importjava.sqLResultSet;

importjava.sqLSQLException;

importjava.sql.Statemeni;

importjava.util.ResourceBundle;

publicclassMysqlDenio?!祘

publicstaticvoidmain(Stringl]args){

Connectionconn=null;

PreparedStatementstmt=null;

Stringsql="select*fromjq_userwhereusername=?H;

Stringdriver=null;

Stringurl=null;

Stringusername=null;

Stringpassword=null;

ResourceBundlebundle=ResourceBundle.getBundle("db");

driver=bundle.getS(ring("driver");

url=bundle.getString("url");

username=bundle.getString("username");

password=bundle.getSiring("password");

try(

.注冊驅(qū)動

Class.forName(driver);

〃2.獲取連接

conn=DriverManager.getConnection(urkusername,password);

〃3.實例化prepareStatement對象

stmt=conn.prepareStatement(sql);

stmt.setString(k"zhangsan");

//4.執(zhí)行SQL語句,返【口IResultSel結果集對象

ResultSetrs=stmt.executeQuery();

while(rs.next()){

-10-

System.out.printin("姓名:"+rs.getSlring("usernaine,')+"--"+"

郵箱:"+rs.ge(S(ring("emair'));

I

}catch(Exceptione){

c.printStackTracc();

)

try{

conn.close();

stmt.close();

}catch(SQLExceptione){

e.printStackTraceO;

)

)

)

運行結果如圖4?28所示:

I?Markers二Properties泉Servers+電DataSourceExpl

<terminated>MysqlDemo05[JavaApplication]D:\JSP\eclipse

姓名:zhangsan由6箱:1888@qq.com

2.模糊查詢

模糊查詢主要用在網(wǎng)站的內(nèi)容的搜索功能上,下面代碼實

現(xiàn)對jq_user表中的數(shù)據(jù)進行模糊查詢。

package.cqcvc;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sqLPreparedStatement;

importjava.sql.ResultSet;

publicclassMysqlDemo06{

publicstaticvoidmain(Slring[largs){

Stringsql=,,selecl*frcmjq_userwhereusernamelike

try{

Class.forName("com.mysql.jdbc.Driver");〃1.注冊驅(qū)動

-11-

〃2.獲取連接

Connection

conn=DriverManager.getConnection("jdbc:mysql://localhost:33()6/jiaqicms","root","root"

)

PreparedStatemenlpre=conn.prepareStatement(sql);〃3,實例化Statement對象,

進行預編譯

Stringusernamc="%san%";

pre.setString(l,username);〃4.執(zhí)行SQL語句,返回ResultSet

結果集對象

ResultSetrs=pre.executeQuery();

while(rs.next()){

System.out.printin("獲取到的姓名為:,,+rs.getString("useiname"));

)

}catch(Exceptione){

e.priniSlackTraceO;

程序運行結果如圖所示:

<terminated>MysqlDemo06[JavaApplication]D:\JSP\eclipse

獲取到的姓名為:zhangsan

4.任務拓展

(1)靜態(tài)代碼塊

在使用JDBC操作數(shù)據(jù)庫的時候,為了增加代碼的通用性,

可以將數(shù)據(jù)庫連接等操作抽象為一個工具類DBUtils。這里需要

用到靜態(tài)代碼塊的知識,什么是靜態(tài)代碼塊呢?

靜態(tài)代碼塊是定義在類中,使用關鍵字static修飾的代碼

塊,在類加載時只執(zhí)行一次,無論類在那個位置,與對象無關,

不論產(chǎn)生多少對象,靜態(tài)代碼塊只在類加載時執(zhí)行一次,如下

是靜態(tài)代碼塊的應用。

-12-

(2)工具類DBUtils

有了靜態(tài)代碼塊的知識后,我們著手把數(shù)據(jù)庫操作抽成一

個工具類。

三、教學小結(3分鐘)

通過本節(jié)課的學習,問學生掌握了哪些知識?

數(shù)據(jù)庫的一般查詢,通配符,模糊查詢。

作業(yè)布置(2分鐘)完成實訓任務和拓展任務

教學反思注重培養(yǎng)學生實踐動手能力

-13-

項目四JSP內(nèi)置對象

主題任務4.3數(shù)據(jù)庫的更新操作

課時2教學手段啟發(fā)引導法項目教學法任務教學法

教學方法演示法

教學課型□理論□實訓I0一體化口(其它)

知識目標掌握數(shù)據(jù)庫的更新操作

教學目標能力目標能靈活對數(shù)據(jù)庫進行更新

培養(yǎng)學生具有網(wǎng)絡安全意識,提升學生民族自豪感

育人目標

和愛國熱情。

教學重點數(shù)據(jù)庫的更新

教學難點數(shù)據(jù)庫的更新

教學過程設計備注

一、創(chuàng)建情境,導入新課(5分鐘)

數(shù)據(jù)庫連接以后,可以對數(shù)據(jù)進行增、刪、改、插操作。

要對數(shù)據(jù)進行更新操作,可以使用Statement接口完成。該接

口中需要Connection接口提供creatStatement。方法進行實例

化,進而可.以實現(xiàn)相應的操作。

二、教學實施(80分鐘)

1.任務演示

本任務使用Java語言驅(qū)動MySQL數(shù)據(jù)庫,命名為

“jiaqicms”數(shù)據(jù)庫中的表名為“user”表中增加數(shù)據(jù)并實現(xiàn)

-14-

修改刪除操作,如圖所示。

—TT▽idusernamepasswordemailaddress

□「捐輯并復制。刪除1zhangsan1231888@重慶城市職業(yè)學院

□/編輯舉復制?刪除2lisi1232222@重慶解放樨

□“舄輯尹復制。刪除3klkl123kkk@jjj南濱路

□”編輯并復制。刪除5lier123456233@上海東路10增

t_全選/全不選選0安:”修改0刪除層導出

2.知識準備

JDBC中的Statement對象用于向數(shù)據(jù)庫發(fā)送SQL語

句,想完成對數(shù)據(jù)庫的增刪改查,只需要通過這個對象向數(shù)據(jù)

庫發(fā)送增刪改查語句即可。

Statement對象的executeUpdate()方法,用于向數(shù)據(jù)庫

發(fā)送增,刪,改,查的SQL語句,executeUpdate()執(zhí)行完

后,將會返回一個整數(shù),(即增刪改語句導致了數(shù)據(jù)庫的記錄

數(shù)發(fā)生了變化)。

Statement.executeQuery()用于向數(shù)據(jù)庫發(fā)送查詢語句,

executeQuery()方法返回代表查詢結果的ResuItSet對象。

課堂練習(教師演示、學生操作)

課堂練習1:使用executeUpdate(Stringsql)方法向數(shù)據(jù)

中添加數(shù)據(jù)。

課堂練習2:使用executeUpdate(Stringsql)方法將指定

表中的數(shù)據(jù)進行刪除。

課堂練習3:使用executeUpdate(Stringsql)方法將指定

表中的數(shù)據(jù)進行修改

3.任務實施(教師演示、學生操作)

-15-

(1)插入數(shù)據(jù)庫表記錄。向jq_user表中漕加一條新的記

錄,編寫一條完整的SQL語句,并通過Statement執(zhí)行。

package.cqcvc;

importjava.sql.Conncction;

importjava.sql.DrivcrManagcr;

importjava.sql.SQLException;

importjava.sql.Statement;

publicclassMysqlDemo07{

publicstaticvoidmain(String[]args)throwsException{

Connectionconn=null;

Statementstml=null;

Class.forName("com.mysqLjdbc.Driver");

conn

DriverManager.getConnection("jdbc:mysql://localhost:3306/jiaqicnis'\"root'',"root");

stmt=conn.createbtatementO;

Stringsql="insertintojq_uscr(uscrname,password,email,address)

values(」ier」23;233@;南京路了;

intnum=stmt.executeUpdate(sql);

if(num>0){

System.out.println("數(shù)據(jù)插入成功)

conn.close();

stmt.closeO;

運行結果如下圖所示。

+選項

一TTpidusernamepasswordemailaddtess

□“裝銀尹復制?刪除1zhangsan1231888@重云十成市職業(yè)學院

□小接輯新復制份刪除2lisi1232222@重去岸放褥

□少裝輯尹復制O刪除3klkl123kkkOJjjj南濱I§|

□/裝輯費復制份刪除4wangyong123233@南京;

□力編輯孑復制刪除lier233@南京:

£?5123各I

(2)修改數(shù)據(jù)庫表記錄。將jq_user表中id=5的記錄

password字段的值修改為“123456”,將address字段的內(nèi)容修

-16-

改為“上海東路100號”,對應的程序代碼如下。

package.cqcvc;

importjava.sql.Connection;

importjava.sqLDriverManager;

importjava.sqLStatcmcnt;

publicclassMysqlDemo08{

publicstaticvoidmain(String[]args)throwsException{

Connectionconn=null;

Statementstmt;null;

Class.forNanieC'com.niysql.jdbc.Driver");

conn=

DriverManager.getConnec(ion("jdbc:mysql://localhost:3306/jiaqicms","root","root");

stmt=conn.createS(atement();

Stringsql="updatejq_usersei'password='123456','address'='上海東路

100號'whereid=5";

intnum=stmt.executeUpdate(sql);

if(num>0){

System.out.println("數(shù)據(jù)修改成功)

conn.close();

stmt.close();

)

)}

運行程序,結果如下圖所示。

4—T—?▽idusernamepasswordemailaddrBSS

□。冕輯赳愛制o刪除1zhangsan1231888@重開龍市職業(yè)學院

□/提輯赳復制Q刪除2lisi1232222@重為尾放碑

臺|

□爐鋁輯承復制O刪除3klkl123kkk@jjj南圉

□小紜輯部復制份刪除4wangyong123233@南京i

□。娓輯承更制O刪除5lier123456233@上海,R路100號

3.刪除數(shù)據(jù)庫表字段。將jq_user表中id=4的記錄給刪

除,對應的代碼如下。

package.cqcvc;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sqLStatement;

publicclassMysqlDemo09{

publicstaticvoidmain(Slring[largs)throwsException{

Connectionconn=null;

-17-

Statementstmt=null;

Class.forName("com.mysql.jdbc.Driver");

conn

DriverManager.geiConneciion("jdbc:mysql:〃localhost:3306qiaqicms","root"Jroot");

stmt=conn.createStatement();

Stringsql="dclctcfromjq_uscrwhereid=4";

intnum=stmt.cxccutc(Jpdatc(sql);

if(num>0){

System.out.println("數(shù)據(jù)刪除成功");

conn.closeO;

stint.closeO;

)

I

)

運行結果代碼如下圖所示。

4—"f—>▼idusernamepasswordemailaddress

□/裝箱尹愛制Q刪除1zhangsan1231888@重慶j成市職業(yè)學院

□/裝輯爐復制?刪除2lisi1232222@重去岸放碑

各|

□少美輯承舁制O刪除3klkl123kkk@jjj南濱;

□〃裝密*展制?刪除5lier123456233@上海;三珞100號

T全選/全不選選內(nèi)瓦;?修改O刪除易導出

4.任務拓展

(1)防止SQL漏洞

Statement接口用于處理不帶參數(shù)的靜態(tài)sql語句,

PreparedStatement接口可以處理帶參數(shù)的sql語句。Statement

中SQL存在漏洞,會被攻擊導致數(shù)據(jù)泄露SQL會被拼接or

字符。在網(wǎng)站開發(fā)中特別要注意此問題,如果是因為這個問題,

造成網(wǎng)站數(shù)據(jù)泄露造成了損失,就是網(wǎng)站開發(fā)人員的失職。如

何規(guī)避此問題呢?我們使用PreparedStatement可以防止SQL

-18-

注入。PreparedStatement接口防止SQL注入的本質(zhì),把傳遞

進來的參數(shù)當做字符,假設其中存在轉(zhuǎn)義字符,會被直接轉(zhuǎn)義。

卜面通過Statement接口與PreparedStatement接口代碼進行的

對比

(1)使用Statement接口登錄被SQL注入。

(2)使用PreparedStatement接口防止SQL注入

從數(shù)據(jù)庫的jq_user表中知道,我們的password字段沒有

為“1”的內(nèi)容,但是這里登陸成功了,這就是SQL的注入。

為了防止這種情況,可以使用PreparedStatement接口來實現(xiàn)用

戶登錄防止SQL注入。

三、教學小結(3分鐘)

通過本節(jié)課的學習,問學生掌握了哪些知識?

數(shù)據(jù)庫的更新操作C

(2分鐘)完成實訓二設計信貸數(shù)據(jù)分析可視化平臺用戶注冊

作業(yè)布置

界面

教學反思注重培養(yǎng)學生實踐動手能力

-19-

項目四JSP內(nèi)置對象

主題任務4.4應用連接池驅(qū)動MySQL數(shù)據(jù)庫

課時2教學手段啟發(fā)引導法項目教學法任務教學法

教學方法演示法

教學課型□理論□實訓I0一體化口(其它)

知識目標掌握JDBC數(shù)據(jù)庫連接池技術

教學目標能力目標能應用JDBC數(shù)據(jù)庫連接池技術

培養(yǎng)學生具有網(wǎng)絡安全意識,提升學生民族自豪感

育人目標

和愛國熱情。

教學重點JDBC數(shù)據(jù)庫連接池技術

教學難點JDBC數(shù)據(jù)庫連接池技術

教學過程設計備注

一、創(chuàng)建情境,導入新課(5分鐘)

前面已經(jīng)學習了數(shù)據(jù)庫的連接,還可以采用另外一技術技

術實現(xiàn)數(shù)據(jù)庫的連接一連接池技術。

二、教學實施(80分鐘)

1.任務演示

本任務在實現(xiàn)JDBC連接池,實現(xiàn)對MySQL數(shù)據(jù)庫的訪

問,如圖所示。

-20-

13puk>X±cclassDnui.dU'ti.1{

>14pn±va±e±cConnectionconn=null;

pr*±va±eDa^aSounceda±aSounce;

16->s±a±±c<

T7

18七?y{

19

20InputStreamis=

21DnuidU'ti1.class.?wtClassLoader《).Re-tResounceAsS,tneam(?"dnuid.pnopenties");

22Pnopentiespnop=newPnoper,^xes()j

23prop.load(is);

2Ada-taSounce?DnuidDataSounc^Frictony.cr^^at:^Da-taSounc^(pnop)j

2S:w.tuh(匚Kuup七工onu){

26e.printS,tackTrace();

27}

28}

29

3?//淤取連指

31一publ±c,金a金divConnectiongetConnection()±hr*owsException(

32

Connectxonconn=dataSounce.go±Connectxon()j

34

35r*o±ur*nconn

36

.37}

2.知識準備

(1)JDBC數(shù)據(jù)庫連接池的必要性

我們在前面應用通用方法訪問數(shù)據(jù)庫的時候,主要通過以

下三個步驟:

第一在主程序中建立數(shù)據(jù)庫連接;

第二進行SQL操作;

第三斷開數(shù)據(jù)庫連接.

應用這種模式開發(fā),主要存在以下問題。

■普通的JDBC數(shù)據(jù)庫連接使用DriverManager來獲取,

每次向數(shù)據(jù)庫建立連接的時候都要將Connection加

載到內(nèi)存中,再驗證用戶名和密碼(得花費0.05s?1s

的時間)。需要數(shù)據(jù)庫連接的時候,就向數(shù)據(jù)庫要求一

個,執(zhí)行完成后再斷開連接。這樣的方式將會消耗大

量的資源和時間。數(shù)據(jù)庫的連接資源并沒有得到很好

的重復利用。若同時有幾百人甚至幾千人在線,頻繁

的進行數(shù)據(jù)庫連接操作將占用很多的系統(tǒng)資源,嚴重

的甚至會造成服務器的崩潰。

-21-

■對于每一次數(shù)據(jù)庫連接,使用完后都得斷開。否則,如

果程序出現(xiàn)異常而未能關閉,將會導致數(shù)據(jù)庫系統(tǒng)中

的內(nèi)存泄漏,最終將導致重啟數(shù)據(jù)庫。

■這種開發(fā)不能控制被創(chuàng)建的連接對象數(shù),系統(tǒng)資源會被

毫無顧及的分配出去,如連接過多,也可能導致內(nèi)存

泄漏,服務器崩潰。

■為解決傳統(tǒng)開發(fā)中的數(shù)據(jù)庫連接問題,可以采用數(shù)據(jù)庫

連接池技術。

(2)數(shù)據(jù)庫連接池技術

數(shù)據(jù)庫連接池的基本思想:就是為數(shù)據(jù)庫連接建立一個

“緩沖池預先在緩沖池中放入一定數(shù)量的連接,當需要建立

數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再

放回去。

在項目的resources資源目錄下創(chuàng)建druid的properties

配置文件,properties配置文件可以隨意命名,但是文件內(nèi)容

中每項配置的key必須是指定的名稱,這里我使用

perties作為配置文件的名稱,其文件內(nèi)容如下所示:

#數(shù)據(jù)庫連接參數(shù)

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/tcstdb

username=root

password=123456

#初始化連接的數(shù)量initialSize=3

#最大連接的數(shù)量maxActive=20

-22-

#獲取連接的最大等待時間(毫秒)

maxWait=3000

有了配置文件以后,可以使用如下代碼讀取配置文件,并

得到數(shù)據(jù)源對象,然后通過數(shù)據(jù)源對象獲取數(shù)據(jù)庫連接對象。

〃加載配置文件

InputStreamis=

druidtest.class.getClassLoader().getResourceAsStream(pe

rties1');

Propertiesprop=newProperties();

prop.load(is);

//根據(jù)配置文件內(nèi)容,創(chuàng)建出數(shù)據(jù)源對象

DataSourcedataSource=

DruidDataSourceFactory.createDataSource(prop);

〃通過數(shù)據(jù)源對象獲取數(shù)據(jù)庫連接

〃如果連接池中的連接已經(jīng)被用完,則會等待一定的時間

(所配置的時間)

〃如果等待超時,就會拋出異常

Connectionconn=dataSource.getConnection();

System.out.println(conn);

有了連接對象以后,就可以很方面的操作數(shù)據(jù)庫了。

3.任務實施(教師演示、學生操作)

第一步創(chuàng)建名為為DruidUtil的工具類,代碼如下。

package.cqcvc;

importjava.io.InputStream;

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResuhSel;

-23-

importjava.ulil.Properties;

importjavax.sql.DataSource;

importcorn.alibaba.druid.pool.DruidDataSourceFactory;

publicclassDruidUtil{

privatestaticConnectionconn=null;

privatestaticDataSourccdataSourcc;

static{

try(

InputStreamis=

DiuidUtil.class.getClassLoader().getResourceAsStream("drui(.perties");

Propertiesprop=newProperties();

prop.load(is);

dataSource=DruidDataSourceFactory.createDalaSource(prop);

)catch(Exceptione){

//TODOAuto-generatedcatchblock

e.pnntStacklrace();

)

)

〃獲取連接

publicstaticConnectiongetConnection()throwsException{

Connectionconn=dataSource.getConnection();

returnconn;

I

publicstaticvoidmyclose(Connectionconn,ResultSetrs.PreparedStatementpmst)

throwsException(

if(conn!=null){

conn.close();

)

if(rs!=null){

rs.closc();

)

if(pmst!=null){

pmst.closeO;

第二步,編寫測試代碼

package.cqcvc;

importjava.sqLConnection;

importjava.sqLPreparedStatement;

-24-

importjava.sql.ResullSet;

publicclassMysqlDemol1{

publicstaticvoidmain(String[]args)throwsException{

DruidUlildb=newDruidUtil();

Connectionconn=db.getConnection();

Stringsql="sclcct*frcmjq_uscr";

PrcparcdStatcmcntpmst=conn.prcparcStatcmcnt(sql);

ResultSetrs=pmst.executcQuery();

while(rs.next()){

System.out.println("用戶名:,,+rs.getString("username")+",郵箱:

,,+rs.getString("email"));

)

db.myclose(conn,rs,pmst);

)

1

運行程序,結果如下圖所示。

〈terminated〉MysqlDemol1[JavaApplication]D:\JSP\eclipse

7月16,20224:22:22下午com.alibaba.drui

信息:{dataSource-1}inited

用戶名:zhangsan,郵箱:1888@

用戶名:lisi,由5箱:2222@

用戶名:klkl,郵箱:kkk@jjj

用戶名:lier,郵箱:233@

(1)防止SQL漏洞

Statement接口用于處理不帶參數(shù)的靜態(tài)sql語句,

PreparedStatement接口可以處理帶參數(shù)的sql語句。Statement

中SQL存在漏洞,會被攻擊導致數(shù)據(jù)泄露SQL會被拼接or

字符。在網(wǎng)站開發(fā)中特別要注意此問題,如果是因為這個問題,

造成網(wǎng)站數(shù)據(jù)泄露造成了損失,就是網(wǎng)站開發(fā)人員的失職。如

何規(guī)避此問題呢?我們使用PreparedStatement可以防止SQL

注入。PreparedStatement接口防止SQL注入的本質(zhì),把傳遞

進來的參數(shù)當做字符,假設其中存在轉(zhuǎn)義字符,會被直接轉(zhuǎn)義。

-25-

下面通過Statement接口與PreparedStatement接口代碼進行的

對比

(3)使用Statement接口登錄被SQL注入。

(4)使用PreparedStatement接口防止SQL注入

從數(shù)據(jù)庫的jq_user表中知道,我們的password字段沒有

為“1”的內(nèi)容,但是這里登陸成功了,這就是SQL的注入。

為了防止這種情況,可以使用PreparedStatement接口來實現(xiàn)用

戶登錄防止SQL注入。

4.任務拓展

1.ResourceBundle.getBundle()方法的應用

對于讀取配置文件,我們也可以使用

ResourceBundle.getBundle。方法進行讀取,讀取方法我們前面

已經(jīng)給出過了c

第一步創(chuàng)建名為DruidUtils的工具類。

第二步編寫測試方法。

運行程序,結果如下圖所示。

aX%|BeO融口喇|rf

〈terminated〉MysqlDemolO[JavaApplication]D:\JSP\eclipse-2022-6\plugins\org.ecipse.jus^.op

7月16,20224:26:33下午com.alibaba.druid.pool.DruidDataSource

信息:{dataSource-1}inited

用戶名:zhangsan,郵箱:T888,地址:重慶城市融業(yè)學院

用戶名:lisi,郵箱:2222@,地址:重慶解放碑

用戶名:klkl,郵箱:kkk@jjj,地址:南濱路

用戶名:lier,由卜箱:233@,地址:上海東路10騁

三、教學小結(3分鐘)

通過本節(jié)課的學習,問學生掌握了哪些知識?

-26-

數(shù)據(jù)庫連接池技術的應用。

作業(yè)布置(2分鐘)完成實訓一創(chuàng)建數(shù)據(jù)庫并進行相關數(shù)據(jù)庫的操作

教學反思注重培養(yǎng)學生實踐動手能力

項目五JSP內(nèi)置對象

主題任務5.1應用JavaBean計算梯形的面積

課時2教學手段啟發(fā)引導法項目教學法任務教學法

教學方法演示法

教學課型□理論□實訓10一體化口(其它)

1.熟悉JavaBean的基本格式

2.熟悉JavaBean的分類

知識目標

3.掌握JavaBean規(guī)范編寫

教學目標4.掌握JavaBean的應用

能力目標能綜合應用JavaBean完成項目任務

培養(yǎng)學生代碼的規(guī)范嚴謹性,提高學生的分析問

育人目標

題,解決問題的能力

-27-

教學重點能綜合應用JavaBean完成項目任務

教學難點能綜合應用JavaBean完成項目任務

教學過程設計備注

一、創(chuàng)建情境,導入新課(5分鐘)

在數(shù)學中平行四邊形面積、三角形面積、梯形的面積的計

算…,從而引出本節(jié)課的內(nèi)容。

二、教學實施(80分鐘)

-1.任務演示

編寫一個JSP頁面,該頁面提供一個表單,用戶可以通過

表單設置梯形的上底、下底和高的值,并提交給本JSP頁面,

該JSP頁面將計算梯形面積的任務交給一個pagebean去完成。

JSP頁面使用getProperty動作標記顯示pagebean中的數(shù)據(jù),

如圖所示

B8http://localhost:8080/^@fi/Area.jsp

梯形的上底:20.0

梯形的下底:30.0

梯形的高50

梯形的面積:125.0

2.知識準備

(1)JavaBean介紹

(2)JavaBean的分類

(3)JavaBean的規(guī)范

孟子曰“不以規(guī)矩,不能成方圓”,同樣,在設計JavaBean

-28-

時,需要遵循有關約定:

■使用package語句進行打包

■類中聲明的方法的訪問屬

溫馨提示

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

評論

0/150

提交評論