JavaWeb之利用MVC三层架构和Servlet+Jsp+JDBC实现用户登陆注册功能

一、相关技术
MVC三层架构、Servlet、Jsp、JDBC 、EL和JSTL标签的使用。

二、核心代码

  1. dao层,实现连接数据库的操作类DB。
package user.dao;
import java.sql.*;

import user.entity.User;

public class DB {
    
    
	 private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
	  //设置数据库连接地址
	 private static final String DB_URL ="jdbc:mysql://localhost:3306/userdb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
	 /* 数据库用户名 */
	 private static final String dbUser = "root";
	   /* 数据库密码 */
	 private static final String dbPass = "xiatian123";
	 
	 public static void main(String[]args) {
    
    
		 User user = new User();
		 Connection connection = DB.getConnection();
	     Statement statement = DB.createStatement(connection);
	     ResultSet rSet = DB.executeQuery(statement,"select * from t_user ");
	     /*
			 * rs记录集向下滚动一次(next)
			 * 若成功滚动, 表明查到了数据,将记录指针移动到查找到的第一条记录
			 * 将数据库中的用户名和密码读取出来,封装为一个user对象;
			 */
	     try {
    
    
	    		while(rSet.next()) {
    
    
					user=new User();
					user.setUserName(rSet.getString("user_name"));
					user.setPassword(rSet.getString("user_password"));
				}
	    	 
	     } catch (SQLException e){
    
    
	            e.printStackTrace();
	        }
	
	 
		 
	 }
	
	 //获取数据库连接
	   public static Connection getConnection(){
    
    
	        Connection connection = null;
	        try {
    
    
	            Class.forName(JDBC_DRIVER);
	            connection = DriverManager.getConnection(DB_URL,dbUser,dbPass);
	        } catch (ClassNotFoundException e) {
    
    
	            e.printStackTrace();
	        } catch (SQLException e) {
    
    
	            e.printStackTrace();
	        }
	        return connection;
	    }
	   //操作数据库
	   public static Statement createStatement(Connection connection){
    
    
	        Statement statement = null;
	        try {
    
    
	            statement = connection.createStatement();
	        } catch (SQLException e) {
    
    
	            e.printStackTrace();
	        }
	        return statement;
	    }
	  // 返回结果集
	   public static ResultSet executeQuery(Statement statement, String SQL){
    
    
	        ResultSet rSet = null;
	        try {
    
    
	            rSet = statement.executeQuery(SQL);
	        } catch (SQLException e) {
    
    
	            e.printStackTrace();
	        }
	        return rSet;
	    }
	   //插入数据
	   public static int executeUpdate(Statement statement, String SQl){
    
    
	        int ret = 0;
	        try {
    
    
	            ret = statement.executeUpdate(SQl);
	        } catch (SQLException e) {
    
    
	            e.printStackTrace();
	        }
	        return ret;
	    }
	 //关闭数据库连接
	   public static  void closeDB(ResultSet rs, Statement sta, Connection conn) {
    
    
		      try {
    
    
		    	    if(rs!=null) {
    
    
		    	    	 rs.close();
		    	    }
		            if(sta!=null) {
    
    
		            	 sta.close();
		            }
		            if(conn!=null) {
    
    
		            	conn.close();
		               }  
		            
		          } catch (SQLException e) {
    
    
		   
		               e.printStackTrace();
		   
		               }
    }

	   
}

2.entity层,即封装user用户的相关方法和属性

package user.entity;

public class User {
    
    

	private int id;
	private String userName;
	private String password;
	
	public int getId() {
    
    
		return id;
	}
	
	public void setId(int id) {
    
    
		this.id = id;
	}
	
	public String getUserName() {
    
    
		return userName;
	}
	
	public void setUserName(String userName) {
    
    
		this.userName = userName;
	}
	
	public String getPassword() {
    
    
		return password;
	}
	
	public void setPassword(String password) {
    
    
		this.password = password;
	}
	
	
}

3.Servlet层

登陆的servlet

package user.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import user.dao.DB;
import user.entity.User;

