基于Mysql+Servlet+JSP的作业管理系统
阅读完这篇博客,可以基本了解一些基本的javaweb项目的开发过流程。
一、系统分析与设计
1.需求分析
2.数据库设计
- s_student
parameter | type | description |
---|---|---|
name | VARCHAR(20) | 学生姓名,非空 |
username | VARCHAR(20) | 主键 |
password | VARCHAR(20) | 密码,非空 |
- s_teacher
parameter | type | description |
---|---|---|
name | VARCHAR(20) | 教师姓名,非空 |
username | VARCHAR(20) | 主键 |
password | VARCHAR(20) | 密码,非空 |
- s_homework
parameter | type | description |
---|---|---|
title | VARCHAR(20) | 作业标题,主键 |
content | VARCHAR(20) | 作业描述 |
create_time | TIMESTAMP | 创建时间 |
- s_student_homework
parameter | type | description |
---|---|---|
student_username | VARCHAR(20) | 学生用户名,主键 |
homework_title | VARCHAR(20) | 作业标题,主键 |
homework_content | VARCHAR(20) | 作业内容 |
create_time | TIMESTAMP | 作业提交时间 |
3.业务流程设计
![(https://img-blog.csdnimg.cn/20200312231152939.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDQ2ODc5,size_16,color_FFFFFF,t_70)
4.JDBC封装处理
JDBC封装处理,对JDBC访问数据库进行封装,简化代码的使用量。
代码如下
package com.code.jdbc;
import java.sql.*;
public class JDBCControll {
public void setStatment(Statement statment) {
this.statment = statment;
}
public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
private Connection connection;
private Statement statment;
private ResultSet resultSet;
public Connection getConnection() {
return connection;
}
public Statement getStatment() {
return statment;
}
public ResultSet getResultSet() {
return resultSet;
}
public String ConnectMysql(){
String url = "jdbc:mysql://127.0.0.1:3306/school?serverTimezone=UTC";
String driveName = "com.mysql.cj.jdbc.Driver";
try{
Class.forName(driveName);
connection = DriverManager.getConnection(url,"root","123456");
statment = connection.createStatement();
//resultSet = statment.executeQuery(sqlString);
/*while(resultSet.next()){
System.out.println(resultSet.getString(1));
System.out.println(resultSet.getString(2));
System.out.println(resultSet.getString(3));
System.out.println(resultSet.getString(4));
System.out.println(resultSet.getString(5));
System.out.println(resultSet.getString(6));
}*/
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public ResultSet excuteSQL(String sqlString){
ConnectMysql();
try {
resultSet = statment.executeQuery(sqlString);
return resultSet;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public boolean excuteUpdateSQL(String sqlString){
ConnectMysql();
try {
boolean flag = statment.execute(sqlString);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public void closeMysql(){
try {
if(resultSet!=null)
resultSet.close();
if(statment!=null)
statment.close();
if(connection!=null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
excuteUpdateSQL()函数封装对update, Insert, delete等sql语句的封装,excuteSQL()封装select查询语句,外部可直接调用这两个函数进行查询,之后通过getResultSet()方法获得数据集。
二、系统模块的实现
(注:详细代码请从git地址下载)
1.登陆模块
- 登陆界面
简单整洁,手工完成,没有套用模板 - 后端处理代码
@WebServlet("/dealLogin")
public class DealLogin extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("myname");
System.out.println(new String(req.getParameter("myname") .getBytes("utf-8"),"utf-8"));
String password =req.getParameter("mypwd");
System.out.println(new String(req.getParameter("mypwd") .getBytes("iso8859-1"),"utf-8"));
TeacherJDBC teacherJDBC = new TeacherJDBC();
StudentJDBC studentJDBC = new StudentJDBC();
if(teacherJDBC.getTeacherIdentity(userName,password)){
System.out.println("teacher");
req.getRequestDispatcher("jsp/teacherManage.jsp").forward(req, resp);
req.getSession().setAttribute("username1",userName);
}else if(studentJDBC.getStudentIdentity(userName,password)){
System.out.println("student");
req.getRequestDispatcher("jsp/studentManage.jsp").forward(req, resp);
req.getSession().setAttribute("username1",userName);
}else{
}
req.getRequestDispatcher("jsp/login.jsp").forward(req, resp);
}
}
根据输入的用户名判断身份
2.教师功能选择模块
- 功能选择界面
可以选择教师所对应添加学生,查询作业,添加作业功能
3.添加学生
- 系统界面
输入学生信息以添加学生账户 - 后端处理代码
@WebServlet("/dealAddStudent")
public class DealAddStudent extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
StudentJDBC studentJDBC = new StudentJDBC();
boolean flag = studentJDBC.addStudent(req.getParameter("usname"),req.getParameter("password"),req.getParameter("name"));
PrintWriter out = resp.getWriter();
if(flag){
out.println("<script>");
out.println("alert('Add successful!');");
out.println("</script>");
}else{
out.println("<script>");
out.println("alert('Add fail!');");
out.println("</script>");
}
}
}
添加成功提示“Add Successful!”,否则提示"Add fail"
4.添加作业
- 系统界面
输入作业题目以及描述发布作业 - 后端处理代码
@WebServlet("/dealAddHomework")
public class dealAddHomework extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
TeacherJDBC teacherJDBC = new TeacherJDBC();
boolean flag = teacherJDBC.addHomework(req.getParameter("title"),req.getParameter("content"));
PrintWriter out = resp.getWriter();
if(flag){
out.println("<script>");
out.println("alert('Add successful!');");
out.println("</script>");
}else{
out.println("<script>");
out.println("alert('Add fail!');");
out.println("</script>");
}
}
}
5.查询作业
- 系统界面
-
这个界面是一个所有发布作业的总览,点击查看可以查看此次作业的提交情况。
6.学生查看作业
同样可以查看所有的作业信息,并且可以提交作业
设置只可以编辑作业内容,作业题目是不可编辑的是老师设定的题目。
三、常见的bug及问题解决
1.代码地址
https://github.com/dbylx/HomeworkManagement
2查询语句报错问题
注意executeQuery只可以执行查询语句,不可以执行Delete,Insert, 以及Update语句。
3中文乱问题
将jsp网页数据传入后台从idea输出可能会出现乱码,但是utf-8编码的数据显示正常,一般是idea自身编码的问题,可以设置idea的编码,当然也可以忽略,因为它基本不影响我们的程序。