您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
21_登录案例_代码实现1(又用到了druid连接池(含封装),JdbcTemplate模板与预处理)
发布时间:2022-08-14 00:47:42编辑:雪饮阅读()
准备静态页面
首先最基础的就是要实现一个登录的静态页面了。
index.html于web目录中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="User/Login" method="POST">
<input name="username">
<input name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
准备相关依赖
然后既然是登录,就需要用到数据库,需要用到数据库,那么为了简单起见,我们直接把基本上应该能用到的jar依赖都拿到这个web/WEB-INF/lib中这个目录也是javaweb存放依赖的一个惯例。
C:\Users\Administrator\IdeaProjects\youku\web\WEB-INF\lib 的目录
2022/08/13 23:47 <DIR> .
2022/08/13 23:47 <DIR> ..
2008/08/28 16:19 231,320 commons-beanutils-1.8.0.jar
2014/07/05 20:11 61,829 commons-logging-1.2.jar
2018/02/12 08:24 1,848,389 druid-1.0.9.jar
2016/12/16 20:17 618,093 mchange-commons-java-0.2.12.jar
2015/10/06 17:24 985,603 mysql-connector-java-5.1.37-bin.jar
2017/09/28 11:01 654,710 spring-beans-5.0.0.RELEASE.jar
2017/09/28 11:01 1,207,463 spring-core-5.0.0.RELEASE.jar
2017/09/28 11:02 390,640 spring-jdbc-5.0.0.RELEASE.jar
2017/09/28 11:02 248,889 spring-tx-5.0.0.RELEASE.jar
然后这些jar都导入下。
数据库表及实体类
我们需要一个简单的数据表user,这个表里至少要有username和password,以及后面我们需要数据表user中每条记录查询好后能自动映射到实体类中。那么我们也需要一个实体类。
User.java:
package domain;
/**
* 用户的实体类
*/
public class User {
private int id;
private String username;
private String password;
private String gender;
public void setHehe(String gender){
this.gender = gender;
}
public String getHehe(){
return gender;
}
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{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
当然,这个实体类的其它字段也有,只是考虑到后面“可能”要用的。实际这里数据表中我user表username和password两个字段是保证的,其它的未必。
数据库配置
配置这里目前来说暂时还是喜欢properties,然后使用druid进行数据库操作。
则src/druid.properties:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
druid连接池的实现
虽然说不用连接池也可以实现登录,但这貌似是一种规范
src/util/JDBCUtils.java:
package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* JDBC工具类 使用Durid连接池
*/
public class JDBCUtils {
private static DataSource ds ;
static {
try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
userDao实现
类似于模型层
src/dao/UserDao.java:
package dao;
import domain.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;
/**
* 操作数据库中User表的类
*/
public class UserDao {
//声明JDBCTemplate对象共用
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser 只有用户名和密码
* @return user包含用户全部数据,没有查询到,返回null
*/
public User login(User loginUser){
try {
//1.编写sql
String sql = "select * from user where username = ? and password = ?";
//创建一个可以让数据库记录映射到实体类的映射
BeanPropertyRowMapper br=new BeanPropertyRowMapper<User>(User.class);
//2.调用query方法
User user = (User) template.queryForObject(sql,br,loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();//记录日志
return null;
}
}
}
servlet
最后就是咱们登录的真正入口src/User/Login.java的实现了:
package User;
import dao.UserDao;
import domain.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/User/Login")
public class Login extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User u=new User();
System.out.println("username:"+request.getParameter("username"));
System.out.println("password:"+request.getParameter("password"));
u.setUsername(request.getParameter("username"));
u.setPassword(request.getParameter("password"));
UserDao ud=new UserDao();
User loginedUser= ud.login(u);
System.out.println("loginedUser:"+loginedUser);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
然后重启tomcat后在浏览器上测试,在output中看到输出。
整体下来可以发现java实现一个用户登录比php麻烦了不止一两倍呢。
关键字词:登录,案例,代码,实现