JSP培訓(7)——使用JDBC完成動態驗證、採用MVC完成資料查詢

來源:互聯網
上載者:User
 

目標:l         掌握JDBC連結資料庫的基本過程;l         掌握使用JDBC進行資料查詢。主要內容:l         在上一次的執行個體基礎上,通過串連資料庫完成使用者登入功能,介紹JDBC的基本用法;l         通過顯示所有使用者資訊進一步介紹JDBC的用法和查詢結果的處理。1、 JDBC概念Java Database Connectivity的縮寫,用於串連Java應用程式與各種關聯式資料庫的標準介面。對於編程人員來說,串連任何資料庫都是相同的。2、 要使用JDBC開發應用需要哪些準備工作?安裝資料庫,包括資料庫表的建立;根據資料庫的類型,得到資料庫的JDBC驅動程式,不同的資料庫管理系統需要不同的JDBC驅動程式,並且不同版本的資料庫管理系統需要的驅動程式有可能不同的;這裡使用Oracle資料庫,驅動程式需要放在WEB-INF/lib下面。資料庫的相關資訊:資料庫的IP地址,服務的連接埠號碼,資料庫的名字,串連資料庫的使用者名稱和密碼。3、 舉例:使用資料庫對使用者登入資訊進行驗證。需要修改User.java中驗證使用者資訊的方法。1)在類的前面增加了一個import語句:import java.sql.*;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{          // 指出串連資料庫所需要的驅動程式         Class.forName("oracle.jdbc.driver.OracleDriver");         // 建立與資料庫之間的串連// myserver修改為資料庫伺服器IP,mydb為資料庫名        con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");         // 編寫查詢資料庫資訊的SQL語句        String sql="select * from usertable where username='"+username+"' and userpass='"+userpass+"'";         System.err.println(sql);         // 建立語句對象,用於執行SQL語句        stmt = con.createStatement();         // 執行SQL語句得到結果集        rs = stmt.executeQuery(sql);               // 判斷rs中是否有資料        if(rs.next())          b = true;        else          b = false;      }catch(Exception e){          System.out.println(e.getMessage());      }       finally{        // 關閉相關對象        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、 運行測試可以使用資料庫中的使用者名稱和口令進行登入。5、 向頁面傳遞查詢結果很多時候,用戶端需要從伺服器端得到資料並顯示,因為資料的查詢是由JavaBean完成的,對JavaBean的調用是通過Servlet完成的,Servlet中可以得到查詢的結果,但是顯示資訊是由JSP頁面完成的,如何把Servlet中查詢的資訊傳遞給JSP頁面呢?前面介紹過可以通過request、session和application傳遞資訊,因為可以讓Servlet和JSP處於相同的請求,所以3個對象都可以使用。但是因為session和application的儲存時間比較長,容易造成伺服器資源的浪費,所以通常採用request儲存。下面通過查詢並顯示所有資訊的功能來介紹具體用法。需要完成的工作如下:l         在User.java中添加查詢所有使用者資訊的方法;l         編寫查詢所有使用者資訊的控制器;l         編寫顯示資訊的JSP頁面。6、 在User.java中添加方法查詢所有使用者資訊的方法如下:   public ArrayList getAllUser()   {      Connection con = null;      Statement stmt = null;      ResultSet rs = null;      ArrayList users = new ArrayList();       try{          // 指出串連資料庫所需要的驅動程式         Class.forName("oracle.jdbc.driver.OracleDriver");         // 建立與資料庫之間的串連        con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");         // 編寫查詢資料庫資訊的SQL語句        String sql="select * from usertable";         // 建立語句對象,用於執行SQL語句        stmt = con.createStatement();         // 執行SQL語句得到結果集        rs = stmt.executeQuery(sql);               // 遍曆結果集        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{        // 關閉相關對象        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包,代碼如下:import 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   {      // 第一步:擷取使用者的輸入資訊,這裡不需要       // 第二步:調用JavaBean      User user = new User();      ArrayList users=null;      users = user.getAllUser();            // 第三步:傳值      request.setAttribute("users",users);       // 第四步:選擇一個介面對使用者進行響應      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);   }}這裡假設使用userlist.jsp對使用者進行響應。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響應<%@ 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標籤用於迴圈處理,items指出迴圈遍曆的集合,var聲明迴圈變數,表示集合中的一個元素。迴圈體中通過運算式語言顯示使用者資訊。10、              運行測試http://127.0.0.1:8080/ch7/getAllUser

 

參考教材:《Java Web程式設計基礎教程》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.