public class ServletUserLogin extends HttpServlet {
    
    

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//设置编码格式
	       req.setCharacterEncoding("utf-8");
	       resp.setCharacterEncoding("GBK");
	    //前台得到用户输入数据  
	       boolean isloginSuccess = false;
	       String inputUsername = req.getParameter("userName");
	       String inputPassword= req.getParameter("passWord");
	   //进行数据库查询    
	       Connection connection = DB.getConnection();
    	   Statement statement = DB.createStatement(connection);
    	   ResultSet res = DB.executeQuery(statement, "select * from t_user where user_name = '"+inputUsername +"'");
    	   
    	 
    	//判断用户名和密码是否正确
    	try {
    
    
    		  
    	//int loginResult = -1;	  
	    if(res.next()) {
    
    
				String username = res.getString("user_name");
				String userpass = res.getString("user_password");
				
		    if(username.equals(inputUsername) && userpass.equals(inputPassword)) {
    
      //用户名和密码正确
				   User user = new User();
			       user.setUserName(inputUsername);
			       user.setPassword(inputPassword);
			       PrintWriter out = resp.getWriter(); 
			 	   out.print("<script>alert('欢迎回来,登陆成功!');window.location.href='/LoginTest/index.jsp'</script>");//弹出网页提示并跳转
			 	   //将用户对象放到session中
			 	  req.getSession().setAttribute("user",user);
			 	 // System.out.println("用户名:"+user.getUserName()+" "+"用户密码:"+user.getPassword());
			}else if(!(username.equals(inputUsername)) || !(userpass.equals(inputPassword)) ){
    
     //用户名或密码错误   
					if(!userpass.equals(inputPassword))
					{
    
    //用户密码错误
						req.setAttribute("error", "用户密码错误!");
						req.getRequestDispatcher("/UserLogin.jsp").forward(req, resp);
						return;
					}  
					if(!userpass.equals(inputPassword)) {
    
    //用户名错误
						req.setAttribute("error", "用户名错误!");
						req.getRequestDispatcher("/UserLogin.jsp").forward(req, resp);
						return;
					}	
			}else{
    
     //用户密码和名都错误
				req.setAttribute("error", "用户名和密码错误!");
				req.getRequestDispatcher("/UserLogin.jsp").forward(req, resp);
				return;
			}	
		}else{
    
    
			req.setAttribute("error", "用户名或密码错误!");
			req.getRequestDispatcher("/UserLogin.jsp").forward(req, resp);
			return;
		}
			
	} catch (SQLException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	   
	 }

}
    	   


注册的Servlet页面

package user.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import user.dao.DB;
import user.entity.User;



public class ServletUserRegister extends HttpServlet {
    
    

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    

		//设置编码格式
	       req.setCharacterEncoding("utf-8");
	       resp.setCharacterEncoding("GBK");
	
	    //前台得到用户输入数据   
	       String userName = req.getParameter("registerUsername");
	       String password1 = req.getParameter("registerPassword1");
	       String password2 = req.getParameter("registerPassword2");
	       
	      int isLogin=1;//设置标志值判断注册用户是否已经存在
	      String sql="select * from t_user where user_name='"+userName+"'";
	       Connection connection = DB.getConnection();
    	   Statement statement = DB.createStatement(connection);
    	   ResultSet res = DB.executeQuery(statement, sql);
    
    	try {
    
    
			if(res.next()) {
    
     //判断用户是否已经注册
				 req.setAttribute("error", "用户名已经存在!");
				 req.getRequestDispatcher("/UserRigister.jsp").forward(req, resp);
				 return;	   
			}else {
    
    //检验输入的用户名和密码是否合法
			   if(userName.length()>=3&&userName.length()<=10) 
			   {
    
     //设置用户名长度在3-10个字符之间
				   if(password1.length()>=6&&password1.length()<=12 && password2.length()>=6&&password2.length()<=12 ) 
				   {
    
    //设置用户密码长度在6-12个字符之间
					   if(password1.equals(password2)) 
					   {
    
    //两次输入的密码一致
						   //Connection connection = DB.getConnection();
				    	   //Statement statement = DB.createStatement(connection);
				    	   DB.executeUpdate(statement, "insert into t_user (user_name,user_password) values (\""+userName+"\",\""+password1+"\")");
				    	   PrintWriter out = resp.getWriter(); 
				    	   out.print("<script>alert('恭喜你,注册成功!');window.location.href='/LoginTest/UserLogin.jsp'</script>");//弹出网页提示并跳转
				       }else{
    
    
				    	   req.setAttribute("error", "两次输入的密码不一致!");
				    	   req.getRequestDispatcher("/UserRigister.jsp").forward(req, resp);
				    	   return;
				       }
				   }else{
    
    
					   req.setAttribute("error", "密码长度错误");
					   req.getRequestDispatcher("/UserRigister.jsp").forward(req, resp);
			    	   return;
				   }	 
			 }else {
    
    
				   req.setAttribute("error", "用户名不能为空!");
				   req.getRequestDispatcher("/UserRigister.jsp").forward(req, resp);
				   return;
			   }
			}
		} catch (SQLException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
	}
	            
}


