JavaWeb学习(五) --------- 简单教务系统设计

本文详细介绍了如何使用Java、Servlet、JDBC和DAO模式开发一个简单的教务系统,涵盖用户注册、注销、信息修改和查询等功能。通过创建t_users表,建立实体类,封装DBUtil工具类,实现DAO操作,创建HTML页面,以及编写Servlet控制器,实现了前后端的数据交互。同时,展示了具体代码实现和数据库操作步骤。
摘要由CSDN通过智能技术生成


前言

我们上一篇文章介绍了 Servlet 请求与响应接口,这篇文章我就来介绍一下基于目前所学知识,来做出的对于教务系统的模拟,其功能包括用户注册,用户注销,用户信息修改及用户查询等,将会用到JDBC、DAO与实体类封装、HTML表单和请求与响应对象的有关知识。


一、开发步骤

  1. 创建用户信息表t_users.frm,表中字段包含用户编号(userId)、用户名(username)、密码(password)、性别(sex)、籍贯(location)

  2. 在包Entity下创建表t_users的对应实体类

  3. 在包Util下创建简化数据库编程的DBUtil工具类

  4. 在包DAO下封装对表操作的DAO类

  5. 创建相关网页,完成向服务器提交数据的功能

  6. 在包Controller下编写相关的Servlet类以完成前端与后端的数据交互

二、具体实现

1. 建立 t_users 表

  1. 打开 Navicat ,在数据库MyDataBase下新建表
    在这里插入图片描述

  2. 给新建表添加userId,username, password,sex及location这五个字段,其中设置userId字段为主键
    在这里插入图片描述

  3. 给这张起名为t_users,注意要添加主键才能完成表的创建在这里插入图片描述

  4. 创建完这张表后,我们在侧边栏双击这张表,打开如下图所示,我们可以在此页面给表添加数据在这里插入图片描述

  5. 给表添加如下五个数据,要记住每添加完一行数据,都要去点下面的对号,对添加此行的数据进行保存,才能继续添加下一行数据
    在这里插入图片描述

2. 创建t_users表的实体类

t_users 实体类相当于 t_users.frm 这个表文件对应在Java代码中的映射。我们在t_users实体类中属性对应t_users表中字段,并且对外提供 getter 与 setter 与 构造方法。要记住,t_users实体类,应该放在Entity包下。

package Entity;

public class t_users {
    private Integer userId;
    private String username;
    private String password;
    private String sex;
    private String location;

    public t_users(Integer userId, String username, String password, String sex, String location) {
        this.userId = userId;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.location = location;
    }

