學習javaWeb,首先要學習基礎的jsp,servlet,弄通了機制然后就得心應手了。我們來實現一個簡單的實例來學習。
我們的任務有:1.數據庫及表創建
二、實現用戶注冊
上節實現了數據庫設計,本節開始來實現工程的編碼,我們采用MVC設計模式,並且結合三層架構來做,並且加上VO輔助層。
那么,工程的中的包關系如下圖所示:
下面來實現用戶注冊功能。
要實現用戶注冊功能,我們需要完成以下幾個任務:
1.寫實體vo類
UserVo.java
1 package com.denny.user.vo; 2 3 public class UserVo { 4 private int userId; 5 // 用戶Id 6 private String userName ; 7 // 用戶姓名 8 private String userPassword; 9 // 用戶密碼 10 private String userProvince; 11 // 用戶省份 12 private String userCity; 13 // 用戶城市 14 private String userSex; 15 // 用戶性別 16 private String userHobby; 17 // 用戶愛好 18 private String userDescribe; 19 // 用戶描述 20 private int userDisplay; 21 // 用戶狀態 22 // ...... 23 // 省略了getter和setter方法 24 }
(注:上面的代碼中並沒有生成getter和setter方法)
2.用戶注冊jsp頁面
我們要實現的注冊頁面如下圖所示:
在工程的WebRoot目錄下新建了一個userregister.jsp
主要代碼如下:
1 <form action="servlet/ServletUserRegister" method="post"> 2 <table align = "center" border="1" style="border-collapse: collapse;"> 3 <tr> 4 <td colspan="2">用戶注冊</td> 5 </tr> 6 <tr> 7 <td>用戶名:</td> 8 <td><input type="text" name="userName" /></td> 9 </tr> 10 <tr> 11 <td>密碼:</td> 12 <td><input type="password" name="userPassword" /></td> 13 </tr> 14 <tr> 15 <td>地址:</td> 16 <td> 17 <select name="userProvince" id="userProvince" onchange="addCity()"></select>省 18 <select name="userCity" id="userCity"></select>市 19 <!-- 此處是省市聯動,具體javascript的代碼實現請參見 html+js實現城市聯動、日期聯動示例 --> 20 </td> 21 </tr> 22 <tr> 23 <td>性別:</td> 24 <td> 25 <input type="radio" name="userSex" value="男" checked="checked" />男 26 <input type="radio" name="userSex" value="女" />女 27 </td> 28 </tr> 29 <tr> 30 <td>愛好:</td> 31 <td> 32 <input type="checkbox" name="userHobby" value="籃球" />籃球 33 <input type="checkbox" name="userHobby" value="足球" />足球 34 <input type="checkbox" name="userHobby" value="羽毛球" />羽毛球 35 <input type="checkbox" name="userHobby" value="跑步" />跑步 36 </td> 37 </tr> 38 <tr> 39 <td>個人描述:</td> 40 <td> 41 <textarea cols="10" rows="3" name="userDescribe"></textarea> 42 </td> 43 </tr> 44 <tr> 45 <td class="tdstyle" colspan="2"> 46 <input type="submit" value="注冊" /> 47 </td> 48 </tr> 49 </table> 50 </form>
3.注冊servlet
在jsp頁面中我們定義表單的提交action路徑為:ServletUserRegister,method方式為:post
那么現在就實現它吧。ServletUserRegister.java主要代碼如下:
1 public void doPost(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 request.setCharacterEncoding("utf-8"); 5 response.setCharacterEncoding("utf-8"); 6 // 設置編碼格式為 UTF-8 7 String userName = request.getParameter("userName"); 8 String userPassword = request.getParameter("userPassword"); 9 String userProvince = request.getParameter("userProvince"); 10 String userCity = request.getParameter("userCity"); 11 String userSex = request.getParameter("userSex"); 12 String userDescribe = request.getParameter("userDescribe"); 13 String userHobby[] = request.getParameterValues("userHobby"); 14 // 前台得到 用戶輸入數據 15 String str = ""; 16 for (int i = 0; i < userHobby.length; i++) { 17 str = str + userHobby[i]; 18 // 得到每個元素 19 if (i != (userHobby.length - 1)) { 20 str += ","; 21 // 如果不為最后一個元素,將其尾部加一個‘,’隔開 22 } 23 } 24 // for 循環拼接愛好數組中的數據 25 26 UserVo user = new UserVo(); 27 // 實例化一個VO對象 28 user.setUserName(userName); 29 user.setUserPassword(userPassword); 30 user.setUserProvince(userProvince); 31 user.setUserCity(userCity); 32 user.setUserHobby(str); 33 user.setUserSex(userSex); 34 user.setUserDescribe(userDescribe); 35 // 將前台得到的數據存入VO 36 UserDao userDao = new UserDao(); 37 // 實例化一個數據庫操作對象 38 userDao.insertUser(user); 39 // 調用增加用戶方法 40 request.getRequestDispatcher("/userlogin.jsp").forward(request, 41 response); 42 // 轉到登錄頁面 43 }
4.數據庫連接
在工程中,每次進行數據操作都要從數據庫獲得一個連接,如果每次都寫一遍則顯得代碼冗余,因此寫一個可復用的數據庫管理類是比較足取的。
這個數據庫管理類,Dbmanage.java代碼如下:
1 package com.unis.dbmanage; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class Dbmanage { 10 public Connection initDB() { 11 // 初始化數據庫連接方法 12 Connection conn = null; 13 // 創建一個Connection句柄 14 try { 15 Class.forName("com.mysql.jdbc.Driver"); 16 // 加載數據庫驅動 17 String url = "jdbc:mysql://localhost:3306/userdb?charaterEncoding=utf-8"; 18 // 定義數據庫地址url,並設置編碼格式 19 conn = DriverManager.getConnection(url, "root", ""); 20 // 得到數據連接 21 } catch (ClassNotFoundException e) { 22 23 e.printStackTrace(); 24 } catch (SQLException e) { 25 26 e.printStackTrace(); 27 } 28 return conn; 29 // 返回數據庫連接 30 } 31 32 public void closeDB(Statement sta, Connection conn) { 33 // 關閉數據庫連接(無結果集) 34 try { 35 sta.close(); 36 conn.close(); 37 } catch (SQLException e) { 38 39 e.printStackTrace(); 40 } 41 42 } 43 44 public void closeDB(ResultSet rs, Statement sta, Connection conn) { 45 // 關閉數據庫連接(有結果集) 46 try { 47 rs.close(); 48 sta.close(); 49 conn.close(); 50 } catch (SQLException e) { 51 52 e.printStackTrace(); 53 } 54 55 } 56 }
寫了這個數據庫管理類,每次想要連接,只需調用 initDB()方法 即可。下面寫數據庫操作類
5.數據操作類
在dao包中,有一個專門對用戶數據庫操作的類,UserDao.java,其內部的方法都是對數據庫的操作方法,注冊使用的insertUser()方法也位於其中。
insertUser()方法代碼如下:
1 public void insertUser(UserVo user) { 2 // 用戶注冊方法 3 Dbmanage dbmanage = new Dbmanage(); 4 Connection conn = null; 5 Statement sta = null; 6 7 try { 8 conn = dbmanage.initDB(); 9 sta = conn.createStatement(); 10 String sql = "INSERT INTO usertable (user_name,user_password,user_province,user_city,user_sex,user_hobby,user_describe)VALUES('" 11 + user.getUserName() 12 + "','" 13 + user.getUserPassword() 14 + "','" 15 + user.getUserProvince() 16 + "','" 17 + user.getUserCity() 18 + "','" 19 + user.getUserSex() 20 + "','" 21 + user.getUserHobby() 22 + "','" 23 + user.getUserDescribe() 24 + "')"; 25 sta.executeUpdate(sql); 26 } catch (SQLException e) { 27 28 e.printStackTrace(); 29 } finally { 30 // 執行完關閉數據庫 31 dbmanage.closeDB(sta, conn); 32 } 33 }
寫到這里,一個簡單的用戶注冊過程及走完了,當用戶輸入數據並且點擊“注冊”按鈕提交表單之后,servlet就會調用UserDao.java中的方法,將數據插入到數據庫中。
鏈接導航 1.數據庫及表創建