这里写目录标题
数据分析
随后在数据中创建,也可以直接复制我的sql语句:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for clazz
-- ----------------------------
DROP TABLE IF EXISTS `clazz`;
CREATE TABLE `clazz` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`cteacher` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`remark` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`sname` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`hobby` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`birthdate` date NULL DEFAULT NULL,
`phone` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`reamrk` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`cid` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`ukey` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`pwd` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`realname` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`type` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;
随后根据个人情况添加模拟数据
班级表
学生
用户
以上数据均为模拟,无实际意义
搭建项目
导入jar包
导入前端页面
导入数据库连接池和连接工具
mysqlDriver=com.mysql.cj.jdbc.Driver
mysqlUrl=jdbc:mysql://localhost:3306/banji?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
mysqlName=root
mysqlPassword=root
package com.zheng.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;
import java.util.Properties;
/**
* @Author Mr.ZhengJiXiang
* @Date 2021/9/2 19:05
* @Version 1.0
*/
//数据库连接池
public class MyConnectionUtils {
//1、创建LinkedList集合(存入线程
//Connection,数据库操作对象
static LinkedList<Connection> linkedList = new LinkedList<>();
static {
//2、通过流的形式,读取是数据库的配置文件
InputStream resourceAsStream = MyConnectionUtils.class.getClassLoader().getResourceAsStream("db.properties");
//3、调用Properties();类
Properties properties = new Properties();
try {
properties.load(resourceAsStream);
String mysqlDriver = (String) properties.get("mysqlDriver");
String mysqlUrl = (String) properties.get("mysqlUrl");
String mysqlName = (String) properties.get("mysqlName");
String mysqlPassword = (String) properties.get("mysqlPassword");
//4、加载驱动
Class.forName(mysqlDriver);
//5、使用循环获取10个连接,并把连接数放到连接池内
for (int i = 0; i < 10; i++) {
//6、使用内置对象DriverManager调用getConnection方法,把数据掺入里面
Connection connection = DriverManager.getConnection(mysqlUrl, mysqlName, mysqlPassword);
//7、放入集合
linkedList.add(connection);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//6、创建连接方法,好让实体类调用(用于传入sql语句以及执行其他几部)
//使用同步关键字实现线程同步,
//因为涉及等待,所以synchronized是同步锁
public synchronized Connection getConnection() throws InterruptedException {
//如果内部线程等于0 .代表线程被拿完了
if (linkedList.size()==0){
this.wait();
}
//如果有人来拿连接,那么连接池就会移除一个连接,代表打走了
Connection remove = linkedList.remove(0);
return remove;
}
//7、将连接放回连接处
public synchronized void closeConnection(Connection connection){
linkedList.add(connection);
//唤醒等待的线程
this.notifyAll();
}
}
配置全局的字符编码过滤器
package com.zheng.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @Author Mr.Zheng
* @Date 2021/11/19 17:09
* @Version 1.0
*
* 字符编码过滤器
*/
//@WebFilter("/*")可能会导致js或者css等资源也进入了过滤器,所以添加一个路径作为然后访问的中间路径
@WebFilter("/bj/*")
public class EncFilter implements Filter {
@Override
public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain filter) throws IOException, ServletException {
Request.setCharacterEncoding("utf-8");
Response.setCharacterEncoding("utf-8");
Response.setContentType("text/html;charset=utf-8");
//进行放行,执行下一个过滤器或者目标资源
filter.doFilter(Request,Response);
}
}
配置tomcat启动项目
导入实体类:
实现登录功能
编写dao
package com.zheng.dao.impl;
import com.zheng.dao.UserDao;
import com.zheng.pojo.User;
import com.zheng.util.MyConnectionUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @Author Mr.Zheng
* @Date 2021/11/19 17:25
* @Version 1.0
*/
public class UserDaoImpl implements UserDao {
@Override
public User selectOne(String ukey, String pwd) {
//调用线程池
MyConnectionUtils myConnectionUtils = new MyConnectionUtils();
Connection connection = null;
PreparedStatement pr = null;
ResultSet rs=null;
User user = null;
try {
connection= myConnectionUtils.getConnection();
pr = connection.prepareStatement("select * from user where ukey=? and pwd = ?");
pr.setString(1,ukey);
pr.setString(2,pwd);
rs = pr.executeQuery();
while (rs.next()){
user = new User(rs.getInt("uid") ,
rs.getString("ukey"),
rs.getString("pwd"),
rs.getString("realname"),
rs.getInt("type"));
}
} catch (InterruptedException | SQLException e) {
e.printStackTrace();
}finally {
if (pr!=null&&rs!=null){
try {
pr.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null){
myConnectionUtils.closeConnection(connection);
}
}
return user;
}
}
编写service
编写servlet
package com.zheng.servlet;
import com.zheng.pojo.User;
import com.zheng.service.impl.UserServiceImpl;
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;
/**
* @Author Mr.Zheng
* @Date 2021/11/19 20:29
* @Version 1.0
*
* 登录的servlet
*/
@WebServlet("/bj/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)