用户注册功能是互联网上最常见的功能。在这一小节中,我们来学习如何使用JSP来实现用户注册功能,并将用户注册的个人信息存储到数据库的表中。可以在JSP文件中编写数据库逻辑,但是将数据操作的逻辑与JSP页面分开是一种常见的做法。 在这里,我们将使用DAO
,工厂方法,DTO和单例设计模式。
打开Eclipse,创建一个动态Web项目:jsp-register
主要有以下几个文件:
index.jsp
– 用于为用户提供输入的表单界面。User.java
– 一个具有属性以及setter
和getter
方法的bean类。doreg.jsp
– 一个处理请求并调用方法的jsp文件。DBProvider.java
– 一个包含许多常量的接口,例如:DRIVER_CLASS
,CONNECTION_URL
,USERNAME
和PASSWORD
DBConnection.java
– 一个返回Connection
对象的类,它使用单例和工厂方法设计模式。RegisterDao.java
– 一个负责访问数据库的DAO类。
在此示例中,我们使用MySQL数据库。首先在MySQL数据库中创建表:
CREATE TABLE `xn_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT '', `password` varchar(32) DEFAULT '', `email` varchar(255) DEFAULT '', `instro` varchar(255) DEFAULT '', `status` tinyint(1) unsigned DEFAULT '0', `created` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
文件:index.jsp
这里为了方便演示,只使用三个字段,以使概念更清晰并简化应用程序流程。还可以根据需要设置其他字段,例如:个人简介,国家/地区,爱好等。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP用户注册功能实践(xntutor.com)</title> <link rel="stylesheet" href="http://www.xntutor.com/static/css/fordemo.css?v=v.1.0894"> </head> <body class="inside-header inside-aside is-dialog"> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> <div class="row"> <form class="form-horizontal" action="doreg.jsp" method="post"> <h2 style="width:100%;text-align:center;padding: 48px;">JSP用户注册功能实践</h2> <div class="form-group"> <label for="name" class="control-label col-xs-12 col-sm-4">用户名:</label> <div class="col-xs-12 col-sm-4"> <input id="name" class="form-control" name="name" type="text" value=""> </div> </div> <div class="form-group"> <label for="name" class="control-label col-xs-12 col-sm-4">电子邮箱:</label> <div class="col-xs-12 col-sm-4"> <input id="name" class="form-control" name="email" type="text" value=""> </div> </div> <div class="form-group"> <label for="name" class="control-label col-xs-12 col-sm-4">密码:</label> <div class="col-xs-12 col-sm-4"> <input id="name" class="form-control" name="passwd" type="password" value=""> </div> </div> <div class="form-group"> <label class="control-label col-xs-12 col-sm-4"></label> <div class="col-xs-12 col-sm-4"> <button type="submit" class="btn btn-success btn-embossed">提交注册</button> </div> </div> </form> </div> </div> </body> </html>
文件:doreg.jsp
这个jsp文件包含所有到bean类的对象的输入值,该类作为参数传递到RegisterDao
类的register()
方法中。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注册处理...(xntutor.com)</title> </head> <body> <%@page import="com.xntutor.dao.RegisterDao"%> <jsp:useBean id="uobj" class="com.xntutor.bean.User" /> <jsp:setProperty property="*" name="uobj" /> <% int status = RegisterDao.register(uobj); if (status > 0){ out.print("注册成功~"); }else{ out.print("注册失败~"); } %> </body> </html>
文件:User.java
此bean类具有setter
和getter
方法的3个属性:username
,email
和passwd
。
package com.xntutor.bean; public class User { private int id; private String name; private String passwd; private String email; private String instro; private int status; private String created; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPasswd() { return passwd; } public void setPasswd(String password) { this.passwd = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getInstro() { return instro; } public void setInstro(String instro) { this.instro = instro; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getCreated() { return created; } public void setCreated(String created) { this.created = created; } }
文件:DBProvider.java
此接口包含四个常量,每个数据库的常量可能不同。
package com.xntutor.db; public class DBProvider { static String DRIVER = "com.mysql.cj.jdbc.Driver"; static String CONNECTION_URL = "jdbc:mysql://localhost/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"; static String DBNAME = "testdb"; static String USERNAME = "root"; static String PASSWORD = "123456"; }
文件:ConnectionProvider.java
此类负责返回Connection
对象。 此处,驱动程序类仅加载一次,并且连接对象仅获取一次内存。
package com.xntutor.db; import java.sql.*; public class DBConnection { private static Connection con = null; static { try { Class.forName(DBProvider.DRIVER); con = DriverManager.getConnection(DBProvider.CONNECTION_URL, DBProvider.USERNAME, DBProvider.PASSWORD); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { System.out.println("Connect to MySQL..."); return con; } }
文件:RegisterDao.java
此类将Bean组件的值插入数据库。
package com.xntutor.dao; import java.sql.*; import java.text.SimpleDateFormat; import com.xntutor.bean.User; import com.xntutor.db.DBConnection; public class RegisterDao { public static int register(User u) { int status = 0; try { Connection con = DBConnection.getConnection(); if(con==null) { System.out.println("Connection con is null..."); } java.util.Date d = new java.util.Date(); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String created = format1.format(d); PreparedStatement ps = con.prepareStatement("insert into xn_user(id,name,email,password,instro,status, created) values(?,?,?,?,?,?,?)"); ps.setInt(1, 0); ps.setString(2, u.getName()); ps.setString(3, u.getEmail()); ps.setString(4, u.getPasswd()); ps.setString(5, u.getInstro()); ps.setInt(6, 1); ps.setString(7, created); status = ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } return status; } }
运行上面项目,结果如下:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264025.html