JSP用户注册功能实践

用户注册功能是互联网上最常见的功能。在这一小节中,我们来学习如何使用JSP来实现用户注册功能,并将用户注册的个人信息存储到数据库的表中。可以在JSP文件中编写数据库逻辑,但是将数据操作的逻辑与JSP页面分开是一种常见的做法。 在这里,我们将使用DAO,工厂方法,DTO和单例设计模式。

打开Eclipse,创建一个动态Web项目:jsp-register
JSP用户注册功能实践

主要有以下几个文件:

  • index.jsp – 用于为用户提供输入的表单界面。
  • User.java – 一个具有属性以及settergetter方法的bean类。
  • doreg.jsp – 一个处理请求并调用方法的jsp文件。
  • DBProvider.java – 一个包含许多常量的接口,例如:DRIVER_CLASSCONNECTION_URLUSERNAMEPASSWORD
  • 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类具有settergetter方法的3个属性:usernameemailpasswd

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;     }  } 

运行上面项目,结果如下:

JSP用户注册功能实践

JSP用户注册功能实践

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264025.html

(0)
上一篇 2022年6月6日
下一篇 2022年6月6日

相关推荐

发表回复

登录后才能评论