4.登陆与注册的jsp页面 我是引用的bootstrap页面,仅供参考
登陆页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>欢迎来到登陆界面!</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="all,follow">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.2.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="bootstrap/css/style.default.css" id="theme-stylesheet">
  </head>
  <body>
  <form action="doLogin" method="post">
    <div class="page login-page">
      <div class="container d-flex align-items-center">
        <div class="form-holder has-shadow">
          <div class="row">
            <!-- Logo & Information Panel-->
            <div class="col-lg-6">
              <div class="info d-flex align-items-center">
                <div class="content">
                  <div class="logo">
                    <h1>欢迎登录</h1>
                  </div>
                  <p>后台管理系统</p>
                </div>
              </div>
            </div>
            <!-- Form Panel    -->
            <div class="col-lg-6 bg-white">
              <div class="form d-flex align-items-center">
                <div class="content">
                  <form method="post" action="dologin" class="form-validate" id="loginFrom">
                    <div class="form-group">
                      <input id="login-username" type="text" name="userName" required data-msg="请输入用户名" placeholder="用户名" value="admin" class="input-material">
                    </div>
                     <span style="color:red;">${requestScope.error}</span>
                    <div class="form-group">
                      <input id="login-password" type="password" name="passWord" required data-msg="请输入密码" placeholder="密码" class="input-material">
                    </div>
                    <button id="login" type="submit" class="btn btn-primary">登录</button>
                    <div style="margin-top: -40px;"> 
                    	<!-- <input type="checkbox"  id="check1"/>&nbsp;<span>记住密码</span>
                    	<input type="checkbox" id="check2"/>&nbsp;<span>自动登录</span> -->
                    	<div class="custom-control custom-checkbox " style="float: right;">
											    <input type="checkbox" class="custom-control-input" id="check2" >
											    <label class="custom-control-label" for="check2">自动登录</label>
											</div>
											<div class="custom-control custom-checkbox " style="float: right;">
											    <input type="checkbox" class="custom-control-input" id="check1" >
											    <label class="custom-control-label" for="check1">记住密码&nbsp;&nbsp;</label>
											</div> 
                    </div>
                  </form>
                  <br />
                  <small>没有账号?</small><a href="UserRigister.jsp" class="signup">&nbsp;注册</a>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- JavaScript files-->
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
  </form>
  </body>
  
</html>

注册页面


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>欢迎来到注册界面!</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="all,follow">
    <!-- Bootstrap CSS-->
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,700">
    <link rel="stylesheet" href="bootstrap/css/style.default.css" id="theme-stylesheet">
  </head>
  <body>
  <form action="doRegister" method="post">
    <div class="page login-page">
      <div class="container d-flex align-items-center">
        <div class="form-holder has-shadow">
          <div class="row">
            <!-- Logo & Information Panel-->
            <div class="col-lg-6">
              <div class="info d-flex align-items-center">
                <div class="content">
                  <div class="logo">
                    <h1>欢迎注册</h1>
                  </div>
                  <p>请注册</p>
                </div>
              </div>
            </div>
            <!-- Form Panel    -->
            <div class="col-lg-6 bg-white">
              <div class="form d-flex align-items-center">
                <div class="content">
                    <div class="form-group">
                      <input id="register-username" class="input-material" type="text" name="registerUsername" placeholder="请输入用户名/姓名" >
								      <div class="invalid-feedback">
								        	用户名必须在2~10位之间
								      </div>
					 
                    </div>
                    <span style="color:red"> ${requestScope.error } </span>
                    <div class="form-group">
                      <input id="register-password" class="input-material" type="password" name="registerPassword1" placeholder="请输入密码"   >
                    	<div class="invalid-feedback">
								        	密码必须在6~10位之间
								      </div>
                    </div>
                    <div class="form-group">
                      <input id="register-passwords" class="input-material" type="password" name="registerPassword2" placeholder="确认密码"   >
                    	<div class="invalid-feedback">
								        	两次密码必须相同 且在6~10位之间
								      </div>
                    </div>
                    <div class="form-group">
                      <button id="regbtn" type="submit" name="registerSubmit" class="btn btn-primary">注册</button>
                    </div>
                  <small>已有账号?</small><a href="UserLogin.jsp" class="signup">&nbsp;登录</a>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- JavaScript files-->
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    </form>
  </body>
</html>

结语:刚开始学写博客,主要是为了记录自己的学习状态,有不足的地方大家可以一起交流讨论。

猜你喜欢

转载自blog.csdn.net/weixin_43553142/article/details/104898025