driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mytest?serverTimezOne=UTC&useUnicode=true&characterEncoding=utf-8
username=root
password=123456
# 初始化连接数量
initialSize=10
# 最大的连接数量
maxActive=200
public class DBUtil {
//通过连接池获取数据
static DruidDataSource dataSource;
static {
//加载配置文件
Properties properties = new Properties();
InputStream resourceAsStream = DBUtil.class.getClassLoader().getResourceAsStream("druidpool.properties");
try {
properties.load(resourceAsStream);
//根据配置文件获取一个数据源
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
* @return
*/
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
public static boolean executeDML(String sql,Object... params){
// 获取连接
Connection cOnnection= getConnection();
try {
//获取预处理的对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设置参数
if (null != params){
for (int i = 0; i
}
int i = preparedStatement.executeUpdate();
return i > 0;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return false;
}
/**
* 通用的查询;查询一个
* @param sql 查询语句
* @param cls 实体类的字节码对象
* @param params 查询语句里面的占位符
* @param
* @return 就是我们查询到的数据集合
*/
public static
List
if(null != ts && ts.size() > 0){
return ts.get(0);//直接获取第一个结果
}
return null;
}
/**
* 通用的查询;需要将我们的数据表信息,封装到List里面进行返回
* @param sql 查询语句
* @param cls 实体类的字节码对象
* @param params 查询语句里面的占位符
* @param
* @return 就是我们查询到的数据集合
*/
public static
try {
Connection cOnnection= getConnection(); //获取连接
//获取预处理sql
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设置参数
if(null != params){
for(int i = 0 ; i
}
}
//执行查询 得到结果集
ResultSet resultSet = preparedStatement.executeQuery();
//获取元数据(我们的列名)
ResultSetMetaData metaData = resultSet.getMetaData();
//列的总数
int columnCount = metaData.getColumnCount();
//用来保存我们所有的表数据
List
T t;//用来保存我们一条数据
//遍历结果集
while(resultSet.next()){ //每一行记录的遍历过程中
t = cls.newInstance();//根据字节码文件,构建一个实体类的对象
//获取所有列的数据
for(int i = 1 ; i <= columnCount ; i++){
//你的查询语句有时候有别名
String columnLabel = metaData.getColumnLabel(i);
//根据列名获取我们的记录
Object object = resultSet.getObject(columnLabel);
//需要将拿到的这一列的记录,放到t对象指定的属性里面;
//需要拿到这个t对象的属性,然后赋值;
//解决方案2: 如果Object是NULL没有必要设置了
if(null != object){
try {
Field field = cls.getDeclaredField(columnLabel);//根据属性的名称通过反射获取他的属性对象
field.setAccessible(true);
field.set(t,object);
} catch (NoSuchFieldException e) {
//代表我们当前这个实体类里面,没有这个属性
}
}
}
//需要将t对象保存到list
list.add(t);
}
return list;
} catch (SQLException sqlException) {
sqlException.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return null;
}
}
package com.biao.web.Servlet;
import cn.dsna.util.images.ValidateCode;
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("/demo/createCode")
public class CodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建一个验证码;验证码的宽高;数字的个数;干扰线
ValidateCode vc = new ValidateCode(180,40,6,55);
//禁止图像缓存
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires",0);
//获取验证码的值
String code = vc.getCode();
req.getSession().setAttribute("code",code);
System.out.println(code);
//将图片验证码输出到前台页面
vc.write(resp.getOutputStream());
}
}
@WebServlet("/demo/login")
public class LoginServlet extends HttpServlet {
LoginService loginService = new LoginService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求的编码格式
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String pass = req.getParameter("pass");
//获得前台传来的验证码
String vcode = req.getParameter("vcode");
//sehngcheng de获得Session的验证码
String code = String.valueOf(req.getSession().getAttribute("code"));
//执行登录的业务
int result = loginService.login(name, pass);
resp.setHeader("Content-type","text/html;charset=UTF-8");
resp.setCharacterEncoding("utf-8");
String msg = "";
if (code.equals(vcode)) {
if (result == SystemCode.USER_LOGIN_SUCCESS) {
msg = "恭喜你登录成功";
//如果用户登录成功,就把用户的姓名保存到会话里面;
//只要这个会话里面有这个用户的姓名;代表这个用户登录成功
req.getSession().setAttribute("name", name);
} else if (result == SystemCode.USER_LOGIN_PASS_WORNG) {
msg = "密码错误";
} else {
msg = "没有这个用户";
}
}else{
msg = "验证码错误";
}
req.setAttribute("msg",msg);
//跳到查询用户数据页面
//req.getRequestDispatcher("/demo/userList").forward(req,resp);
//展示结果
req.getRequestDispatcher("/demo/view").forward(req,resp);
}
}
@WebServlet("/demo/userList")
public class UserServlet extends HttpServlet {
UserService userService = new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
//如果登录就获取登录的用户名
Object name = req.getSession().getAttribute("name");
if (name == null){
//说明没有登陆成功
out.println("");
out.println("");
out.println("");
out.println("");
out.println("you not login 跳转到登录页面");
out.println("");
out.println("");
out.println("");
}else{
List
//查询到我们所有的用户信息
out.println("");
out.println("");
out.println("");
out.println("");
//遍历所有用户信息并且打印
for(User ui : allUser){
out.println(ui);
out.println("
");
}
out.println("");
out.println("");
out.println("");
}
}
}
@WebServlet("/demo/view")
public class View extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("这个是别的地方跳转过来的");
//只负责视图的展示;不负责业务处理
PrintWriter out = response.getWriter();
//从request对象里面;获取一个值
Object msg = request.getAttribute("msg");
Object msg1 = request.getSession().getAttribute("msg");
out.println("");
out.println("");
out.println("");
out.println("");
out.println(msg);
out.println(msg1);
out.println("");
out.println("");
out.println("");
}
}
public class LoginService {
LoginDao loginDao = new LoginDao();
/**
* 登录
* @param name
* @param pass
* @return
*/
public int login(String name, String pass) {
return loginDao.Login(name,pass);
}
}
public class UserService {
UserDao userDao = new UserDao();
public List
return userDao.findAllUser();
};
}
public class User {
private int uid;
private String uname;
private String upass;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
@Override
public String toString() {
return
"uid=" + uid +
", uname='" + uname + '\'' +
", upass='" + upass + '\''
;
}
}
public class LoginDao {
/**
* 从数据库中去查找数据
* @param name
* @param pass
* @return
*/
public int Login(String name,String pass){
//需要去连接数据库查询这个用户是否存在;
String sql = "select * from userinfo where uname = ?";
//去数据库查询我们的用户信息
User user = DBUtil.executeDQLGetOne(sql, User.class,name);
if (user == null){
//代表用户不存在
return SystemCode.USER_LOGIN_USER_NULL;
}
//如果密码一致,代表登录成功
if (pass.equals(user.getUpass())){
return SystemCode.USER_LOGIN_SUCCESS;
}
return SystemCode.USER_LOGIN_PASS_WORNG;
}
}
public class LoginDao {
/**
* 从数据库中去查找数据
* @param name
* @param pass
* @return
*/
public int Login(String name,String pass){
//需要去连接数据库查询这个用户是否存在;
String sql = "select * from userinfo where uname = ?";
//去数据库查询我们的用户信息
User user = DBUtil.executeDQLGetOne(sql, User.class,name);
if (user == null){
//代表用户不存在
return SystemCode.USER_LOGIN_USER_NULL;
}
//如果密码一致,代表登录成功
if (pass.equals(user.getUpass())){
return SystemCode.USER_LOGIN_SUCCESS;
}
return SystemCode.USER_LOGIN_PASS_WORNG;
}
}
public interface SystemCode {
int USER_LOGIN_SUCCESS = 90000; //编号代表登录成功
int USER_LOGIN_PASS_WORNG= 90001; //代表密码错误
int USER_LOGIN_USER_NULL= 90002; //代表用户不存在
}
<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>