用户注册登录测试版(jsp+servlet+mysql)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

总体内容不算复杂,主要是利用jsp+servlet+mysql去实现web端的注册/登录/显示当前用户/退出功能

先看看效果图:

注册:

wKioL1LiGITyiBc5AAKjO-n-Uhw055.jpg

注册成功后登录:

wKiom1LiGUGi8JRRAAIyfxpYYag117.jpg

登录成功后显示用户信息,同时也可以选择用户退出功能

wKioL1LiGeuT3ektAAKDnXiT_hQ767.jpg


好了,言归正传,实现这样一个简单模块主要是用到servlet技术去处理用户的注册登录等信息,当然我们可以在这基础上可以加入其它需要的东西比如加个验证码、忘记密码、ajax技术等,当然servlet是基本元素,这个是需要掌握的。可以通过下面几个步骤去总结一下,希望能给刚入门java web的同学起到抛砖引玉的作用:

1.理清思路(要设计一个什么东西),设计数据库,数据表:

1
2
3
4
5
6
7
8
9
CREATE  TABLE  tb_user (
id  int (10) unsigned  NOT  NULL  AUTO_INCREMENT  PRIMARY  KEY ,
username  varchar (50)  NOT  NULL ,
password  varchar (50)  NOT  NULL ,
sex  varchar (10)  NOT  NULL ,
tel  varchar (50)  NOT  NULL ,
photo TINYBLOB  NOT  NULL ,
email  varchar (100)  NOT  NULL
)

这里需要注意photo类型要使用TINYBLOB,而不是varchar否则会提示出错信息:      Data too long for column 'photo' at row 1


2.设计4个包用于放置java文件:

com.lxy(用户实体信息)

com.lxy.dao(数据库操作文件)

com.lxy.servlet(servlet文件)

com.lxy.code(编码文件)

wKioL1LiG7yBpC97AACvAyllMQk713.jpg


