JAVA+Servlet+JavaBean+MySsql+Maven 学生学籍信息管理系统

前言

为新学习 JSP 的开发爱好者小白写下这篇文章,教你若何创建一个自己的学生信息管理系统,可能有很多小白也在迷茫中,建议你不要灰心啊,在下面我讲给你叙述如何进行完成一套自己的系统,并且提供两套版本,一套为 IntelliJ IDEA 进行开发的版本,一套为 eclipse 开发的系统版本,接下来我以 Idea 开发为基础,整套开发方式完全基于 MVC 架构思想为新入门的小白们进行一步一步的讲解这一块的知识。以下所有信息都是个人完成,若有转载或者借鉴请注明出处。

环境

属性工具版本要求
系统要求Windows 10内存 8G 硬盘500G
JDKjdk1.8版本1.8
开发工具IntelliJ IDEA2018.2.4 x64
数据库类型MySQL5.7.22
开发方式Maven3.6

环境说明

本项目基于 Maven进行开发,使用Maven进行管理 jar 包,所有大家若是不了解 Maven 开发的小白需要自行学习若何使用 Maven 进行开发项目。

设计数据库数据

数据库名字:assess
数据库连接默认数据库名:root
数据库连接默认密码:root
数据库中默认拥有用户名:admin
数据库中默认拥有密码:admin

序号字段描述类型和长度其他默认值
1id唯一编号int(100)主关键字、自增列
2username用户名varchar(50)非空
3password密码varchar(50)非空
4snum学号int(50)非空
5sex性别(男女分别:0是男,1是女;)tinyint(50)非空1
6major专业varchar(100)非空
7age年龄int(50)非空

登录页面 login.jsp

login.jsp 页面主要是为了进行登录,在这个表单页面主要有一个 <form></form> 标签,中间使用了两个 <input></input> 标签进行输入用户名与密码,以 post 方式进行提交到后台。 action 属性里面是提交的路径。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style type="text/css">
        *{
            height: auto;
            width: auto;
        }
    </style>
</head>
<body>
<div align="center">
    <form action="/login" method="post">
        <div style="color: red ;font-size: 22px;" >
            ${msg_error == null ? "" : msg_error}
        </div>
        <img src="./images/background.png" style="height: auto;width: auto;background-size: 100%">
        <div >
            <div style="float: left; position: relative;top: -430px;left: 670px">
                <input type="text" id="username" name="username" style="height: 36px;width: 204px;">
                <br>
                <input type="password" id="password" name="password" style="height: 36px;width: 204px;margin-top: 30px;">
                <br>
                <input type="submit" value="登录" style=" width: 70px;height:35px; margin-top: 25px;">
                <input type="reset" value="重置" style=" width: 70px;height: 35px; margin-top: 25px;">
                </tr>
            </div>
        </div>
    </form>
</div>
</body>
</html>

LoginServlet 控制登录

设置 loginServlet 中的提交路径为 /login 提交方式为 POST 方式进行提交
整个项目第一个页面是使用 loginServlet 进行默认跳转到 login.jsp 页面,在注解@WebServlet(name = "login", value = {"", "/login"}) 中有所体现。
login.jsp 页面使用的是 POST 方式的提交,所以,在 doPost 方法中进行获取前台提交的数据信息。获取方式为

		String username = request.getParameter("username");
		String password = request.getParameter("password");

紧接着就是进行判断,当前获取到的用户名是否为空,若是为空的话,默认跳转到登录页面。
若获取到的用户名不为空,则进行数据库连接,进行查找数据库中是否有这个用户,若是有这个用户,则把这个用户的信息都取出来赋给新建的 userBean 对象,拿到获取的不为空的对象,进行密码的比对,通过比对以后通过后,进行重定向到 index.jsp 主页面且进行第一次全部信息的查询。若是在数据库中没有查到这个用户,通过 reqest 重建新属性,返回到登录页面前面使用 el 表达式进行获取返回到前台的数值,且给出一个提示(该账号不存在!),若是有此用户,且用户密码比对不成功的话,给出提示(密码错误,请重新输入!)
登录页面

package com.demo.web.controller;

