1.用户登录案例需求
**1.编写login.jsp登录界面**
**2.使用Druid数据库连接池技术,操作mysql数据库中的user表**
**3.使用jdbcTemplate技术封装JDBC**
**4.登录成功跳转到SuccessServlet显示:登录成功!用户名,欢迎您**
**5.登录失败跳转到FailServlet显示:登录失败,用户名或者密码错误!**
2.开发步骤
1.创建web项目,编辑登录界面,配置文件,jar包
(1)web项目
(2)登录界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<div>
<%-- contextPath表示虚拟路径 --%>
<form method="post" action="${pageContext.request.contextPath}/loginServlet">
<input name="userName" type="text" placeholder="请输入用户名">
<input name="password" type="password" placeholder="请输入密码">
<input name="submit" type="submit" value="登录">
</form>
</div>
</body>
</html>
(3)配置文件
(4)导入需要的jar包
jar包下载地址
链接:https://pan.baidu.com/s/1XLDDXy1o7JU5_V_zkpV66Q 提取码:pwfu
2.创建数据库信息
3.创建实体类
package com.li.beans;
public class User {
private String userName; //用户名称
private String passWord; //用户密码
/**
* 构造器
* */
public User() {
}
public User(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
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 + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
4.创建JDBC工具类
public class JDBCUtils {
private static DataSource ds;
static {
try {
//1、加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件。获取字节流对象
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("/com/li/utils/druid.properties");
//System.out.println("有拿到吗?"+is);
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();
}
}
5.创建包cn.yh.dao,创建类UserDao,提供login方法
/**
* 数据库中User表的类
* 功能:使用连接池,查询数据库用户信息的
* */
public class UserDao {
//声明JDBCTemplate对象共用
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* */
public User login(User loginUser){
try {
//1、编写SQL语句
String sql="select * from user where userName = ? and password = ?";
//2、调用query方法
User user=template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class), loginUser.getUserName(),loginUser.getPassWord());
return user;
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
}
6.编写LoginServlet类
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//2.获取请求参数
String username = req.getParameter("userName");
String password = req.getParameter("password");
//3.封装user对象
User loginUser = new User();
loginUser.setUserName(username);
loginUser.setPassWord(password);
//4.调用UserDao的login方法,进行数据库查询
UserDao dao = new UserDao();
User user = dao.login(loginUser);
//5.判断user
if(user == null){
//登录失败
req.getRequestDispatcher("/failServlet").forward(req,resp); //请求转发
}else{
//登录成功
//存储数据
req.setAttribute("user",user);
//转发
req.getRequestDispatcher("/successServlet").forward(req,resp); //请求转发
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
7.SuccessServlet,登录成功执行的类
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
/**
* 方法重写了HttpServlet中的doPost方法
* */
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取request域中共享的user对象
User user = (User) req.getAttribute("user");
if(user != null){
//给页面写一句话
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登录成功!"+user.getUserName()+",欢迎您");
}
}
}
8.FailServlet,登录失败执行的类
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
/**
* 功能
* */
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//给页面写一句话
//设置编码,不然页面会乱码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登录失败,用户名或密码错误");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
9.数据库配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///user_sm
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
10.项目结构
展现目录结构知识为了让读者更清晰的知道,没描述到类就是不存在类,以描述的类为准,不要以目录为准
运行结果: