本实例实现用userreg.jsp页面中的表单提交注册请求,把注册信息提交给regservlet写入数据库并且查询新用户显示出来。
一、准备工作。
1.jdbc数据驱动开发包mysql-connector-java-5.1.26-bin.jar,拷贝并放置在WEB-INF下的lib中。
2.创建数据库user.
3.创建Web Project工程。
二、新建页面userreg.jsp.
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%request.setCharacterEncoding("utf-8"); %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 7 <title>我的userreg.jsp页面</title> 8 </head> 9 10 <body> 11 <!-- 此处才是重要代码 --> 12 <form name="userregfrm" action="regservlet" method="post"> 13 <table> 14 <tr><td align="right">用户名:</td><td><input type="text" name="name" id="name"value="zhangsanfeng"></td></tr> 15 <tr><td align="right">密码:</td><td><input type="text" name="password" id="password" value="mm123456"></td></tr> 16 <tr><td align="right">验证密码:</td><td><input type="text" name="confirm" id="confirm" value="mm123456"></td></tr> 17 <tr><td align="right">邮箱:</td><td><input type="text" name="email" id="email" value="zhangsanfeng@kaly.com"></td></tr> 18 <tr><td align="center" colspan="2"><input type="button" value="注册" onclick="check()"> <input name="clear" type="button" value="清空"></td></tr> 19 </table> 20 </form> 21 <!-- 此处才是重要代码 --> 22 </body> 23 <!-- 此处才是重要代码 --> 24 <script type="text/javascript"> 25 var password=document.getElementById("password"); 26 var confirm=document.getElementById("confirm"); 27 /* 验证两次输入的密码是否一致 */ 28 function check(){ 29 if(password.value!=confirm.value){ 30 alert("两次输入密码不一致,请检查后重新输入"); 31 password.value=""; 32 confirm.value=""; 33 password.focus(); 34 }else{ 35 document.forms[0].submit(); 36 } 37 } 38 </script> 39 <!-- 此处才是重要代码 --> 40 </html>
javascript中的代码函数用于在点击"注册"后验证两次的密码输入是否一致。至于"清空"按钮事件响应可以参考以上代码添加。
三、创建注册用户数据封装类regedUser.
1 package com.kaly.data; 2 3 public class regedUser { 4 private int ID;// 用户ID 5 private String name;// 用户名 6 private String nickName;// 用户昵称 7 private String email;// 电子邮箱 8 9 public regedUser() { 10 11 } 12 13 public regedUser(int iD, String name, String nickName, String email) { 14 super(); 15 ID = iD; 16 this.name = name; 17 this.nickName = nickName; 18 this.email = email; 19 } 20 21 public void setUserData(int iD, String name, String nickName, String email) { 22 ID = iD; 23 this.name = name; 24 this.nickName = nickName; 25 this.email = email; 26 } 27 28 public int getID() { 29 return ID; 30 } 31 32 public void setID(int iD) { 33 ID = iD; 34 } 35 36 public String getName() { 37 return name; 38 } 39 40 public void setName(String name) { 41 this.name = name; 42 } 43 44 public String getNickName() { 45 return nickName; 46 } 47 48 public void setNickName(String nickName) { 49 this.nickName = nickName; 50 } 51 52 public String getEmail() { 53 return email; 54 } 55 56 public void setEmail(String email) { 57 this.email = email; 58 } 59 60 @Override 61 public String toString() { 62 return "regedUser [ID=" + ID + ", name=" + name + ", nickName=" 63 + nickName + ", email=" + email + "]"; 64 } 65 66 }
四、创建数据库连接工具类GetData.
1 package com.kaly.data; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class GetData { 8 //jdbc驱动类名 9 String driverStr="com.mysql.jdbc.Driver"; 10 //数据库url 11 String dataStr="jdbc:mysql://192.168.2.100:3306/userinfo"; 12 //访问数据库的用户名 13 String username="root"; 14 //访问数据库的密码 15 String password="admin"; 16 //数据库连接对象 17 private Connection conn; 18 //构造方法 19 public GetData(){ 20 try { 21 //加载驱动类 22 Class.forName(driverStr); 23 } catch (ClassNotFoundException e) { 24 e.printStackTrace(); 25 } 26 } 27 //获得数据库连接对象的方法 28 public Connection getConnection(){ 29 30 try { 31 conn = (Connection) DriverManager.getConnection(dataStr,username,password); 32 } catch (SQLException e) { 33 e.printStackTrace(); 34 } 35 return conn; 36 } 37 //关闭数据库连接 38 public void close(){ 39 if (conn!=null) { 40 try { 41 conn.close(); 42 } catch (SQLException e) { 43 e.printStackTrace(); 44 } 45 } 46 } 47 }
五、创建Servlet处理类regservlet.使用模版创建。
1 package com.kaly.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import com.kaly.data.GetData; 16 import com.kaly.data.regedUser; 17 18 public class regservlet extends HttpServlet { 19 20 public void doGet(HttpServletRequest request, HttpServletResponse response) 21 throws ServletException, IOException { 22 doPost(request, response); 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 request.setCharacterEncoding("utf-8"); 28 response.setCharacterEncoding("utf-8"); 29 response.setContentType("text/html);charset=utf-8"); 30 //上面这一句解决在使用PrintWriter输出信息时的中文乱码问题 31 //获取表单请求的注册信息 32 String regName=request.getParameter("name"); 33 String regPwd=request.getParameter("password"); 34 String regEmail=request.getParameter("email"); 35 36 GetData data=new GetData();//实例化GetData对象 37 Connection connection=data.getConnection();//从data获得数据库连接对象 38 regedUser user=new regedUser();//创建用户数据封装对象 39 ResultSet rs; 40 //下面用来把注册信息添加到数据表 41 try { 42 PreparedStatement pStatement=connection.prepareStatement("insert into user(username,password,nickname,info) values(?,?,?,?)"); 43 pStatement.setString(1, regName); 44 pStatement.setString(2, regPwd); 45 pStatement.setString(3, "新用户"+regName);//随机生成一个昵称,可以用专用的程序进行修改 46 pStatement.setString(4, regEmail);//没有更改数据库,所以把email写入到info字段 47 pStatement.executeUpdate();//这里和查询时不一样 48 pStatement.close(); 49 } catch (SQLException e) { 50 e.printStackTrace(); 51 } 52 //下面用来将刚注册的用户数据封装起来用于显示 53 try { 54 PreparedStatement pStatement=connection.prepareStatement("select * from user where username=?"); 55 pStatement.setString(1, regName); 56 rs=pStatement.executeQuery(); 57 while(rs.next()){ 58 user.setUserData(rs.getInt(1), rs.getString(2), rs.getString(4), rs.getString(5)); 59 } 60 } catch (SQLException e) { 61 e.printStackTrace(); 62 } 63 data.close(); 64 //用PrintWriter显示注册信息 65 PrintWriter pw=response.getWriter(); 66 pw.print("注册用户ID为:"+user.getID()+"<br>"); 67 pw.print("注册用户名为:"+user.getName()+"<br>"); 68 pw.print("用户昵称是:"+user.getNickName()+"<br>"); 69 pw.print("用户邮箱地址:"+user.getEmail()+"<br>"); 70 pw.flush(); 71 pw.close(); 72 } 73 74 }
六、修改web.xml.
多次证明,模版自动生成的web.xml配置文件中,关于servlet的<url-pattern>节点不正确,应该按照代码中修改一下。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.0" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 6 <servlet> 7 <description>This is the description of my J2EE component</description> 8 <display-name>This is the display name of my J2EE component</display-name> 9 <servlet-name>loginserv</servlet-name> 10 <servlet-class>com.kaly.servlet.loginserv</servlet-class> 11 </servlet> 12 <servlet> 13 <description>This is the description of my J2EE component</description> 14 <display-name>This is the display name of my J2EE component</display-name> 15 <servlet-name>regservlet</servlet-name> 16 <servlet-class>com.kaly.servlet.regservlet</servlet-class> 17 </servlet> 18 19 20 <servlet-mapping> 21 <servlet-name>loginserv</servlet-name> 22 <url-pattern>/loginserv</url-pattern> 23 </servlet-mapping> 24 <servlet-mapping> 25 <servlet-name>regservlet</servlet-name> 26 <url-pattern>/regservlet</url-pattern> 27 </servlet-mapping> 28 29 </web-app>
七、一切就绪,重启服务,加载页面。
在这里为了测试方便,没有使用密码框,可以改过来。
现在输入新的信息,把两次的密码填写不一致。
点击"注册"后会弹出提示。
点击确定后两个密码输入框会被清空,光标置于密码框内,要求重新输入。我们重新输入两个一样的密码之后,再点击"注册"。会跳转到信息显示页面。
实际上这个页面现实的内容是添加完注册信息之后又从数据库中查询得到的。便于我们实现在用户注册之后立即自动登录。
八、查看此时的数据库user。
最后一条就是我们刚刚注册添加的用户数据。
九、整个项目的结构是这样的。