天天看点

Java使用Servlet连接mysql实现登录注册功能前言一、项目目录二、配置三、数据库的创建四、后端代码四、前端代码五、界面展示

Java使用Servlet连接mysql实现登录注册功能前言一、项目目录二、配置三、数据库的创建四、后端代码四、前端代码五、界面展示

文章目录

  • 前言
  • 一、项目目录
  • 二、配置
    • 1.lib下 引入jar包
    • 2、配置tomcat 及 部署项目到服务器
  • 三、数据库的创建
  • 四、后端代码
    • 1、实体类User
    • 2、数据库工具类
    • 3、控制类UserDao
    • 4、servlet类
  • 四、前端代码
    • 1、main主页面
    • 2、登录界面
    • 3、注册界面
  • 五、界面展示

前言

话不多说,大家都很忙,就不讲废话了。

如果想用来练手的话最好直接在idea上建项目,配置tomcat,然后按下面顺序进行。我原本是在eclipse上搭的项目,搬迁之后配置又出了好多bug,配置麻烦的很。配置tomcat的方法放下面,需要的话可以参考。

IntelliJ idea中配置tomcat并部署应用

eclipse中tomcat的配置及web应用的部署

一、项目目录

Java使用Servlet连接mysql实现登录注册功能前言一、项目目录二、配置三、数据库的创建四、后端代码四、前端代码五、界面展示

二、配置

1.lib下 引入jar包

这里需要连接数据库所需的mysql-connector-java以及servlet-api,需要的可以在 CSDN直接搜索,应该有大善人上传了。

2、配置tomcat 及 部署项目到服务器

可以参考上面那两篇博客,只一步很重要的,事关能不能最终实现功能,需要细心,一遍配不好,就配两遍,最后肯定能配好,然后你就会发现这玩意好恶心,根本记不住,只好写一篇blog留着等以后忘了用。

三、数据库的创建

推荐使用Navicat直接创建数据库,以及user表

如图:

Java使用Servlet连接mysql实现登录注册功能前言一、项目目录二、配置三、数据库的创建四、后端代码四、前端代码五、界面展示

一定要记清楚数据库及表的名称

四、后端代码

1、实体类User

public class User {

	private int id;
	private String userName;
	private String password;
	
	public User() {}
	public User(String userName,String password) {
		this.userName = userName;
		this.password = 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;
	}
	@Override
	public String toString() {
		return "User [userName=" + userName + "]";
	}
	
	
}
           

2、数据库工具类

数据库工具类可以批量的向我们提供数据库连接,省却了许多麻烦

public class JdbcUtils {

	public static Connection getConnection () throws SQLException {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			//一般只需要改数据库名和密码就可以了
			String url = "jdbc:mysql://localhost:3306/kaikeba1?useUnicode=true&characterEncoding=UTF-8&useSSl=false&serverTimezone=Asia/Shanghai";
			String user = "root";
			String password = "hahaha";
			
			Connection connection = DriverManager.getConnection(url,user,password);
			return connection;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
}
           

3、控制类UserDao

public class UserDao {

