1.上一篇已经实现了与数据库的连接测试,这一次就实现对用户基本信息的注册功能,,,,,,本次整体构架如下图所示:
2.第一步,创建一个实体类User.java,实现对用户基本信息的封装,如下图所示:
代码如下:
1 package lin.entity; 2 3 public class User { 4 5 //定义的变量 6 //与数据库中t_user中定义的名称一致 7 8 //用户ID 9 private int id; 10 //用户名 11 private String name; 12 //用户密码 13 private String password; 14 //用户邮箱 15 private String email; 16 //获取变量的get和set方法以及toSting方法 17 public int getId() { 18 return id; 19 } 20 public void setId(int id) { 21 this.id = id; 22 } 23 public String getName() { 24 return name; 25 } 26 public void setName(String name) { 27 this.name = name; 28 } 29 public String getPassword() { 30 return password; 31 } 32 public void setPassword(String password) { 33 this.password = password; 34 } 35 public String getEmail() { 36 return email; 37 } 38 public void setEmail(String email) { 39 this.email = email; 40 } 41 @Override 42 public String toString() { 43 return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]"; 44 } 45 46 }
1 package lin.entity; 2 3 public class User { 4 5 //定义的变量 6 //与数据库中t_user中定义的名称一致 7 8 //用户ID 9 private int id; 10 //用户名 11 private String name; 12 //用户密码 13 private String password; 14 //用户邮箱 15 private String email; 16 //获取变量的get和set方法以及toSting方法 17 public int getId() { 18 return id; 19 } 20 public void setId(int id) { 21 this.id = id; 22 } 23 public String getName() { 24 return name; 25 } 26 public void setName(String name) { 27 this.name = name; 28 } 29 public String getPassword() { 30 return password; 31 } 32 public void setPassword(String password) { 33 this.password = password; 34 } 35 public String getEmail() { 36 return email; 37 } 38 public void setEmail(String email) { 39 this.email = email; 40 } 41 @Override 42 public String toString() { 43 return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]"; 44 } 45 46 }
3.第二步:创建一个servlet类,实现对数据库中用户信息的插入、查找等,具体的实现代码如下所示:
1 package lin.Servlet; 2 3 import java.io.IOException; 4 import java.sql.Connection; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import lin.db.DBServlet; 16 import lin.entity.User; 17 18 /** 19 * Servlet implementation class RegisterServlet 20 */ 21 /*@WebServlet("/RegisterServlet")*/ 22 public class RegisterServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#HttpServlet() 27 */ 28 public RegisterServlet() { 29 super(); 30 // TODO Auto-generated constructor stub 31 } 32 33 /** 34 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 //跳转到register.jsp 39 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 40 } 41 42 /** 43 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 44 */ 45 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 46 // TODO Auto-generated method stub 47 //contentType=”text/html;charset=UTF-8”的作用是指定服务器响应给浏览器的编码。 48 /*request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码, 49 * 不指定的话使用iso-8859-1。(只解决POST乱码) */ 50 request.setCharacterEncoding("UTF-8"); 51 response.setContentType("text/html);charset=UTF-8"); 52 53 System.out.println("注册的用户名是:"+request.getParameter("name")); 54 55 //获取实体User中的变量,将变量插入到数据库中,完成注册 56 User user=new User(); 57 //获取注册的用户名,"name"要与jsp页面中的变量名一致 58 String name=request.getParameter("name"); 59 //获取注册的密码 60 String password=request.getParameter("password"); 61 //获取注册的邮箱 62 String email=request.getParameter("email"); 63 64 //将获取到的注册信息放入user中 65 user.setName(name); 66 user.setPassword(password); 67 user.setEmail(email); 68 69 try { 70 //获取数据库的连接,并将user中的数据插入数据库中 71 //查询当前的用户名和邮箱在数据库中是否已经被注册过 72 String sql="select id from t_users where name =? or email=?"; 73 DBServlet conn=new DBServlet(); 74 //与数据库获取连接 75 Connection connection=conn.getConn(); 76 //SQL语句被预编译并存储在PreparedStatement对象中 77 PreparedStatement statement=connection.prepareStatement(sql); 78 //将第一个问号的name值添加进去 79 statement.setString(1, name); 80 statement.setString(2, email); 81 //执行sql语句 82 ResultSet rs=statement.executeQuery(); 83 84 //判断rs集合中是否为null,为null表示数据库中不存在重复的 85 //否则存在重复数据,注册失败 86 if(rs.next()) 87 { 88 System.out.println("注册失败,用户名或者邮箱已经存在,"); 89 //重新跳转到注册页面 90 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response);; 91 } 92 else 93 { 94 String sql1="insert into t_users (name,password,email) values(?,?,?)"; 95 statement=connection.prepareStatement(sql1); 96 statement.setString(1, name); 97 statement.setString(2, password); 98 statement.setString(3, email); 99 100 int result=statement.executeUpdate(); 101 if(result==1) 102 { 103 System.out.println("注册成功,欢迎你:"+name); 104 request.setAttribute("remind", "注册成功"); 105 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 106 } 107 else 108 { 109 System.out.println("注册失败"); 110 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 111 } 112 113 } 114 115 //关闭数据库连接 116 rs.close(); 117 statement.close(); 118 connection.close(); 119 } catch (SQLException e) { 120 // TODO Auto-generated catch block 121 System.out.println("数据库连接失败"); 122 e.printStackTrace(); 123 } 124 125 } 126 127 }
1 package lin.Servlet; 2 3 import java.io.IOException; 4 import java.sql.Connection; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import lin.db.DBServlet; 16 import lin.entity.User; 17 18 /** 19 * Servlet implementation class RegisterServlet 20 */ 21 /*@WebServlet("/RegisterServlet")*/ 22 public class RegisterServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#HttpServlet() 27 */ 28 public RegisterServlet() { 29 super(); 30 // TODO Auto-generated constructor stub 31 } 32 33 /** 34 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 //跳转到register.jsp 39 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 40 } 41 42 /** 43 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 44 */ 45 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 46 // TODO Auto-generated method stub 47 //contentType=”text/html;charset=UTF-8”的作用是指定服务器响应给浏览器的编码。 48 /*request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码, 49 * 不指定的话使用iso-8859-1。(只解决POST乱码) */ 50 request.setCharacterEncoding("UTF-8"); 51 response.setContentType("text/html);charset=UTF-8"); 52 53 System.out.println("注册的用户名是:"+request.getParameter("name")); 54 55 //获取实体User中的变量,将变量插入到数据库中,完成注册 56 User user=new User(); 57 //获取注册的用户名,"name"要与jsp页面中的变量名一致 58 String name=request.getParameter("name"); 59 //获取注册的密码 60 String password=request.getParameter("password"); 61 //获取注册的邮箱 62 String email=request.getParameter("email"); 63 64 //将获取到的注册信息放入user中 65 user.setName(name); 66 user.setPassword(password); 67 user.setEmail(email); 68 69 try { 70 //获取数据库的连接,并将user中的数据插入数据库中 71 //查询当前的用户名和邮箱在数据库中是否已经被注册过 72 String sql="select id from t_users where name =? or email=?"; 73 DBServlet conn=new DBServlet(); 74 //与数据库获取连接 75 Connection connection=conn.getConn(); 76 //SQL语句被预编译并存储在PreparedStatement对象中 77 PreparedStatement statement=connection.prepareStatement(sql); 78 //将第一个问号的name值添加进去 79 statement.setString(1, name); 80 statement.setString(2, email); 81 //执行sql语句 82 ResultSet rs=statement.executeQuery(); 83 84 //判断rs集合中是否为null,为null表示数据库中不存在重复的 85 //否则存在重复数据,注册失败 86 if(rs.next()) 87 { 88 System.out.println("注册失败,用户名或者邮箱已经存在,"); 89 //重新跳转到注册页面 90 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response);; 91 } 92 else 93 { 94 String sql1="insert into t_users (name,password,email) values(?,?,?)"; 95 statement=connection.prepareStatement(sql1); 96 statement.setString(1, name); 97 statement.setString(2, password); 98 statement.setString(3, email); 99 100 int result=statement.executeUpdate(); 101 if(result==1) 102 { 103 System.out.println("注册成功,欢迎你:"+name); 104 request.setAttribute("remind", "注册成功"); 105 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 106 } 107 else 108 { 109 System.out.println("注册失败"); 110 request.getRequestDispatcher("/WEB-INF/page/register.jsp").forward(request, response); 111 } 112 113 } 114 115 //关闭数据库连接 116 rs.close(); 117 statement.close(); 118 connection.close(); 119 } catch (SQLException e) { 120 // TODO Auto-generated catch block 121 System.out.println("数据库连接失败"); 122 e.printStackTrace(); 123 } 124 125 } 126 127 }
4.在创建Servlet的同时,其配置文件web.xml中要对Servlet进行配置:如下图所示:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 3 <display-name>Test1</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <servlet> 14 <servlet-name>RegisterServlet</servlet-name> 15 <servlet-class>lin.Servlet.RegisterServlet</servlet-class> 16 </servlet> 17 <servlet-mapping> 18 <servlet-name>RegisterServlet</servlet-name> 19 <url-pattern>/register</url-pattern> 20 </servlet-mapping> 24 </web-app>
5.第四步:创建一个register.jsp注册页面,实现前端页面与后端数据的交互
代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 <h2>${remind}</h2> 12 <h1>注册页面</h1> 13 <!-- 使用form表单实现对用户信息的注册, 14 action:规定当提交表单时,向何处发送表单数据。 15 此处使用Servlet实现数据的传送,与web.xml中的名称要保持一致 16 method: 表单数据将通过 method 属性附加到 URL 上 17 --> 18 <form action="register" method="post"> 19 登录名: <input type="text" name="name"><br /> 密码为: <input 20 type="password" name="password"><br /> 邮箱为: <input 21 type="text" name="email"><br /> <input type="submit" 22 value="注册"> 23 </form> 24 25 </body> 26 </html>
6.第五步:在index.jsp中添加下面一句话,在访问该项目时,直接跳转到注册页面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body>
<--“register”要与web.xml中的url-pattern中的名称保持一致 --> 10 <%response.sendRedirect("register"); %> 11 </body> 12 </html>
7.第六步:进行测试啦啦啦------(运行tomcat,在浏览器中输入:http://localhost:8080/Test1)
点击回车:
输入用户名、密码、邮箱(注意:本次的代码并没有对用户名、密码、邮箱进行规范约束)
点击注册,浏览器页面的变化如下所示:
后端控制台输出如下所示:
8.对于用户的注册功能已经使用Servlet完成了实现-----
OK,,,,,,,,,