学习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.数据库及表创建