3.编写用户实体类user.java(package:com.lxy)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  User {
     private  int  id;          // 标识
     private  String username; // 用户名
     private  String password; // 密码
     private  String sex;      // 性别
     private  String tel;      // 电话
     private  String photo;    // 头像
     private  String email;    // 电子邮箱
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
下面省略getXXX()和setXXX()方法,请自行编写


4.编写数据库连接ConnectDB(package:com.lxy.dao)同时导入mysql的jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public  static  Connection getConnection(){
         Connection conn =  null ;
         try  {
             // 加载驱动
             Class.forName( "com.mysql.jdbc.Driver" );
             // 数据库连接url
             String url =  "jdbc:mysql://localhost:3306/db_test1" ;
             // 获取数据库连接
             conn = DriverManager.getConnection(url,  "root" "lixiyu" );
         catch  (Exception e) {
             e.printStackTrace();
         }
         return  conn;
     }
     /**
      * 关闭数据库连接
      * @param conn Connection对象
      */
     public  static  void  closeConnection(Connection conn){
         // 判断conn是否为空
         if (conn !=  null ){
             try  {
                 conn.close();    // 关闭数据库连接
             catch  (SQLException e) {
                 e.printStackTrace();
             }
         }
     }

编写用户操作类UserDao(com.lxy.dao):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
public  void saveUser( User  user ){
         // 获取数据库连接 Connection 对象
         Connection  conn = ConnectDB.getConnection();
         // 插入用户注册信息的SQL语句
         String sql =  "insert into tb_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)" ;
         try {
             // 获取PreparedStatement对象
             PreparedStatement ps = conn.prepareStatement(sql);
             // 对SQL语句的占位符参数进行动态赋值
             ps.setString(1,  user .getUsername());
             ps.setString(2,  user .getPassword());
             ps.setString(3,  user .getSex());
             ps.setString(4,  user .getTel());
             ps.setString(5,  user .getPhoto());
             ps.setString(6,  user .getEmail());
             // 执行更新操作
             ps.executeUpdate();
             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
             ps. close ();
         } catch (Exception e) {
             e.printStackTrace();
         }finally{
             // 关闭数据库连接
             ConnectDB.closeConnection(conn);
         }
     }
     /**
      * 用户登录
      * @param username 用户名
      * @param  password  密码
      * @ return  用户对象
      */
     public  User  login(String username, String  password ){
         User  user  null ;
         // 获取数据库连接 Connection 对象
         Connection  conn = ConnectDB.getConnection();
         // 根据用户名及密码查询用户信息
         String sql =  "select * from tb_user where username = ? and password = ?" ;
         try {
             // 获取PreparedStatement对象
             PreparedStatement ps = conn.prepareStatement(sql);
             // 对SQL语句的占位符参数进行动态赋值
             ps.setString(1, username);
             ps.setString(2,  password );
             // 执行查询获取结果集
             ResultSet rs = ps.executeQuery();
             // 判断结果集是否有效
             if(rs. next ()){
                 // 实例化一个用户对象
                 user  = new  User ();
                 // 对用户对象属性赋值
                 user .setId(rs.getInt( "id" ));
                 user .setUsername(rs.getString( "username" ));
                 user .setPassword(rs.getString( "password" ));
                 user .setSex(rs.getString( "sex" ));
                 user .setTel(rs.getString( "tel" ));
                 user .setPhoto(rs.getString( "photo" ));
                 user .setEmail(rs.getString( "email" ));
             }
             // 释放此 ResultSet 对象的数据库和 JDBC 资源
             rs. close ();
             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
             ps. close ();
         } catch (Exception e) {
             e.printStackTrace();
         }finally{
             // 关闭数据库连接
             ConnectDB.closeConnection(conn);
         }
         return  user ;
     }
     /**
      * 判断用户名在数据库中是否存在
      * @param username 用户名
      * @ return  布尔值
      */
     public  boolean userIsExist(String username){
         // 获取数据库连接 Connection 对象
         Connection  conn = ConnectDB.getConnection();
         // 根据指定用户名查询用户信息
         String sql =  "select * from tb_user where username = ?" ;
         try {
             // 获取PreparedStatement对象
             PreparedStatement ps = conn.prepareStatement(sql);
             // 对用户对象属性赋值
             ps.setString(1, username);
             // 执行查询获取结果集
             ResultSet rs = ps.executeQuery();
             // 判断结果集是否有效
             if(!rs. next ()){
                 // 如果无效则证明此用户名可用
                 return  true ;
             }
             // 释放此 ResultSet 对象的数据库和 JDBC 资源
             rs. close ();
             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
             ps. close ();
         } catch (SQLException e) {
             e.printStackTrace();
         }finally{
             // 关闭数据库连接
             ConnectDB.closeConnection(conn);
         }
         return  false ;
     }
}


5.编写注册/登录/退出的jsp和servlet(篇幅太长,这里只给出注册的关键代码,案例源码我会在后面共享出来)

注册reg.jsp:

写个javascripe去做判断:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script type= "text/javascript" >
            function  reg(form){
                if (form.username.value ==  "" ){
                    alert( "用户不能为空!" );
                    return  false ;
                }
                if (form.password.value ==  "" ){
                    alert( "密码不能为空!" );
                    return  false ;
                }
                if (form.repassword.value ==  "" ){
                    alert( "确认密码不能为空!" );
                    return  false ;
                }
                if (form.password.value != form.repassword.value){
                    alert( "两次密码输入不一致!" );
                    return  false ;
                }
                if (form.tel.value ==  "" ){
                    alert( "联系电话不能为空!" );
                    return  false ;
                }
                if (form.email.value ==  "" ){
                    alert( "电子邮箱不能为空!" );
                    return  false ;
                }
            }
            function  change(){
                var  photo = document.getElementById( "photo" );
                var  photoImg = document.getElementById( "photoImg" );
                photoImg.src = photo.value;
            }
        </script>

下面在jsp中设计你所以想要的表单的效果比如我的这个用个table去写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
< form  action = "RegServlet"  method = "post"  onsubmit = "return reg(this);" >
                            < table  align = "center"  width = "450"  border = "0" >
                                < tr >
                                    < td  align = "right" >用户名:</ td >
                                    < td >
                                        < input  type = "text"  name = "username" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >密 码:</ td >
                                    < td >
                                        < input  type = "password"  name = "password" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >确认密码:</ td >
                                    < td >
                                        < input  type = "password"  name = "repassword" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >性 别:</ td >
                                    < td >
                                        < input  type = "radio"  name = "sex"  value = "男"  checked = "checked" >男
                                        < input  type = "radio"  name = "sex"  value = "女" >女
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >头 像:</ td >
                                    < td >
                                        < select  name = "photo"  id = "photo"  onchange = "change();" >
                                            < option  value = "images/boy.png"  selected = "selected" >头像boy</ option >
                                            < option  value = "images/girl.png" >头像girl</ option >
                                        </ select >
                                        < img  id = "photoImg"  src = "images/boy.png" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >联系电话:</ td >
                                    < td >
                                        < input  type = "text"  name = "tel" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  align = "right" >电子邮箱:</ td >
                                    < td >
                                        < input  type = "text"  name = "email" >
                                    </ td >
                                </ tr >
                                < tr >
                                    < td  colspan = "2"  align = "center" >
                                        < input  type = "submit"  value = "注 册" >
                                        < input  type = "reset"  value = "重 置" >
                                    </ td >
                                </ tr >
                            </ table >
                        </ form >

写注册的RegServlet:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public  class  RegServlet  extends  HttpServlet {
     private  static  final  long  serialVersionUID = 5280356329609002908L;
     public  void  doPost(HttpServletRequest request, HttpServletResponse response)
             throws  ServletException, IOException {
         // 获取用户名
         String username = request.getParameter( "username" );
         // 获取密码
         String password = request.getParameter( "password" );
         // 获取性别
         String sex = request.getParameter( "sex" );
         // 获取头像
         String photo = request.getParameter( "photo" );
         // 获取联系电话
         String tel = request.getParameter( "tel" );
         // 获取电子邮箱
         String email = request.getParameter( "email" );
         // 实例化UserDao对象
         UserDao userDao =  new  UserDao();
         if (username !=  null  && !username.isEmpty()){
             if (userDao.userIsExist(username)){
                 // 实例化一个User对象
                 User user =  new  User();  
                 // 对用户对象中的属性赋值
                 user.setUsername(username);
                 user.setPassword(password);
                 user.setSex(sex);
                 user.setPhoto(photo);
                 user.setTel(tel);
                 user.setEmail(email);
                 // 保存用户注册信息
                 userDao.saveUser(user);
                 request.setAttribute( "info" "恭喜,注册成功!<br>" );
             } else {
                 request.setAttribute( "info" "错误:此用户名已存在!" );
             }
         }
         // 转发到message.jsp页面
         request.getRequestDispatcher( "message.jsp" ).forward(request, response);
     }
}

在xml中声明及映射servlet对象:

1
2
3
4
5
6
7
8
9
10
<!-- 用户注册 -->
     < servlet >
         < servlet-name >RegServlet</ servlet-name >
         < servlet-class >com.lxy.servlet.RegServlet</ servlet-class >
     </ servlet >
<!-- Servlet映射 -->
     < servlet-mapping >
         < servlet-name >RegServlet</ servlet-name >
         < url-pattern >/RegServlet</ url-pattern >
     </ servlet-mapping >


登录那块步骤也是相似的,就不一一展开了。源码里面注释较多,看下学习下基本上能懂得。



本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1354594,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
7 0
|
3天前
|
关系型数据库 MySQL 数据库
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
|
10天前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
27 1
|
11天前
|
NoSQL 关系型数据库 Redis
数据管理DMS产品使用合集之要通过 DMS 登录到 RDS、DRDS 或 Redis,我该怎么操作
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
14天前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
22 3
|
16天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
16天前
|
存储 SQL 关系型数据库
Mysqlslap性能测试MySQL三种存储引擎
Mysqlslap性能测试MySQL三种存储引擎
|
24天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
1月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
10 0
|
1月前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
17 0