1. 程式人生 > >JSP、servlet、SQL三者之間的數據傳遞

JSP、servlet、SQL三者之間的數據傳遞

gre setattr == lec iterator connect cti 輸出 erp

JSP、servlet、SQL三者之間的數據傳遞

博客分類:
  • web開發
JSPservletSQL數據庫連接池web開發

前言:

最近一直在做WEB開發,現總結一下這一段時間的體會和感觸。

切記,web開發重點在於前臺數據交互,頁面美化而不要太沈溺於底層數據。

瀏覽器時代來到,向我們召喚出更炫、更簡潔、更方便、更大氣的網站。

這篇博客目的在於為大家解決web開發中最基礎的數據傳遞操作,讓大家有一個好的起點,在web開放中更加遊刃有余

背景:

目前業界很流行的WVC(model-view-control)開發模式,具體暫可理解為

模型是javaBean,

視圖是JSP,

控制是servlet。

web的運行機制:

數據首先在jsp上被展示出來,用戶看到頁面後觸發一些事件,並可能傳遞數據,這些數據和請求被控制器接收到,然後開始處理(往往會需要有一些數據庫的操作(查詢,修改數據庫數據)),當這些處理結束後,我們就需要將數據反饋到JSP上顯示給用戶看,完成一次完整的交互過程。

正文:

根據背景所述的順序,我們依次介紹----如何從JSP傳數據到servlet並接收、如何在servlet裏面獲得數據庫數據並處理、如何將servlet內的數據傳遞給jsp並顯示在網頁上。

(一)從JSP到servlet

1、發信息

表單提交

Html代碼 技術分享
  1. <form action="相對地址URL" name="表單名字" method="提交方式(post(推薦)、get)">
  2. <input type="text" name="文本框名字" /><!--一個文本輸入框-->
  3. </form>

定義一個函數來處理表單文本框檢查非空並提交表單事件

Html代碼 技術分享
  1. <script>
  2. $(document).ready(function(){
  3. $("#被單擊按鈕的ID").click(function(){
  4. if(document.all.文本框名字.value.length==0){
  5. alert("輸入不能為空");
  6. return false;
  7. }
  8. document.all.表單名字submit();
  9. return true;});
  10. });
  11. </script>

2、收信息來到表單提交時URL所指向的servlet文件,獲取傳遞過來的參數值

Java代碼 技術分享
  1. String search = java.net.URLDecoder.decode(request.getParameter("文本框名字"),"utf-8");
  2. System.out.println("在search的servlet中接收到的search參數為-->"+search);

ok,完成

(二)從servlet到數據庫

1、獲得數據(MySql為例)

①創建數據庫連接池

創建一個配置文件,如圖

技術分享

確保名字一致,

Xml代碼 技術分享
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context>
  3. <Resource name="jdbc/LeLe"
  4. auth="Container"
  5. type="javax.sql.DataSource"
  6. maxActive="50"
  7. maxIdle="5"
  8. maxWait="10000"
  9. logAbandoned="true"
  10. username=""
  11. password=""
  12. driverClassName="com.mysql.jdbc.Driver"
  13. url="jdbc:mysql://localhost:3306/lele" />
  14. </Context>
  15. <!-- jdbc/LeLe為項目名 -->

②獲取鏈接

Java代碼 技術分享
  1. public static Connection getConnection() {
  2. Connection con = null; //創建用於連接數據庫的Connection對象
  3. DataSource ds = null;
  4. try {
  5. Context initContext = new InitialContext();
  6. Context envContext = (Context)initContext.lookup("java:/comp/env");
  7. ds = (DataSource)envContext.lookup("jdbc/LeLe");
  8. System.out.println(ds.getConnection());
  9. } catch (Exception e1) {
  10. System.out.println("加載數據庫驅動失敗"+e1);
  11. return null;
  12. }// 加載Mysql數據驅動
  13. try {
  14. con = ds.getConnection();// 創建數據連接
  15. System.out.println("數據庫連接成功了");
  16. return con; //返回所建立的數據庫連接
  17. } catch (Exception e) {
  18. System.out.println("數據庫連接失敗" + e.getMessage());
  19. return null;
  20. }
  21. }

③執行SQL語句,並返回結果

