要实现的效果如下:
案例三、统计网站访问人数
(1)创建Web项目ApplicationDemo
在项目结构窗口里修改Artifacts的名称
在服务器配置窗口里做一些修改
添加依赖
(2)在WEB-INF目录里创建lib目录,添加数据库驱动程序jar包
(3)在web目录里修改首页index.jsp内容
(4)在web目录里创建登录页面login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<h3 style="text-align: center">用户登录</h3>
<form action="do_login.jsp" method="post">
<table border="1" cellpadding="10" style="margin: 0px auto">
<tr>
<td align="center">用户名</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td align="center">密 码</td>
<td><input type="password" name="password"/></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
<%
String errMsg = (String) session.getAttribute("errMsg");
if (errMsg != null) {
out.println("<script>alert('" + errMsg + "')</script>");
}
%>
</body>
</html>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, 'admin', 'admin');
INSERT INTO `t_user` VALUES (2, '无心剑', '903213');
INSERT INTO `t_user` VALUES (3, '陈雨欣', '111111');
INSERT INTO `t_user` VALUES (4, '李云剑', '123456');
SET FOREIGN_KEY_CHECKS = 1;
(5)在src里创建net.hw.bean包,创建用户实体类User
package net.qing.bean;
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 + '\'' +
'}';
}
}
(6)在src里创建net.hw.dbutil包,在里面创建ConnectionManager类
package net.qing.dbutil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionManager {
// 定义连接数据库的参数值
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/qing";
private static final String USER = "root";
private static final String PASSWORD = "1";
/**
* 私有化构造方法,拒绝实例化
*/
private ConnectionManager() {
}
/**
* 获取数据库连接静态方法
*
* @return 数据库连接
*/
public static Connection getConnection() {
// 声明数据库连接
Connection conn = null;
try {
// 安装数据库驱动程序
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
// 返回数据库连接
return conn;
}
/**
* 关闭数据库连接静态方法
*
* @param conn 数据库连接
*/
public static void closeConn(Connection conn) {
if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
(7)在src里创建net.hw.dao包,在里面创建用户数据访问接口UserDao
(8)在user.hw.dao里创建impl子包,在里面创建用户数据访问接口实现类UserDaoImpl
package net.qing.dao.impl;
import net.qing.dao.UserDao;
import net.qing.dbutil.ConnectionManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
@Override
public boolean login(String username, String password) {
// 定义标识变量
boolean flag = false;
// 获取数据库连接
Connection conn = ConnectionManager.getConnection();
// 定义SQL字符串
String strSQL = "select * from t_user where username = ? and password = ?";
try {
// 创建预备语句对象
PreparedStatement pstmt = conn.prepareStatement(strSQL);
// 设置占位符的值
pstmt.setString(1, username);
pstmt.setString(2, password);
// 执行SQL查询,返回结果集
ResultSet rs = pstmt.executeQuery();
// 判断结果集里是否有记录
if (rs.next()) {
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
ConnectionManager.closeConn(conn);
}
// 返回标识变量
return flag;
}
}
(9)在web目录里创建登录处理页面do_login.jsp
<%@ page import="net.qing.dao.UserDao" %>
<%@ page import="net.qing.dao.impl.UserDaoImpl" %>
<%@ page import="net.qing.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// 设置请求对象字符编码
request.setCharacterEncoding("utf-8");
// 获取登录表单提交的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
// 创建用户数据访问对象
UserDao userDao = new UserDaoImpl();
// 判断用户是否登录成功
if (userDao.login(username, password)) {
// 创建登录用户对象
User loginedUser = new User();
// 设置用户对象属性
loginedUser.setUsername(username);
loginedUser.setPassword(password);
// 创建登录用户列表对象
List<User> loginedUsers = new ArrayList<>();
// 判断application里是否有登录用户列表属性
if (application.getAttribute("LOGINED_USERS") == null) {
// 在application里添加登录用户列表属性
application.setAttribute("LOGINED_USERS", loginedUsers);
} else {
// 从application里获取登录用户列表
loginedUsers = (List<User>) application.getAttribute("LOGINED_USERS");
}
// 将当前登录成功的用户添加到登录用户列表里
loginedUsers.add(loginedUser);
// 更新application里登录用户列表属性值
application.setAttribute("LOGINED_USERS", loginedUsers);
// 清除session里errMsg属性
if (session.getAttribute("errMsg") != null) {
session.removeAttribute("errMsg");
}
// 采用重定向,跳转到登录成功页面
response.sendRedirect("success.jsp?username=" + URLEncoder.encode(username, "utf-8"));
} else {
// 创建session属性errMsg
session.setAttribute("errMsg", "用户名或密码错误,请重新登录!");
// 采用重定向,跳转到登录页面
response.sendRedirect("login.jsp");
}
%>
(10)在web目录里创建登录成功页面success.jsp
(11)启动tomcat服务器,查看运行效果
详细步骤如下:
步骤链接