Servlet与BeanUtils用户登录小练习
需求:设计一个登录界面,可以输入用户名和密码,然后获得数据后与数据库匹配,如果用户名与密码匹配正确则跳转到成功页面,并输出“登录成功,欢迎XXX回来!””,如果匹配失败,则跳转到失败页面,并且输出“登录失败,用户名或密码错误!”
流程:
1,:确定在web/WEB-INF/lib目录下导入各类JAR包如下
2:新建用户类,用来封装用户。
/**
* 用户的实体类 javabean
*/
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;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
3:新建工具类获取数据源DATASouce
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* JDBC工具类 使用DRUID
*/
public class utils {
private static DataSource ds;
//获取连接池对象
//字节流
static{
try {
Properties p = new Properties();
InputStream resourceAsStream = utils.class.getClassLoader().getResourceAsStream("druid.properties");
//加载
p.load(resourceAsStream);
//初始化连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(p);
ds = dataSource;
System.out.println(ds);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDataSouce(){
return ds;
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
4:新建DAO层,利用数据源操作数据库
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/*
操作数据库的类
*/
public class userdao {
/**
* 登录的只有用户名和密码
* 返回的user值有id
* @param loginuser
* @return
*/
//声明JDBCTemplate对象共用
private JdbcTemplate template = new JdbcTemplate(utils.getDataSouce());
public user login(user loginuser){
try {
String sql = "select * from user where username = ? and password = ?";
//调用query方法得到user对象
user user1 = template.queryForObject(sql, new BeanPropertyRowMapper<user>(user.class), loginuser.getUsername(), loginuser.getPassword());
return user1;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
}
5:新建login.html登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/loganberries" method="post">
用户名<input placeholder="请输入用户名" name="username">
<br>
密码<input placeholder="请输入密码" name="password" >
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
6:新建login登录的WebServlet,登录页面的跳转对象
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import javax.servlet.RequestDispatcher;
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;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loganberries")
public class loganberries extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("a");
//设置编码
req.setCharacterEncoding("utf-8");
//获得参数
// String username = req.getParameter("username");
// System.out.println(username);
// String password = req.getParameter("password");
// System.out.println(password);
//
//// //封装user对象
// user loginuser = new user();
// loginuser.setUsername(username);
// loginuser.setPassword(password);
//使用BeanUtils获取所有参数并创建user对象
Map<String, String[]> parameterMap = req.getParameterMap();
user user = new user();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
userdao userdao = new userdao();
user login = userdao.login(user);
System.out.println(login);
//
if (login == null) {
req.getRequestDispatcher("/facelet").forward(req, resp);
} else {
req.setAttribute("user", login);
req.getRequestDispatcher("/successive").forward(req, resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
7:新建匹配成功后自动转发的页面:
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("/successive")
public class successive extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
user underlain = (user) request.getAttribute("user");//强制类型转换
if (underlain != null) {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("登录成功,欢迎" + underlain.getUsername() + "回来!");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
8:新建匹配失败后自动跳转的页面
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("/facelet")
public class facelet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("登录失败,用户名或密码错误!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}