准备工作:
导入所需要的jar包,导入到web目录下的WEB-INF目录下的lib包中,并将其加入到模块中 包放在另外一个。包可以在网上网上搜索
如下图:
配置数据库文件 druid.properties
可能出现的问题:
1.不能连接到数据库
- 解决方法: 应该是电脑上的数据库版本和此项目中的mysql-connection-java的jar版本不一致,重新下载导入即可
2.问题中出现一大堆乱码等问题:
- 解决方法: 将url修改为如下:
jdbc:mysql:///day14?charactarEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///day14 #day14为数据库名称 可以自己创建数据库
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/anliLogin/loginServlet" method="post">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
需要注意的是: from中的action中写的路径应该是/虚拟路径/登录的Servlet路径
1.创建User类
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 + '\'' +
'}';
}
}
2.创建JDBC工具类,使用Druid连接池
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();
}
}
3.创建UserDao类,操作数据库中User类的方法
public class UserDao {
private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser
* @return
*/
public User login(User loginUser){
try {
String sql="select * from user where username=? and password=?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginUser.getUsername(), loginUser.getPassword());
return user;
}catch (Exception e){ //如果查找不到账号密码,就抛出异常
e.printStackTrace(); //记录日志
return null;
}
}
}
4.Servlet部分:
1. LoginServlet.java
2. 如果用户名和密码正确,则转到successServlet.java。否则就是FailServlet.java
LoginServlet部分:
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
@Override
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);*/
Map<String,String[]> map=req.getParameterMap();
User loginUser=new User();
try {
BeanUtils.populate(loginUser,map); //可以封装多份数据
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//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);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
SuccessServlet.java
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doGet(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() + ",欢迎您");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
FailServlet.java
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登录失败,用户名或密码错误!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}