JSP使用JDBC完成動(dòng)態(tài)驗(yàn)證及采用MVC完成數(shù)據(jù)查詢的方法
本文實(shí)例講述了JSP使用JDBC完成動(dòng)態(tài)驗(yàn)證及采用MVC完成數(shù)據(jù)查詢的方法。分享給大家供大家參考。具體如下:
一、目標(biāo):
① 掌握J(rèn)DBC鏈接數(shù)據(jù)庫的基本過程;
② 掌握使用JDBC進(jìn)行數(shù)據(jù)查詢。
二、主要內(nèi)容:
① 在上一次的實(shí)例基礎(chǔ)上,通過連接數(shù)據(jù)庫完成用戶登錄功能,介紹JDBC的基本用法;
② 通過顯示所有用戶信息進(jìn)一步介紹JDBC的用法和查詢結(jié)果的處理。
1、JDBC概念
Java Database Connectivity的縮寫,用于連接Java應(yīng)用程序與各種關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)接口。對(duì)于編程人員來說,連接任何數(shù)據(jù)庫都是相同的。
2、要使用JDBC開發(fā)應(yīng)用需要哪些準(zhǔn)備工作?
安裝數(shù)據(jù)庫,包括數(shù)據(jù)庫表的創(chuàng)建;
根據(jù)數(shù)據(jù)庫的類型,得到數(shù)據(jù)庫的JDBC驅(qū)動(dòng)程序,不同的數(shù)據(jù)庫管理系統(tǒng)需要不同的JDBC驅(qū)動(dòng)程序,并且不同版本的數(shù)據(jù)庫管理系統(tǒng)需要的驅(qū)動(dòng)程序有可能不同的;這里使用Oracle數(shù)據(jù)庫,驅(qū)動(dòng)程序需要放在WEB-INF/lib下面。
數(shù)據(jù)庫的相關(guān)信息:數(shù)據(jù)庫的IP地址,服務(wù)的端口號(hào),數(shù)據(jù)庫的名字,連接數(shù)據(jù)庫的用戶名和密碼。
3、 舉例:使用數(shù)據(jù)庫對(duì)用戶登錄信息進(jìn)行驗(yàn)證。
需要修改User.java中驗(yàn)證用戶信息的方法。
1)在類的前面增加了一個(gè)import語句:
2)增加的后的check方法如下:
public boolean check() { /* if(username==null || userpass==null) return false; if(username.equals("zhangsan") && userpass.equals("lisi")) { return true; }else{ return false; } */ Connection con = null; Statement stmt = null; ResultSet rs = null; boolean b = true; try{ // 指出連接數(shù)據(jù)庫所需要的驅(qū)動(dòng)程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 建立與數(shù)據(jù)庫之間的連接 // myserver修改為數(shù)據(jù)庫服務(wù)器IP,mydb為數(shù)據(jù)庫名 con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger"); // 編寫查詢數(shù)據(jù)庫信息的SQL語句 String sql="select * from usertable where username='"+username+"' and userpass='"+userpass+"'"; System.err.println(sql); // 創(chuàng)建語句對(duì)象,用于執(zhí)行SQL語句 stmt = con.createStatement(); // 執(zhí)行SQL語句得到結(jié)果集 rs = stmt.executeQuery(sql); // 判斷rs中是否有數(shù)據(jù) if(rs.next()) b = true; else b = false; }catch(Exception e){ System.out.println(e.getMessage()); } finally{ // 關(guān)閉相關(guān)對(duì)象 if(rs!=null) try{ rs.close(); }catch(Exception ee){} if(stmt!=null) try{ stmt.close(); }catch(Exception ee){} if(con!=null) try{ con.close(); }catch(Exception ee){} } return b; }
4、運(yùn)行測試
可以使用數(shù)據(jù)庫中的用戶名和口令進(jìn)行登錄。
5、向頁面?zhèn)鬟f查詢結(jié)果
很多時(shí)候,客戶端需要從服務(wù)器端得到數(shù)據(jù)并顯示,因?yàn)閿?shù)據(jù)的查詢是由JavaBean完成的,對(duì)JavaBean的調(diào)用是通過Servlet完成的,Servlet中可以得到查詢的結(jié)果,但是顯示信息是由JSP頁面完成的,如何把Servlet中查詢的信息傳遞給JSP頁面呢?
前面介紹過可以通過request、session和application傳遞信息,因?yàn)榭梢宰孲ervlet和JSP處于相同的請(qǐng)求,所以3個(gè)對(duì)象都可以使用。但是因?yàn)閟ession和application的保存時(shí)間比較長,容易造成服務(wù)器資源的浪費(fèi),所以通常采用request存儲(chǔ)。
下面通過查詢并顯示所有信息的功能來介紹具體用法。需要完成的工作如下:
① 在User.java中添加查詢所有用戶信息的方法;
② 編寫查詢所有用戶信息的控制器;
③ 編寫顯示信息的JSP頁面。
6、 在User.java中添加方法
查詢所有用戶信息的方法如下:
public ArrayList getAllUser() { Connection con = null; Statement stmt = null; ResultSet rs = null; ArrayList users = new ArrayList(); try{ // 指出連接數(shù)據(jù)庫所需要的驅(qū)動(dòng)程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 建立與數(shù)據(jù)庫之間的連接 con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger"); // 編寫查詢數(shù)據(jù)庫信息的SQL語句 String sql="select * from usertable"; // 創(chuàng)建語句對(duì)象,用于執(zhí)行SQL語句 stmt = con.createStatement(); // 執(zhí)行SQL語句得到結(jié)果集 rs = stmt.executeQuery(sql); // 遍歷結(jié)果集 while(rs.next()) { String username = rs.getString(1); String userpass = rs.getString(2); // java.util.Date birthday = rs.getDate(3); // int age = rs.getInt(4); User user = new User(); user.setUsername(username); user.setUserpass(userpass); users.add(user); } }catch(Exception e){ System.out.println(e.getMessage()); } finally{ // 關(guān)閉相關(guān)對(duì)象 if(rs!=null) try{ rs.close(); }catch(Exception ee){} if(stmt!=null) try{ stmt.close(); }catch(Exception ee){} if(con!=null) try{ con.close(); }catch(Exception ee){} } return users; }
需要在類的前面引入java.util包,代碼如下:
7、 編寫控制器
代碼如下:
package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javabean.*; import java.util.*; public class GetAllUser extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { // 第一步:獲取用戶的輸入信息,這里不需要 // 第二步:調(diào)用JavaBean User user = new User(); ArrayList users=null; users = user.getAllUser(); // 第三步:傳值 request.setAttribute("users",users); // 第四步:選擇一個(gè)界面對(duì)用戶進(jìn)行響應(yīng) String forward="userlist.jsp"; RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { doGet(request,response); } }
這里假設(shè)使用userlist.jsp對(duì)用戶進(jìn)行響應(yīng)。
8、 配置控制器
在Web.xml中添加如下代碼:
<servlet> <servlet-name>getAllUser</servlet-name> <servlet-class>servlet.GetAllUser</servlet-class> </servlet> <servlet-mapping> <servlet-name>getAllUser</servlet-name> <url-pattern>/getAllUser</url-pattern> </servlet-mapping>
9、 編寫userlist.jsp響應(yīng)
<%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:forEach var="user" items="${users}"> 用戶名:${user.username} 口令:${user.userpass} <br> </c:forEach>
這里的c:forEach標(biāo)簽用于循環(huán)處理,items指出循環(huán)遍歷的集合,var聲明循環(huán)變量,表示集合中的一個(gè)元素。循環(huán)體中通過表達(dá)式語言顯示用戶信息。
10、運(yùn)行測試
http://127.0.0.1:8080/ch7/getAllUser
希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。
相關(guān)文章
JSP實(shí)用教程之簡易圖片驗(yàn)證碼的實(shí)現(xiàn)方法(附源碼)
圖片驗(yàn)證碼對(duì)大家來說應(yīng)該再熟悉不過了,而圖片驗(yàn)證碼的實(shí)現(xiàn)主要的技術(shù)點(diǎn)是如何生成一個(gè)圖片,下面這篇文章主要跟大家介紹了關(guān)于JSP實(shí)用教程之實(shí)現(xiàn)簡易圖片驗(yàn)證碼的方法,文中介紹的非常詳細(xì),需要的朋友們下面來一起看看吧。2017-07-07JSP多種web應(yīng)用服務(wù)器導(dǎo)致JSP源碼泄漏漏洞
JSP多種web應(yīng)用服務(wù)器導(dǎo)致JSP源碼泄漏漏洞...2006-10-10JSP開發(fā)之Spring方法注入之替換方法實(shí)現(xiàn)
這篇文章主要介紹了JSP開發(fā)之Spring方法注入之替換方法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07Java Servlet生成JSON格式數(shù)據(jù)并用jQuery顯示的方法
這篇文章主要介紹了Java Servlet生成JSON格式數(shù)據(jù)并用jQuery顯示的方法,涉及jsp基于Servlet操作json數(shù)據(jù)及使用jQuery顯示的相關(guān)技巧,需要的朋友可以參考下2015-12-12Jsp和PHP共用80端口整合Apache和Tomcat(訪問時(shí)無需加端口號(hào))
整合Apache和Tomcat,使得Java工程和PHP工程都能共用80端口,訪問網(wǎng)站時(shí),無需在地址欄中加端口號(hào),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06Java Web實(shí)現(xiàn)的基本MVC實(shí)例分析
這篇文章主要介紹了Java Web實(shí)現(xiàn)的基本MVC,以完整實(shí)例形式較為詳細(xì)的分析了JSP實(shí)現(xiàn)MVC架構(gòu)的具體步驟與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09