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


前言:

       最近一直在做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.   
  3.         <input type="text" name="文本框名字"  /><!--一個文本輸入框-->  
  4.   
  5. </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.   
  3.     Connection con = null;    //創建用於連接數據庫的Connection對象  
  4.     DataSource ds = null;  
  5.     try {  
  6.   
  7.         Context initContext = new InitialContext();  
  8.         Context envContext = (Context)initContext.lookup("java:/comp/env");  
  9.         ds = (DataSource)envContext.lookup("jdbc/LeLe");  
  10.         System.out.println(ds.getConnection());  
  11.     } catch (Exception e1) {  
  12.         System.out.println("加載數據庫驅動失敗"+e1);     
  13.         return null;  
  14.     }// 加載Mysql數據驅動  
  15.     try {  
  16.         con = ds.getConnection();// 創建數據連接  
  17.         System.out.println("數據庫連接成功了");     
  18.         return con;    //返回所建立的數據庫連接  
  19.              
  20.     } catch (Exception e) {  
  21.         System.out.println("數據庫連接失敗" + e.getMessage());  
  22.         return null;  
  23.     }  
  24. }  

 

③執行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.   
  19.         try {  
  20.             st = (Statement) conn.createStatement();    //創建用於執行靜態sql語句的Statement對象,st屬局部變量     
  21.             rs = (ResultSet)st.executeQuery(sql);    //執行sql查詢語句,返回查詢數據的結果集  
  22.             if(!rs.next()){  
  23.                 System.out.println("數據庫中未查詢到數據");  
  24.                 return null;  
  25.             }         
  26.             System.out.println("數據庫中已經查詢到數據");  
  27. //            String agreement_id = rs.getString(1);     
  28. //            String agreement_content = rs.getString(2);  
  29. //            System.out.println("已經查詢到數據的數據為----agreement_id:"+agreement_id+"\tagreement_content:"+agreement_content);  
  30.             return rs;  
  31.         } catch (SQLException e) {  
  32.             System.out.println("數據庫中查數據失敗");  
  33.             return null;  
  34.         }  
  35.          
  36.     }  
  37.   
  38.     public static void closeDB() throws SQLException{  
  39.         if(null != rs)  
  40.             rs.close();  
  41.         if(null != st)  
  42.             st.close();  
  43.         if(null != conn)  
  44.             conn.close();    //關閉數據庫連接  
  45.     }  

 

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.      
  7.     public String getUser_id() {  
  8.         return user_id;  
  9.     }  
  10.     public void setUser_id(String userId) {  
  11.         user_id = userId;  
  12.     }  
  13.     public String getUser_email() {  
  14.         return user_email;  
  15.     }  
  16.     public void setUser_email(String userEmail) {  
  17.         user_email = userEmail;  
  18.     }  
  19.     public String getUser_name() {  
  20.         return user_name;  
  21.     }  
  22.     public void setUser_name(String userName) {  
  23.         user_name = userName;  
  24.     }  
  25.     public String getUser_password() {  
  26.         return user_password;  
  27.     }  
  28.     public void setUser_password(String userPassword) {  
  29.         user_password = userPassword;  
  30.     }  
  31. }  

 

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項目開發案例全程實錄》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM