为新学习 JSP 的开发爱好者小白写下这篇文章,教你若何创建一个自己的学生信息管理系统,可能有很多小白也在迷茫中,建议你不要灰心啊,在下面我讲给你叙述如何进行完成一套自己的系统,并且提供两套版本,一套为 IntelliJ IDEA 进行开发的版本,一套为 eclipse 开发的系统版本,接下来我以 Idea 开发为基础,整套开发方式完全基于 MVC 架构思想为新入门的小白们进行一步一步的讲解这一块的知识。以下所有信息都是个人完成,若有转载或者借鉴请注明出处。
属性 | 工具 | 版本要求 |
---|---|---|
系统要求 | Windows 10 | 内存 8G 硬盘500G |
JDK | jdk1.8版本 | 1.8 |
开发工具 | IntelliJ IDEA | 2018.2.4 x64 |
数据库类型 | MySQL | 5.7.22 |
开发方式 | Maven | 3.6 |
本项目基于 Maven进行开发,使用Maven进行管理 jar
包,所有大家若是不了解 Maven 开发的小白需要自行学习若何使用 Maven 进行开发项目。
数据库名字:assess
数据库连接默认数据库名:root
数据库连接默认密码:root
数据库中默认拥有用户名:admin
数据库中默认拥有密码:admin
序号 | 字段 | 描述 | 类型和长度 | 其他 | 默认值 |
---|---|---|---|---|---|
1 | id | 唯一编号 | int(100) | 主关键字、自增列 | 无 |
2 | username | 用户名 | varchar(50) | 非空 | 无 |
3 | password | 密码 | varchar(50) | 非空 | 无 |
4 | snum | 学号 | int(50) | 非空 | 无 |
5 | sex | 性别(男女分别:0是男,1是女;) | tinyint(50) | 非空 | 1 |
6 | major | 专业 | varchar(100) | 非空 | 无 |
7 | age | 年龄 | int(50) | 非空 | 无 |
login.jsp
页面主要是为了进行登录,在这个表单页面主要有一个 标签,中间使用了两个
标签进行输入用户名与密码,以
post
方式进行提交到后台。 action
属性里面是提交的路径。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
设置 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");
通过后台查询全部的用户泛型列表数组返回到前端以后,需要对数据进行处理,在主页使用了前面提到的 el
表达式进行获取了数组,且引用了 jstl
标签中的
标签方法进行遍历数据。大家若是不懂这个标签,可以自行去百度中问度娘,在这里不进行啰嗦了。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%----%>
主页
查询全部用户信息,并且返回一个列表数组到前台页面。
在这里进行声明一下,每个请求路径都含有一个参数 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版本》
为了大家更好的学习交流,这里我为大家创建了一个学习的交流群,有什么问题可以在里面联系我