import com.demo.bean.UserBean;
import com.demo.dao.JdbcUtils;

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;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@WebServlet(name = "login", value = {"", "/login"})
public class LoginController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/login.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        UserBean userBean = new UserBean();

        if (!"".equals(username)) {
            //获取数据库连接
            Connection connection = JdbcUtils.getConnection();
            String sql = "select * from studentinfo where username=\"" + username + "\"";

            //获取当前用户信息
            try {
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
                ResultSet resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) {
                    userBean.setId(resultSet.getInt("id"));
                    userBean.setUsername(resultSet.getString("username"));
                    userBean.setPassword(resultSet.getString("password"));
                    userBean.setSnum(resultSet.getInt("snum"));
                    userBean.setSex(resultSet.getBoolean("sex"));
                    userBean.setMajor(resultSet.getString("major"));
                    userBean.setAge(resultSet.getInt("age"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                try {
                    if (connection.isClosed()){
                        connection.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (!"".equals(password) && userBean.getPassword().equals(password)) {
                //登录成功重定向到主页
                response.sendRedirect("/user?parm=selectAllUser");
            } else {
                request.setAttribute("msg_error", "密码错误,请重新输入!");
                //登录失败跳转到登录页面
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }

        } else {
        	//账号不存在,跳转到登录页面
            request.setAttribute("msg_error", "该账号不存在!");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }

    }
}

登录成功后直接跳转入主页面,并且进行第一次查询全部信息。
请求的是一个路径,且为后面介绍的 UserServlet 进行控制所有的请求路径信息。

	//登录成功重定向到主页
    response.sendRedirect("/user?parm=selectAllUser");

主页 index.jsp

通过后台查询全部的用户泛型列表数组返回到前端以后,需要对数据进行处理,在主页使用了前面提到的 el 表达式进行获取了数组,且引用了 jstl 标签中的 <c:forEach></c:forEach> 标签方法进行遍历数据。大家若是不懂这个标签,可以自行去百度中问度娘,在这里不进行啰嗦了。
主页信息

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%--<meta http-equiv="Refresh" content="3;url=/userBean?parm=selectAllUser"/>--%>
    <title>主页</title>
    <link rel="stylesheet" href="/assets/bootstrap-3.3.7/css/bootstrap.min.css">
</head>
<body>
<div align="center">
    <div style="max-width: 1000px">
        <div>
            ${msg == null ? "" : "<div class='alert alert-info' role='alert'>"}
            ${msg == null ? "" : msg}
            ${msg == null ? "" : "</div>"}
        </div>
        <div style="margin-top: 20px;">
            <table class="table table-striped table-bordered table-hover text-center">
                <thead>
                <tr>
                    <th colspan="7" class="text-center" style="height: 50px;font-size: 28px;background: dodgerblue">
                        学籍信息管理系统
                    </th>
                </tr>
                <tr>
                    <th colspan="7">
                        <form action="/user?parm=selectUserByName" method="post">
                            <div class="input-group">
                                <span class="input-group-btn">
                                    <a class="btn btn-warning" href="/user?parm=selectAllUser" role="button"
                                       target="_self">刷新主页</a>
                                    <a class="btn btn-success" href="/user?parm=toAddUser" role="button" target="_self">添加学生信息</a>
                                    <input type="submit" class="btn btn-primary" value="查询信息">
                                 </span>
                                <input type="text" class="form-control" id="selectUserByName" name="selectUserByName"
                                       value="${selectUserByName}" placeholder="Search for...">
                            </div>
                        </form>

                    </th>
                </tr>
                <tr>
                    <th class="text-center" style="background: aquamarine">id</th>
                    <th class="text-center" style="background: aquamarine">用户名</th>
                    <th class="text-center" style="background: aquamarine">学号</th>
                    <th class="text-center" style="background: aquamarine">性别</th>
                    <th class="text-center" style="background: aquamarine">专业</th>
                    <th class="text-center" style="background: aquamarine">年龄</th>
                    <th class="text-center" style="background: aquamarine">操作</th>
                </tr>
                </thead>
                <tbody class="text-center">
                <c:forEach items="${users}" var="user" varStatus="status">
                    <tr>
                        <td>${status.index+1}</td>
                        <td>${user.getUsername()}</td>
                        <td>${user.getSnum()}</td>
                        <td>${user.getSex()==false ? "男" : "女"}</td>
                        <td>${user.getMajor()}</td>
                        <td>${user.getAge()}</td>
                        <td>
                            <a href="/user?parm=toUpdateUser&uid=${user.getId()}" class="btn btn-info"
                               target="_self">修改</a>
                            <a href="/user?parm=deleteUser&uid=${user.getId()}" class="btn btn-danger"
                               target="_self">删除</a>
                    </tr>
                </c:forEach>
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

进行第一次查询全部用户信息

查询全部用户信息,并且返回一个列表数组到前台页面。
在这里进行声明一下,每个请求路径都含有一个参数 parm 参数,参数的作用是为了进行导航这次的功能是为了做什么的,里面包含了请求做什么。举个例子:请求所有的信息查询为 /user?parm=selectAllUser ,接下来大家可以看下面的代码,方法中进行获取请求的参数 parm 中的内容,然后在下面进行每次的对比,若是 parm 等于前面这个方法即执行此方法中的方法。
下面这个查询全部信息以后,得到了以用户泛型列表数组,且返回到前台页面。

 request.setCharacterEncoding("utf-8");
        String parm = request.getParameter("parm");
        //查询全部用户
        if ("selectAllUser".equals(parm)){
            List<UserBean> userBeanList = userService.selectAllUser(request, response);
            request.setAttribute("users", userBeanList);
            request.getRequestDispatcher("/index.jsp").forward(request, response);
        }

增加用户

增加用户信息这一块使用了多个 input 标签进行输入值,也是同登录页一样,使用 POST 方法进行提交到后台,后台对齐进行数据的处理。

增加用户

跳转进入增加用户界面

 //跳转增加用户界面
        else if ("toAddUser".equals(parm)){
            request.getRequestDispatcher("/add.jsp").forward(request, response);
        }

保存增加用户信息

 request.setCharacterEncoding("utf-8");
        String parm = request.getParameter("parm");
        //增加用户
        if ("addUser".equals(parm)){
            Boolean isSuccess = userService.addUser(request, response);
            if (isSuccess) {
                List<UserBean> userBeanList = userService.selectAllUser(request, response);
                request.setAttribute("msg", "增加用户成功");
                request.setAttribute("users", userBeanList);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            }else {
                List<UserBean> userBeanList = userService.selectAllUser(request, response);
                request.setAttribute("msg", "添加失败,有效信息不能为空");
                request.setAttribute("users", userBeanList);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            }
        }

修改用户信息

修改用户信息需要新对这个需要修改的用户进行一次的查询。并且获取该用户的所有信息返回到需要修改的用户框上面,这样的话,我们以用户唯一字段 id 进行查询,前台前端使用的方法为按钮方式进行提交到后台单独处理这条数据,且路径都是 /user?parm=toUpdateUser&uid=${user.getId()} ,这样对于每条数据都是单独的 id 请求路径,然后后台通过获取这个路径的 uid 即可得知操作的是哪一条数据
修改用户信息

//跳转修改页面
        else if("toUpdateUser".equals(parm)){
            UserBean userBean = userService.selectUserById(request,response);
            request.setAttribute("user", userBean);
            request.getRequestDispatcher("/modify.jsp").forward(request, response);
        }

然后进行获取当前页面的所有信息,进行存入数据库

 //修改用户信息
        else if("updateUser".equals(parm)){
            Boolean isSuccess = userService.updateUser(request, response);
            if (isSuccess) {
                List<UserBean> userBeanList = userService.selectAllUser(request, response);
                request.setAttribute("msg", "更新用户成功");
                request.setAttribute("users", userBeanList);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            }else {
                List<UserBean> userBeanList = userService.selectAllUser(request, response);
                request.setAttribute("msg", "更新失败,有效信息不能为空");
                request.setAttribute("users", userBeanList);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            }
        }

删除用户信息

同样删除用户信息也是使用唯一字段 id 进行操作的删除,同修改用户信息同理 /user?parm=deleteUser&uid=${user.getId()} 使用的单独的使用路径,操作每个用户的信息。

 //删除用户信息
        else if ("deleteUser".equals(parm)){

            Boolean isSuccess = userService.deleteUser(request, response);
            if (isSuccess) {
                List<UserBean> userBeanList = userService.selectAllUser(request, response);
                request.setAttribute("msg", "删除用户成功");
                request.setAttribute("users", userBeanList);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            }
        }

通过用户名关键字查询用户信息

查询用户信息

 //通过用户名关键词查询
        else if ("selectUserByName".equals(parm)){
            List<UserBean> userBeanList = userService.selectUserByName(request,response);
            request.setAttribute("users", userBeanList);
            request.getRequestDispatcher("/index.jsp").forward(request, response);
        }

总结

总体来讲的话,整个项目严格按照 MVC 架构与思想进行设计开发,首先用户访问你的这个站点,需要进行登录,登录以后进入主页,主页的数据为实时的数据库中的数据信息,进行显示到主页面,使用了 JSP 中的标签进行排列读取数据信息,引入了 BootStrap 布局,让小白们接触一下布局风格,然后就是在每次的请求路径中都包含一个参数 parm 在此项目中,该参起到了至关重要的作用,主要作用就是进行导航每次的请求是为了做什么,这里面的 Servlet 起到了 Controller 的作用,进行路径请求的转发。其中的操作逻辑都交给 Service 来做业务逻辑操作。最后有什么问题可以在下面进行评论。哈哈

项目源码

Eclipse 开发版本下载 《JSP+Serlvet+JavaBean+Maven+MySql 学生 | 学籍 | 信息管理系统实战 Eclipse版本》
IDEA 开发版本下载 《JSP+Serlvet+JavaBean+Maven+MySql 学生 | 学籍 | 信息管理系统实战 Idea版本》

项目源码推荐大家加群,选择群文件进行下载
为了大家更好的学习交流,这里我为大家创建了一个学习的交流群,有什么问题可以在里面联系我

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhouhuandev

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

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

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

打赏作者

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

抵扣说明:

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

余额充值