目录
二、查询数据库中的login表,与form表单传来的账号密码进行对比,校验登录
一、jdbc连接8.0以上的mysql
mysql在8.0以上的版本更新以后,对应的jdbc连接也有了新的变化。
首先,我们需要配置mysql的环境,推荐大家去网上找教程跟着走就行,这里就不多说mysql的安装配置了。
然后,我们需要下载基于java平台的连接器,这里给大家一个传送门,方便大家下载。MySQL :: Download Connector/J
在我们下载完了这个连接器以后,我们要将其配置在自己的环境中去,这里说一说sts和idea两个编译环境的配置过程。
(1)sts:
第一步:找到自己的项目,右键找到Bulid Path进入其中
第二步:
在Libraries界面点击Add External JARS,加载额外的war包
第三步:选中我们从zip中解压出来的jar包,添加进去,就完成了。
如果你发现这个jar包依然没起作用的话,试试将这个jar包放入项目下的lib文件夹中。
(2)idea:
第一步:点击File进入如下界面
第二步:点击加号,添加自己的依赖,选中我们从zip中解压出来的jar包
第三步:将其放入lib文件夹下
服务启动时会在里面寻找依赖。
配置好了环境以后,就让我们开始吧。
(1)首先,我们要加载驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //这是8.0版本以后的驱动加载
Class.forName("com.mysql.jdbc.Driver"); //这是8.0版本以前的驱动加载
根据不同的版本,我们进行不同的驱动加载。
(2)然后我们要准备对数据库进行连接
建议大家,将其封装成一个类,然后通过导入包的形式来调用里面的函数,避免重复写相同代码。
package mySqlCon;
import java.sql.*;
public class mySqlJdbcCon {
private static Connection con=null;
public static Connection getCon(){
try{
Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
String username="root";
String password="root";
//这是8.0版本以后url的写法
String url="jdbc:mysql://localhost:3306/datebaseName?"+
"useSSL=false&serverTimezone=GMT";
//url="jdbc:mysql://localhost:3306/datebaseName 这是8.0版本以前url的写法
con=DriverManager.getConnection(url,username,password);//连接数据库
}
catch (Exception e) {
// TODO: handle exception
}
return con;//返回连接
}
}
那么现在我们已经成功连接数据库了。
二、查询数据库中的login表,与form表单传来的账号密码进行对比,校验登录
package majie;
import javax.servlet.ServletException;
import java.io.PrintWriter;
//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.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import mySqlCon.mySqlJdbcCon;
//@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
public loginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//控制格式输出
int judge_is_ture=0;
PrintWriter out = response.getWriter();
Statement sql=null;
ResultSet rs=null;
Connection con=null;
//获取表单传来的账号密码
String username_html=request.getParameter("user");
String password_html=request.getParameter("pass");
//开始在数据库中寻找有没有对应的账号密码
try{
con=mySqlJdbcCon.getCon();//连接数据库
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM login");
while(rs.next()) {
String username=rs.getString(1);
String pass=rs.getString(2);
if(username.equals(username_html)&&pass.equals(password_html)) {
judge_is_ture++;
break;
}
//插旗观察
System.out.printf("%s %s\n", username,pass);
}
rs.close();
sql.close();
con.close();
}catch (SQLException e) {
System.out.println(e);
// TODO: handle exception
}catch(Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 最后是用于关闭资源的块
try{
if(sql!=null)
sql.close();
}catch(SQLException se2){
}
try{
if(con!=null)
con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
//成功从数据库中找到匹配的学号和密码,通过验证,进入系统
if(judge_is_ture==1) {
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
//未从数据库中找到对应的学号和密码,校验不通过,返回登录页面
else {
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
public void destroy() {
}
}
我们将form表单传来的数据和数据库中的数据进行对比,如果有相同的,那我们跳出数据查询,开始进行页面跳转,跳转到登录成功以后的页面,如果我们一直都没有找到相同的账号和密码,那引导用户重新返回登录页面。
(1)成功登录
(2)登录失败
(3)与此同时,我们通过插旗,观察到了对数据库中具体数据的访问,可以看到,确确实实是读取了数据库中的数据,并进行了对比