    public Integer getUserId() {
        return userId;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String getSex() {
        return sex;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getLocation() {
        return location;
    }
}

在这里插入图片描述

3. 在WEB-INF下建立lib目录,引入 JDBC jar 包

  1. 在WEB-INF下,新建lib目录
    在这里插入图片描述
  2. 点File —> Project Structure —> Modules —> Dependences
    在这里插入图片描述
  3. 点击下面的 + 号, 然后点击1 JARS or Directions…
    在这里插入图片描述
  4. 然后找到我们刚刚新建的lib文件夹
    在这里插入图片描述
  5. 之后选择Jar Directory 点击 OK 即可
    在这里插入图片描述
  6. 配置好之后,我们找到 JBDC 的 jar 包进行复制,然后再lib目录下粘贴即可
    在这里插入图片描述
  7. 点击粘贴会出现如下字样
    在这里插入图片描述
  8. 导入 jar 包后,lib下结构如图所示
    在这里插入图片描述

4. 封装 Java DBUtil 工具类

我们之前曾经说过,对于开发步骤需要三步或三步以上的操作都要进行封装,来简化操作的复杂度。我们知道JDBC连接数据库需要六步较为繁琐,所以我们要在包Utility下封装DBUtil工具类来简化JDBC的开发。

package Utility;

import java.io.IOException;
import java.sql.*;
import java.util.Properties;
import java.util.ResourceBundle;


public class DBUtil {

    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    private static Connection conn = null;
    private static PreparedStatement ps = null;
    static {
        try {
            ResourceBundle rb = ResourceBundle.getBundle("db");
            driver = rb.getString("driver");
            url = rb.getString("url");
            username = rb.getString("username");
            password = rb.getString("password");
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() {
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    public static void close(Connection conn, PreparedStatement ps, ResultSet rs)  {
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

关于数据库配置文件 db.properties ,我们直接放在src目录下即可,如下图所示
在这里插入图片描述
DBUtil工具类示意图如下
在这里插入图片描述

5. 创建 t_users 的DAO类

t_users 的 DAO 类封装通过JDBC对数据库表t_users的增删改差等操作,也是相当于简化代码简化操作步骤的作用,方便在Servlet类中进行调用。

  1. 向表中添加数据
    在这里插入图片描述
  2. 查询表中所有数据并将数据存储到LIst集合中
    在这里插入图片描述
  3. 删除表中数据
    在这里插入图片描述
  4. 登录验证
    在这里插入图片描述

6. 创建网页

我们做教务系统需要完成的本质任务是从前端到后端的数据库交互,用Java代码操控数据库的部分我们已经完成,接下来需要完成的就是客户端发出请求和服务器处理请求,发出请求就是对应HTML网页上的操作,让我们来看看如何进行操作。

  1. 在web目录下,新建HTML File。注意,是在web下而不是在WEB-INF目录下新建
    在这里插入图片描述
  2. 创建userAdd网页,用于向数据库提供要进行添加的数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>userAdd</title>
</head>
<body>
     <center>
         <form action="/myWeb/user/add" method="get">
             <table border="3">
                 <tr>
                     <td>username</td>
                     <td><input type="text" name="username"/></td>
                 </tr>
                 <tr>
                     <td>password</td>
                     <td><input type="text" name="password"/></td>
                 </tr>
                 <tr>
                     <td>sex</td>
                     <td>
                         <input type="radio" name="sex" value="male">male
                         <input type="radio" name="sex" value="female">female
                     </td>
                 </tr>
                 <tr>
                     <td>location</td>
                     <td><input type="text" name="location"/></td>
                 </tr>
                 <tr>
                     <td><input type="submit" value="submit"></td>
                     <td><input type="reset" value="reset"></td>
                 </tr>
             </table>

         </form>
     </center>
</body>
</html>

action中路径书写为/myWeb/user/add,后面我们创建Servlet类时进行对应的修改
在这里插入图片描述
3. 创建 login.html 与 login_error.html 分别代表登录界面和登录失败之后转到的界面,完成登录验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
      <center>
          <form action="/myWeb/login" method="post">
              <table border="2">
                  <tr>
                      <td>登录名</td>
                      <td><input type="text" name="userName"/></td>
                  </tr>
                  <tr>
                      <td><input type="submit" value="登录"/></td>
                      <td><input type="reset" /></td>
                  </tr>
              </table>

          </form>
      </center>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login_error</title>
</head>
<body>
    <center>
        <font style="color:red;font-size: 30px">登录信息不存在,请重新登录</font>
        <form action="/myWeb/login" method="post">
            <table border="2">
                <tr>
                    <td>登录名</td>
                    <td><input type="text" name="userName"/></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="password" name="password"/></td>
                </tr>
                <tr>
                     <td><input type="submit" value="登录"/></td>
                     <td><input type="reset" /></td>
                </tr>
             </table>
        </form>
</center>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

  1. 创建index.html作为网站首页,其有两个链接-----用户查询 和 用户注册,我们点击相关链接跳转到对应操作界面,其中用户查询中包含删除用户数据的操作
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
    <style>
        h1 {
            font-size : 50px;
            color: brown;
        }
    </style>
</head>
<body>
    <center>
        <h1>欢迎来到教务系统</h1>

        <div>用户信息管理系统</div>
        <div> <li><a href="/myWeb/userAdd.html" target="_self">用户信息注册</a></li></div>
        <div> <li><a href="/myWeb/user/find" target="_self">用户信息查询</a></li></div>

    </center>
</body>
</html>

在这里插入图片描述

7. 在包Controller下编写相关的Servlet类

我们通过HTML页面来向服务器提供数据,我们需要相应的Servlet类通过request请求对象来获取提交数据的值,并且通过response响应对象来进行数据返回

1.若是src下无法建立Servlet,我们找到File —> Project Structure 中来设定src 为 Source Roots
在这里插入图片描述
这样 new 中就有了Servlet
在这里插入图片描述
2.编写 UserAddServlet 类,来完成用户的注册操作,即从前端获取请求数据,然后向后端数据库添加相关数据

package Controller;

import DAO.t_usersDao;
import Entity.t_users;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "userAddServlet", value = "/user/add")
public class UserAddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String  username, password, sex, location;
        t_usersDao userDao = new t_usersDao();
        t_users user = null;
        int cnt = 0;
        PrintWriter out = null;

        username = request.getParameter("username");
        password = request.getParameter("password");
        sex = request.getParameter("sex");
        location = request.getParameter("location");

        user = new t_users(null, username, password, sex, location);
        cnt = userDao.add(user);

        response.setContentType("text/html;charset=utf-8");
        out = response.getWriter();
        if (cnt == 1) {
            out.print("<font style='color:red;font-size:40'>用户信息注册成功</font>");
        } else {
            out.print("<font style='color:red;font-size:40'>用户信息注册失败</font>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

路径要进行改写,与HTML中的路径相适配

在这里插入图片描述
3. 编写UserFindSevlet类,查找表中数据,并将其显示至前端

package Controller;

import DAO.t_usersDao;
import Entity.t_users;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet(name = "UserFindServlet", value = "/user/find")
public class UserFindServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        t_usersDao userDao = new t_usersDao();
        PrintWriter out;
        List<t_users> userList = userDao.findAll();
        response.setContentType("text/html; charset=utf-8");
        out = response.getWriter();
        out.print("<table border='2' align='center'");
        out.print("<tr>");
        out.print("<td>用户编号</td>");
        out.print("<td>用户姓名</td>");
        out.print("<td>用户密码</td>");
        out.print("<td>用户性别</td>");
        out.print("<td>用户住址</td>");
        out.print("</tr>");
        for (t_users users:userList) {
            out.print("<tr>");
            out.print("<td>" + users.getUserId() + "</td>");
            out.print("<td> ***** </td>");
            out.print("<td>" + users.getUsername() + "</td>");
            out.print("<td>" + users.getPassword() + "</td>");
            out.print("<td>" + users.getSex() + "</td>");
            out.print("<td>" + users.getLocation() + "</td>");
            out.print("<td><a href='myWeb/user/delete?userId=" + users.getUserId() + "'>删除用户</a></td>");
        }
        out.print("</table>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

其中通过response向前端输出内容包括一个删除数据的超链接,这里是关联到UserDeleteServlet类完成操作
在这里插入图片描述
4. UserDeleteServlet 类 完成数据的删除操作

package Controller;

import DAO.t_usersDao;
import Entity.t_users;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "UserDeleteServlet", value = "/user/delete")
public class UserDeleteServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userId;
        t_usersDao userDao = new t_usersDao();
        int cnt;
        PrintWriter out = null;
        userId = request.getParameter("userId");
        cnt = userDao.delete(userId);
        response.setContentType("text/html;charset=utf-8");
        out = response.getWriter();
        if (cnt == 1) {
            out.print("<font style='color:red;font-size:40'>用户信息删除成功</font>");
        } else {
            out.print("<font style='color:red;font-size:40'>用户信息删除失败</font>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

在这里插入图片描述
5. LoginServlet 类完成 前端输入数据的登录验证

package Controller;

import DAO.t_usersDao;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         String userName, password;
         t_usersDao userDao = new t_usersDao();
         int cnt = 0;
         request.setCharacterEncoding("utf-8");
         userName = request.getParameter("username");
         password = request.getParameter("password");
         cnt = userDao.login(userName, password);
         if (cnt == 1) {
             response.sendRedirect("/myWeb/index.html");
         } else {
             response.sendRedirect("/myWeb/login_error.html");
         }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

在这里插入图片描述

三、演示

在此我们只演示注册操作

  1. 注册Tomcat按钮,启动Tomcat服务器
    在这里插入图片描述
  2. 跳转到index.html, 因为我们Tomcat web.xml配置文件中默认以index.html为默认资源文件,即首页
    在这里插入图片描述
  3. 打开其下的userAdd.html网页,如下图所示
    在这里插入图片描述
  4. 表单中填入以下数据
    在这里插入图片描述
  5. 点击submit进行提交,提交成功后跳转如下界面
    在这里插入图片描述
  6. 我们在查看数据库表中,多出来此条数据
    在这里插入图片描述
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值