Java代碼 技術分享
  1. /* 查詢數據庫,輸出符合要求的記錄的情況*/
  2. private static Connection conn;
  3. private static Statement st;
  4. private static ResultSet rs;
  5. // public static void main(String [] args){
  6. // query("select * from agreement");
  7. // }
  8. public static ResultSet query(String sql ) {
  9. System.out.println("函數DBQuery日誌");
  10. if(conn == null){
  11. conn = DBConnection.getConnection(); //同樣先要獲取連接,即連接到數據庫
  12. if(conn == null){
  13. System.out.println("數據庫連接失敗" );
  14. return null;
  15. }
  16. }
  17. System.out.println("查詢函數中連接到數據庫數據成功"+conn);
  18. try {
  19. st = (Statement) conn.createStatement(); //創建用於執行靜態sql語句的Statement對象,st屬局部變量
  20. rs = (ResultSet)st.executeQuery(sql); //執行sql查詢語句,返回查詢數據的結果集
  21. if(!rs.next()){
  22. System.out.println("數據庫中未查詢到數據");
  23. return null;
  24. }
  25. System.out.println("數據庫中已經查詢到數據");
  26. // String agreement_id = rs.getString(1);
  27. // String agreement_content = rs.getString(2);
  28. // System.out.println("已經查詢到數據的數據為----agreement_id:"+agreement_id+"\tagreement_content:"+agreement_content);
  29. return rs;
  30. } catch (SQLException e) {
  31. System.out.println("數據庫中查數據失敗");
  32. return null;
  33. }
  34. }
  35. public static void closeDB() throws SQLException{
  36. if(null != rs)
  37. rs.close();
  38. if(null != st)
  39. st.close();
  40. if(null != conn)
  41. conn.close(); //關閉數據庫連接
  42. }

2、處理數據(使用javaBean保存數據)

Java代碼 技術分享
  1. if(rs != null){
  2. do{
  3. User user0=new User();//一個javaBean的實例化對象
  4. user0.setUser_id(rs.getString("user_id"));
  5. user0.setUser_name(rs.getString("user_name"));
  6. user0.setUser_email(rs.getString("user_email"));
  7. user0.setUser_password(rs.getString("user_password"));
  8. collection.add(user0);
  9. System.out.println(rs.getString("user_id"));
  10. System.out.println(rs.getString("user_name"));
  11. System.out.println(rs.getString("user_email"));
  12. System.out.println(rs.getString("user_password"));
  13. }while(rs.next());
  14. }

Java代碼 技術分享
  1. public class User {
  2. private String user_id;//用戶編號
  3. private String user_email;//用戶郵編
  4. private String user_name;//用戶名
  5. private String user_password;//用戶密碼
  6. public String getUser_id() {
  7. return user_id;
  8. }
  9. public void setUser_id(String userId) {
  10. user_id = userId;
  11. }
  12. public String getUser_email() {
  13. return user_email;
  14. }
  15. public void setUser_email(String userEmail) {
  16. user_email = userEmail;
  17. }
  18. public String getUser_name() {
  19. return user_name;
  20. }
  21. public void setUser_name(String userName) {
  22. user_name = userName;
  23. }
  24. public String getUser_password() {
  25. return user_password;
  26. }
  27. public void setUser_password(String userPassword) {
  28. user_password = userPassword;
  29. }
  30. }

ok,完成

(三)從servlet到JSP

1、發數據

使用重定向將request和response轉發給一個JSP

Java代碼 技術分享
  1. //將數據發到JSP
  2. RequestDispatcher rd = request.getRequestDispatcher("index_search.jsp");
  3. request.setAttribute("test",collection);//存值
  4. rd.forward(request,response);//開始跳轉

2、接收數據

來到重定向指向的URL中獲取剛才發送過來的數據,並顯示在網頁上

Java代碼 技術分享
  1. Collection<User> collectionUser=(Collection<User>)request.getAttribute("test");
  2. Iterator it=collectionUser.iterator();
  3. while(it.hasNext())
  4. {
  5. User user=(User)it.next();
  6. out.println("<td ><div align=‘center‘>"+user.getUser_name()+"</td>");
  7. out.println("<td ><div align=‘center‘><a href=‘#‘ onclick=window.open(‘MyJsp.jsp?usid="+user.getUser_id().trim()+"‘,‘newwindow‘,‘width=600,height=350,top=300,left=300‘)>管理</a></td>");
  8. out.println("</tr>");
  9. }

ok,完成

結束語:

推薦一本JavaScript進階讀物--------《JavaScript修煉之道》

推薦一本項目開發實錄書籍----------《Java項目開發案例全程實錄》

JSP、servlet、SQL三者之間的數據傳遞