	/**
	 * 登录方法
	 * @param userName
	 * @return
	 */
	public User findUserByName(String userName) {
		User user = null;//创建对象,后续如果能查询到对应用户,则user就是这个用户信息的载体
		//或者说它就是用户
		try {
			//从JDBC工具类获取连接
			Connection connection = JdbcUtils.getConnection();
			//定义sql查询语句
			String sql = "select id,userName,password from user2 where userName=?";
			//预处理,传入sql语句
			PreparedStatement preparedStatement = connection.prepareStatement(sql);
			//1即第一个?处的值为后续传入的userName参数
			preparedStatement.setString(1, userName);
			//执行查询操作得到结果集
			ResultSet resultset = preparedStatement.executeQuery();
			//对结果集中的数据进行遍历
			while (resultset.next()) {
				//如果可以从数据库中查到人名,将其其它信息赋值给user
				user = new User();
				user.setId(resultset.getInt(1));
				user.setUserName(resultset.getString(2));
				user.setPassword(resultset.getString(3));
			}
			return user;//findUserByName方法的返回值
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;//查不到就返回null
	}
	/**
	 * 注册方法
	 * @param userName
	 * @param password
	 * @return
	 */
	public int addUser(String userName,String password) {
		Connection connection = null;
		try {
			connection = JdbcUtils.getConnection();
			String sql = "insert into user2(userName,password) values(?,?)";
			PreparedStatement preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, userName);
			preparedStatement.setString(2, password);
			int row = preparedStatement.executeUpdate();//row是数据库受此次executeUpdate操作影响的行数,即更新了几行
			//输入了一个user信息,肯定只有1行
			return row;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
}
           

4、servlet类

LoginServlet

@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public LoginServlet() {
        // TODO Auto-generated constructor stub
    }

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		//这两者是从前端界面传过来的用户名和密码
		String userName = request.getParameter("userName");
		String password = request.getParameter("password");
		//调用UserDao 中的方法findUserByName,传入userName进行验证
		User user = new UserDao().findUserByName(userName);
		//如果返回了一个user且其userName,password与前端输入的一致,则登录成功,跳转到主页面main.html
		if(user != null && userName.equals(user.getUserName()) && password.equals(user.getPassword())) {
			response.sendRedirect("main.html");
		}else if (user == null) {
			//否则就不动
			response.sendRedirect("login.html");
			System.out.println("该用户不存在");
		}else {
			//要不就是有一者输错了
			response.sendRedirect("login.html");
			System.out.println("用户名或密码错误");
		}
		
	}

}

           

注册RegisterServlet

@WebServlet("/register.do")
public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
        request.setCharacterEncoding("UTF-8");
		
		String userName = request.getParameter("userName");
		String password = request.getParameter("password");
		
		int result = new UserDao().addUser(userName, password);
		//如果返回的是 1 ,则说明注册成功
		if (result == 1) {
			response.sendRedirect("login.html");
			System.out.println("注册成功!登录");
		}else {
			response.sendRedirect("register.html");
			System.out.println("用户名或密码为空,请重新输入");
		}
	}

}
           

四、前端代码

1、main主页面

首页,比较简陋,凑活看吧

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>系统主页</h2>
<hr>
<h2>欢迎登录 ~\(^o^)/~ </h2>
</body>
</html>
           

2、登录界面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<style type="text/css">
  *{
	margin:0px;
	padding:0px;
  }
  body{
   background-image: url("./img/52281162762922964531629890033675.jpg");
   background-size: 100%;
   background-size: cover;
  }
  #div1{
    width: 500px;
    height: 260px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -160px 0 0 -235px;
    background-color: rgba(240, 255, 255, 0.5);
    border-radius: 10px;
    text-align: center;
    opacity:0.8;
  }
  button{
    width:85px;
    height:40px;
    background-color: White; 
    font-size: 10px;
    border: none;
    color: Black;
    border-radius: 8px;
    padding: 15px 32px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
  }
  button:hover{
    background-color: Black;
    color: Gold;
  }
  a{
    color:black;
    font-family: 江西拙楷;
    font-size:10px;
    text-decoration: none;
  }
  a:hover{
   color:Green;
  }
  input{
   width:200px;
   height:40px;
   border-radius:8px;
   background:transparent;
   border:1px solid #ffffff;
   
   border-color:black;
 }
</style>
</head>
<body>
<form action="login.do" method="post">
<div id="div1">
    <h1>登录</h1><br>
       <p>姓名  <input type="text" placeholder="username" name="userName"></p><br>
       <p>密码  <input type="password" placeholder="password" name="password"></p><br>
    <p><button type="submit" id="btn1">登录</button> &nbsp;
    <button type="reset" id="btn2">重置</button></p>
    <a href="register.html">去注册</a>
</div>
</form>
</body>
</html>
           

3、注册界面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<style type="text/css">
 form{
    text-align: center;
  }
   a{
    text-decoration: underline;
   }
</style>
</head>
<body>
<form action="register.do" method="post">
<h1>注册</h1>
<p>用户名:<input type="text" name="userName" placeholder="请输入心仪的用户名"></p>
<p>密码:<input type="text" name="password" placeholder="请输入密码"></p>
<p><input type="submit" value="注册"> &nbsp;&nbsp;
<input type="reset" value="重置"></p>
</form>
</body>
</html>
           

五、界面展示

Java使用Servlet连接mysql实现登录注册功能前言一、项目目录二、配置三、数据库的创建四、后端代码四、前端代码五、界面展示

继续阅读