前言:学习Servlet也有一段时间了,但是总感觉走马观花,学一学还是对实际操作不是很懂,最近在看学习视频中有介绍可以自己做一个连接数据库的登录小实战,就当是复习复习之前的JDBC编程那块,也顺便巩固了下Servlet中request和respons这边的常用操作。
问题分析:基本上就是先写一个页面,其中包含输入账号密码,通过表单数据来进行跟MySQL数据库进行对接,判断输入的账号密码是否在数据库中有记录,如果有就跳到新的页面显示登录成功,如果查询不到就也跳到新的页面显示登录失败。
问题思考与解决:首先冒出来的想法是得先写一个SQLConnector类来进行数据库方面的操作,比如进行判断是否存在,存在就返回个true,不存在就返回false;还得需要个登录的前端页面。这两个其实都不难,根据之前学的知识,比较容易的就能写出来,当然JDBC到现在有点忘了,在写这部分遇到了许多问题。
/**
* JDBC工具类 连接SQL并且判断是否存在。
*/
import java.sql.*;
import java.util.Map;
public class SQLConnecter {
boolean isSuccess = false;
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
//以下这个方法做了连接+判断的事情,返回值是一个boolean类型的值。
public boolean ifSuccess(Map<String, String> user) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?serverTimezone=GMT","root","password");
statement = connection.createStatement();
String sql = "select * from users where username = '" + user.get("username") + "' and userpassword = '"+user.get("userpassword") + "' ";
resultSet = statement.executeQuery(sql);
if(resultSet.next()){
isSuccess = true;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return isSuccess;
}
}
在写这个类的时候问题还挺多的,不说其他的,光说这个连接加判断步骤,我都已经想不太起来了,只记得要创建Connection和Statement对象,连ResultSet结果集都没想到。中间部分记得还是比较清楚,反射和通过url连接,创建Statement对象,执行查询结果集,最后返回一个boolean类型,查到就true,数据库中没有就false。
前端页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="/LoginServlet" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="userpassword"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
其中这里的action元素中的LoginServlet就是接下来要写的执行Servlet类了。
这个Servlet类一开始我是没想到的,看视频发现需要一个LoginServlet类来收集前端发送来的数据,并且与数据库方法进行对接,判断正确与否跳转到不同的页面:
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置中文编码
request.setCharacterEncoding("utf-8");
//2.获取请求参数
String username = request.getParameter("username");
String userpassword = request.getParameter("userpassword");
//3.判断是否存在
Map<String, String> userMap = new HashMap<>();
userMap.put("username", username);
userMap.put("userpassword", userpassword);
SQLConnecter userConnector = new SQLConnecter();
if(userConnector.ifSuccess(userMap)){
//登录成功
request.getRequestDispatcher("/SuccessServlet").forward(request, response);
} else {
//登录失败
request.getRequestDispatcher("/FailServlet").forward(request, response);
}
}
}
在这里判断后,跳转到了两个页面,所以说我在这里再写两个页面,分别为SuccessServlet和FailServlet:
@WebServlet("/SuccessServlet")
public class SuccessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码
response.setContentType("text/html;charset=utf-8");
//2.输出
response.getWriter().write("登录成功");
}
}
@WebServlet("/FailServlet")
public class FailServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("登录失败");
}
}
这算是基本上大功告成咯,看看运行结果:
虽说是跳到,不过看到URI方面还是我们写的LoginServlet。
总结一下,在这次的小开发还是比较磕绊的,在视频中学习了很多,发现自己上手能力还是不太行。代码中有许多的常用方法还是掌握的不够。
代码过程中用到的一些方法和开发思路:
JDBC连接数据库与判断常规操作:
- 初始化Connection、Statement、ResultSet对象;
- 方法主题中反射加载驱动:Class.forName("");
- 通过DriverManager.getConnection(“url”, “name”, “password”);来进行连接本地数据库
- 通过Connection对象来创建Statement对象,connection.createStatement()
- 通过Statement对象来执行SQL语句,statement.excuteQuery(sql);
- 处理结果集,释放资源
LoginServlet一般简单的操作如下:
- 设置中文编码方便中文:request.setCharacterEncoding(“utf-8”);
- 获取请求参数:request.getParameter(“name”);
- 对请求参数进行操作
写到这基本上就告一段落了,我觉得自己的学习还是不太行,继续加油吧~