-
技术介绍
Servlet:其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
JSP(Java Server Pages):JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。由于HttpServlet大多是用来响应HTTP请求,并返回Web页面(例如HTML、XML),所以不可避免地,在编写servlet时会涉及大量的HTML内容,这给servlet的书写效率和可读性带来很大障碍,JSP便是在这个基础上产生的。其功能是使用HTML的书写格式,在适当的地方加入Java代码片段,将程序员从复杂的HTML中解放出来,更专注于servlet本身的内容。
Tomcat:由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,是一个Servlet和JSP容器,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全局管理和Tomcat阀等。 -
系统功能介绍
教师:添加、修改学生,发布、修改作业
学生:提交作业 -
数据库设计介绍
s_homework 教师发布的作业列表
s_student 学生列表
s_student_homework 学生提交的作业列表
博主建表时发现,三个 create_time 会默认选择根据当前时间戳更新,建议取消,否则做 update 时此列也会跟着更新
建表的 SQL 语句已同步到 Git 仓库中,文末附上 Git 仓库的地址 -
JavaEE 实现 —— MVC 模式
DBCP.java——数据库连接池
package com.javaEE.code.class12;
import org.apache.commons.dbcp.BasicDataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
// Database Connection Pool
public class DBCP {
// 数据库连接池
private static BasicDataSource dbcp;
//为不同线程管理连接
private static ThreadLocal<Connection> tl;
//通过配置文件来获取数据库参数
static {
try {
Properties properties = new Properties();
InputStream inputStream = DBCP.class.getClassLoader().getResourceAsStream("com/javaEE/code/class12/Application.properties");
properties.load(inputStream);
inputStream.close();
// 初始化连接池
dbcp = new BasicDataSource();
// 数据库驱动 (Class.forName())
dbcp.setDriverClassName(properties.getProperty("driverName"));
// 数据库url
dbcp.setUrl(properties.getProperty("dbUrl"));
// 数据库用户名
dbcp.setUsername(properties.getProperty("userName"));
// 数据库密码
dbcp.setPassword(properties.getProperty("password"));
// 初始化连接数量
dbcp.setInitialSize(Integer.parseInt(properties.getProperty("initSize")));
// 连接池允许的最大连接数
dbcp.setMaxActive(Integer.parseInt(properties.getProperty("maxActive")));
// 最大等待时间
dbcp.setMaxWait(Integer.parseInt(properties.getProperty("maxWait")));
// 最小空闲数
dbcp.setMinIdle(Integer.parseInt(properties.getProperty("minIdle")) );
// 最大空闲数
dbcp.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
// 初始化线程本地
tl = new ThreadLocal<Connection>();
} catch (Exception e) {
e.printStackTrace();
}
}
// 通过连接池获取一个连接
public static Connection getConnection() throws SQLException {
Connection conn = dbcp.getConnection();
tl.set(conn);
return conn;
}
// 归还连接,未关闭
public static void closeConnection() {
try {
Connection conn = tl.get();
if (conn != null) {
conn.close();
tl.remove();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Model 层——实体类的实现
Homework.java
package com.javaEE.code.class12.model;
import java.util.Date;
public class Homework {
private Long id;
private String homeworkTittle;
private String homeworkContent;
private Date createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getHomeworkTittle() {
return homeworkTittle;
}
public void setHomeworkTittle(String homeworkTittle) {
this.homeworkTittle = homeworkTittle;
}
public String getHomeworkContent() {
return homeworkContent;
}
public void setHomeworkContent(String homeworkContent) {
this.homeworkContent = homeworkContent;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "Homework{" +
"id=" + id +
", homeworkTittle='" + homeworkTittle + '\'' +
", homeworkContent='" + homeworkContent + '\'' +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
}
Student.java
package com.javaEE.code.class12.model;
import java.util.Date;
public class Student {
private Long id;
private String name;
private Date createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
}
StudentHomework.java
package com.javaEE.code.class12.model;
import java.util.Date;
public class StudentHomework {
private Long id;
private Long studentId;
private Long homeworkId;
private String homeworkTitle;
private String homeworkContent;
private Date createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public Long getHomeworkId() {
return homeworkId;
}
public void setHomeworkId(Long homeworkId) {
this.homeworkId = homeworkId;
}
public String getHomeworkTitle() {
return homeworkTitle;
}
public void setHomeworkTitle(String homeworkTitle) {
this.homeworkTitle = homeworkTitle;
}
public String getHomeworkContent() {
return homeworkContent;
}
public void setHomeworkContent(String homeworkContent) {
this.homeworkContent = homeworkContent;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "StudentHomework{" +
"id=" + id +
", studentId=" + studentId +
", homeworkId=" + homeworkId +
", homeworkTitle='" + homeworkTitle + '\'' +
", homeworkContent='" + homeworkContent + '\'' +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
}
Controller 层 ——对数据的操作
JDBC 类对数据进行直接操作
Servlet 类接收 Http 请求,对数据库进行相应操作,并返回结果集给 Viewer 层
StudentJDBC.java
package com.javaEE.code.class12.jdbc;
import com.javaEE.code.class12.DBCP;
import com.javaEE.code.class12.model.Student;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class StudentJDBC {
// 数据库连接
private Connection connection = null;
// 执行对象
private PreparedStatement pstmt = null;
// 查找所有记录
public List<Student> selectAll() {
// 定义 SQL 语句
String sql = "SELECT * FROM s_student";
System.out.println(sql);
// 一条结果
Student s = null;
// 存储结果集
List<Student> resultList = new ArrayList<>();
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
ResultSet resultSet = pstmt.executeQuery(sql);
// 输出结果集
while (resultSet.next()) {
// 初始化一条结果
s = new Student();
s.setId(resultSet.getLong("id"));
s.setName(resultSet.getString("name"));
s.setCreateTime(resultSet.getTimestamp("create_time"));
s.setUpdateTime(resultSet.getTimestamp("update_time"));
resultList.add(s);
}
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return resultList;
}
// 添加一条记录
public void addStudent(Student s) {
// 定义 SQL 语句
// PreparedStatement
String sql = "INSERT INTO s_student(id, name) VALUES (?, ?)";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, s.getId());
pstmt.setString(2, s.getName());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 删除一条记录
public void deleteStudent(Student s) {
// 定义 SQL 语句
// PreparedStatement
String sql = "DELETE FROM s_student WHERE id=?";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, s.getId());
System.out.println(sql);
pstmt.execute();
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 更新一条记录
public void updateStudent(Student s) {
// 定义 SQL 语句
// PreparedStatement
String sql = "UPDATE s_student SET name=?, update_time=? WHERE id=?";
//
try {
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, s.getName());
pstmt.setTimestamp(2, new Timestamp(new Date().getTime()));
pstmt.setLong(3, s.getId());
System.out.println(sql);
pstmt.execute();
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// public static void main(String[] args) {
// StudentJDBC sJDBC = new StudentJDBC();
// Student s = new Student();
// To test addStudent(Student s)
// s.setId(100L);
// s.setName("ddd");
// sJDBC.addStudent(s);
// To test selectAll()
// List<Student> list = sJDBC.selectAll();
// for(Student student : list)
// System.out.println(student.getName());
// To test deleteStudent(Student s)
// s.setId(100L);
// s.setName("ddd");
// sJDBC.deleteStudent(s);
// To test updateStudent(Student s)
// s.setId(100L);
// s.setName("dd");
// sJDBC.updateStudent(s);
// sJDBC.closeAll();
// }
}
HomeworkJDBC.java
package com.javaEE.code.class12.jdbc;
import com.javaEE.code.class12.DBCP;
import com.javaEE.code.class12.model.Homework;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class HomeworkJDBC {
// 数据库连接
private Connection connection = null;
// 执行对象
private PreparedStatement pstmt = null;
// 查找所有记录
public List<Homework> selectAll() {
// 定义 SQL 语句
String sql = "SELECT * FROM s_homework";
System.out.println(sql);
// 一条结果
Homework h = null;
// 存储结果集
List<Homework> resultList = new ArrayList<>();
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
ResultSet resultSet = pstmt.executeQuery(sql);
// 输出结果集
while (resultSet.next()) {
// 初始化一条结果
h = new Homework();
h.setId(resultSet.getLong("id"));
h.setHomeworkTittle(resultSet.getString("title"));
h.setHomeworkContent(resultSet.getString("content"));
h.setCreateTime(resultSet.getTimestamp("create_time"));
h.setUpdateTime(resultSet.getTimestamp("update_time"));
resultList.add(h);
}
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return resultList;
}
// 添加一条记录
public void addHomework(Homework h) {
// 定义 SQL 语句
// PreparedStatement
String sql = "INSERT INTO s_homework(title, content) VALUES (?, ?)";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, h.getHomeworkTittle());
pstmt.setString(2, h.getHomeworkContent());
System.out.println(sql);
pstmt.execute();
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 删除一条记录
public void deleteHomework(Homework h) {
// 定义 SQL 语句
// PreparedStatement
String sql = "DELETE FROM s_homework WHERE id=?";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, h.getId());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 更新一条记录
public void updateHomework(Homework h) {
// 定义 SQL 语句
// PreparedStatement
String sql = "UPDATE s_homework SET title=?, content=?, update_time=? WHERE id=?";
//
try {
// 获取连接
connection = DBCP.getConnection();
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, h.getHomeworkTittle());
pstmt.setString(2, h.getHomeworkContent());
pstmt.setTimestamp(3, new Timestamp(new Date().getTime()));
pstmt.setLong(4, h.getId());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// public static void main(String[] args) {
// HomeworkJDBC hJDBC = new HomeworkJDBC();
// Homework h = new Homework();
// To test addHomework(Homework h)
// h.setId(100L);
// h.setHomeworkTittle("作业");
// h.setHomeworkContent("www.github.com");
// hJDBC.addHomework(h);
// To test selectAll()
// List<Homework> list = hJDBC.selectAll();
// for (Homework homework : list)
// System.out.println(homework.getHomeworkContent());
// To test updateHomework(Homework h)
// h.setId(100L);
// h.setHomeworkTittle("测试作业");
// h.setHomeworkContent("bjtu.edu.cn");
// hJDBC.updateHomework(h);
// To test deleteHomework(Homework h)
// h.setId(100L);
// hJDBC.deleteHomework(h);
//
// hJDBC.closeAll();
// }
}
StudentHomeworkJDBC.java
package com.javaEE.code.class12.jdbc;
import com.javaEE.code.class12.DBCP;
import com.javaEE.code.class12.model.StudentHomework;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class StudentHomeworkJDBC {
// 数据库连接
private Connection connection = null;
// 执行对象
private PreparedStatement pstmt = null;
// 查找所有记录
public List<StudentHomework> selectAll() {
// 定义 SQL 语句
String sql = "SELECT * FROM s_student_homework";
System.out.println(sql);
// 一条结果
StudentHomework sh = null;
// 存储结果集
List<StudentHomework> resultList = new ArrayList<>();
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
// 获取结果集
ResultSet resultSet = pstmt.executeQuery(sql);
// 输出结果集
while (resultSet.next()) {
// 初始化一条结果
sh = new StudentHomework();
sh.setId(resultSet.getLong("id"));
sh.setStudentId(resultSet.getLong("student_id"));
sh.setHomeworkId(resultSet.getLong("homework_id"));
sh.setHomeworkTitle(resultSet.getString("homework_title"));
sh.setHomeworkContent(resultSet.getString("homework_content"));
sh.setCreateTime(resultSet.getTimestamp("create_time"));
sh.setUpdateTime(resultSet.getTimestamp("update_time"));
resultList.add(sh);
}
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return resultList;
}
// 添加一条记录
public void addStudentHomework(StudentHomework sh) {
// 定义 SQL 语句
// PreparedStatement
String sql = "INSERT INTO s_student_homework(student_id, homework_id, homework_title, homework_content) VALUES (?, ?, ?, ?)";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, sh.getStudentId());
pstmt.setLong(2, sh.getHomeworkId());
pstmt.setString(3, sh.getHomeworkTitle());
pstmt.setString(4, sh.getHomeworkContent());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 删除一条记录
public void deleteStudentHomework(StudentHomework sh) {
// 定义 SQL 语句
// PreparedStatement
String sql = "DELETE FROM s_student_homework WHERE id=?";
// 执行 SQL
try {
// 获取连接
connection = DBCP.getConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, sh.getId());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 更新一条记录
public void updateStudentHomework(StudentHomework sh) {
// 定义 SQL 语句
// PreparedStatement
String sql = "UPDATE s_student_homework SET student_id=?, homework_id=?, homework_title=?, homework_content=?, update_time=? WHERE id=?";
//
try {
// 获取连接
connection = DBCP.getConnection();
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setLong(1, sh.getStudentId());
pstmt.setLong(2, sh.getHomeworkId());
pstmt.setString(3, sh.getHomeworkTitle());
pstmt.setString(4, sh.getHomeworkContent());
pstmt.setTimestamp(5, new Timestamp(new Date().getTime()));
pstmt.setLong(6, sh.getId());
System.out.println(sql);
pstmt.execute();
// 归还连接
DBCP.closeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
// public static void main(String[] args) {
// StudentHomeworkJDBC shJDBC = new StudentHomeworkJDBC();
// StudentHomework sh = new StudentHomework();
// To test selectAll()
// List<StudentHomework> list = shJDBC.selectAll();
// for (StudentHomework sh : list)
// System.out.println(sh.getHomeworkContent());
// To test addStudentHomework(StudentHomework sh)
// sh.setStudentId(104L);
// sh.setHomeworkId(104L);
// sh.setHomeworkTitle("作业");
// sh.setHomeworkContent("www.google.com");
// shJDBC.addStudentHomework(sh);
// To test deleteStudentHomework(StudentHomework sh)
// sh.setId(4L);
// shJDBC.deleteStudentHomework(sh);
// To test updateStudentHomework(StudentHomework sh)
// sh.setId(11L);
// sh.setHomeworkId(105L);
// sh.setStudentId(105L);
// sh.setHomeworkTitle("作业");
// sh.setHomeworkContent("bjtu.edu.cn");
// shJDBC.updateStudentHomework(sh);
// shJDBC.closeAll();
// }
}
HomeworkStudentServlet.java 学生看到的作业列表,仅可提交作业
package com.javaEE.code.class12.servlet;
import com.javaEE.code.class12.jdbc.HomeworkJDBC;
import com.javaEE.code.class12.model.Homework;
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.util.List;
// 学生看到的作业列表,仅可提交作业
@WebServlet(name = "HomeworkStudentServlet", urlPatterns = "/HomeworkStudent")
public class HomeworkStudentServlet extends HttpServlet {
private HomeworkJDBC homeworkJDBC = new HomeworkJDBC();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Homework> list = homeworkJDBC.selectAll();
req.setAttribute("list",list);
req.getRequestDispatcher("/jsp/homework-student.jsp").forward(req, resp);
}
}
StudentServlet.java 学生列表
package com.javaEE.code.class12.servlet;
import com.javaEE.code.class12.jdbc.StudentJDBC;
import com.javaEE.code.class12.model.Student;
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.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
// 教师看到学生列表
@WebServlet(name = "StudentServlet", urlPatterns = "/Student")
public class 锕 extends HttpServlet {
private StudentJDBC studentJDBC= new StudentJDBC();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Student> studentList = studentJDBC.selectAll();
req.setAttribute("studentList", studentList);
req.getRequestDispatcher("/jsp/teacher.jsp").forward(req, resp);
}
// https://www.cnblogs.com/xiaochuan94/p/9184444.html
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// 获取方法名
String name = req.getParameter("method");
if(name == null || name.isEmpty()){
throw new RuntimeException("method parameter does not exist");
}
// 获得当前类的Class对象
Class c = this.getClass();
Method method = null;
try {
// 使用反射机制获取在本类中声明了的方法
method = getClass().getDeclaredMethod(name, HttpServletRequest.class, HttpServletResponse.class);
// 反射调用方法
method.invoke(this, req, resp);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
protected void addStudent(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Student s = new Student();
s.setId(Long.parseLong(req.getParameter("studentId")));
s.setName(req.getParameter("studentName"));
studentJDBC.addStudent(s);
// 刷新页面
resp.sendRedirect("Student");
}
protected void updateStudent(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Student s = new Student();
s.setId(Long.parseLong(req.getParameter("studentId")));
s.setName(req.getParameter("studentName"));
studentJDBC.updateStudent(s);
// 刷新页面
resp.sendRedirect("Student");
}
}
HomeworkTeacherServlet.java 教师看到的作业列表,可进行添加和修改操作
package com.javaEE.code.class12.servlet;
import com.javaEE.code.class12.jdbc.HomeworkJDBC;
import com.javaEE.code.class12.model.Homework;
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.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
// 教师看到的作业列表,可进行添加和修改操作
@WebServlet(name = "HomeworkTeacherServlet", urlPatterns = "/HomeworkTeacher")
public class HomeworkTeacherServlet extends HttpServlet {
private HomeworkJDBC homeworkJDBC = new HomeworkJDBC();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Homework> list = homeworkJDBC.selectAll();
req.setAttribute("list",list);
req.getRequestDispatcher("/jsp/homework-teacher.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// 获取方法名
String name = req.getParameter("method");
if (name == null || name.isEmpty()) {
throw new RuntimeException("method parameter does not exist");
}
// 获得当前类的Class对象
Class c = this.getClass();
Method method = null;
try {
// 使用反射机制获取在本类中声明了的方法
method = getClass().getDeclaredMethod(name, HttpServletRequest.class, HttpServletResponse.class);
// 反射调用方法
method.invoke(this, req, resp);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
protected void addHomework(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
Homework h = new Homework();
h.setHomeworkTittle(req.getParameter("title"));
h.setHomeworkContent(req.getParameter("content"));
System.out.println(h.toString());
homeworkJDBC.addHomework(h);
// 刷新页面
resp.sendRedirect("HomeworkTeacher");
}
protected void updateHomework(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
Homework h = new Homework();
h.setId(Long.parseLong(req.getParameter("homeworkId")));
h.setHomeworkTittle(req.getParameter("title"));
h.setHomeworkContent(req.getParameter("content"));
homeworkJDBC.updateHomework(h);
// 刷新页面
resp.sendRedirect("HomeworkTeacher");
}
}
StudentHomeworkServlet.java 学生提交的作业列表
package com.javaEE.code.class12.servlet;
import com.javaEE.code.class12.jdbc.StudentHomeworkJDBC;
import com.javaEE.code.class12.model.StudentHomework;
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.util.List;
@WebServlet(name = "StudentHomeworkServlet", urlPatterns = "/StudentHomework")
public class StudentHomeworkServlet extends HttpServlet {
private StudentHomeworkJDBC studentHomeworkJDBC = new StudentHomeworkJDBC();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<StudentHomework> list = studentHomeworkJDBC.selectAll();
req.setAttribute("list",list);
req.getRequestDispatcher("/jsp/studentHomework.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
StudentHomework sh = new StudentHomework();
sh.setStudentId(Long.parseLong(req.getParameter("studentId")));
sh.setHomeworkId(Long.parseLong(req.getParameter("homeworkId")));
sh.setHomeworkTitle(req.getParameter("title"));
sh.setHomeworkContent(req.getParameter("content"));
System.out.println(sh.toString());
studentHomeworkJDBC.addStudentHomework(sh);
// 刷新页面
// doGet(req, resp);
resp.sendRedirect("HomeworkStudent");
}
}
Viewer 层——界面
index.jsp 首页
<%@ page import="com.javaEE.code.class12.model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="com.javaEE.code.class12.jdbc.StudentHomeworkJDBC" %>
<%--
Created by IntelliJ IDEA.
User:
Date: 2020/2/27
Time: 15:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JavaEE-01</title>
<style>
#div1 {
height: 100%;
width: 50%;
/*float: none;*/
/*border: black;*/
margin: 0 auto;
text-align: center;
}
</style>
</head>
<body>
<h2 align="center">基于 Java + Servlet + MySQL 的简易学生作业管理系统</h2>
<div id="div1" align="center">
<fieldset>
<legend align="left">学生作业管理系统</legend>
<button οnclick="location.href='HomeworkStudent'" type="button">学生登录</button>
<button οnclick="location.href='Student'" type="button">教师登录</button>
</fieldset>
</div>
</button>
</body>
</html>
homework-student.jsp 学生查看作业列表,提交作业
<%@ page import="com.javaEE.code.class12.model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="com.javaEE.code.class12.jdbc.StudentHomeworkJDBC" %>
<%@ page import="com.javaEE.code.class12.model.Homework" %>
<%--
Created by IntelliJ IDEA.
User:
Date: 2020/3/8
Time: 20:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>student</title>
</head>
<body>
<h2 align="center">学生作业管理系统——学生端</h2>
<hr color="black">
<h3 align="center">作业列表</h3>
<div>
<table align="center" width="960" border="1" cellpadding="1" cellspacing="1">
<tr align="center" height="50" bgcolor="gray">
<td>作业ID</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
<td>更新时间</td>
</tr>
<%
// 通过网络请求获取结果
List<Homework> list = (List<Homework>) request.getAttribute("list");
// 通过HomeworkJDBC对象获取结果
// HomeworkJDBC shJDBC = new HomeworkJDBC();
// List<Homework> list = hJDBC.selectAll();
for (Homework h : list) {
%>
<tr align="center" bgcolor="white" height="30">
<td><%=h.getId()%>
</td>
<td><%=h.getHomeworkTittle()%>
</td>
<td><%=h.getHomeworkContent()%>
</td>
<td><%=h.getCreateTime()%>
</td>
<td><%=h.getUpdateTime()%>
</td>
</tr>
<%
}
%>
</table>
</div>
<h3 align="center">提交作业</h3>
<div align="center">
<form action="StudentHomework" method="post" οnsubmit="location.reload()">
<table>
<tr>
<td align="right">作业ID:  </td>
<td><input type="text" name="homeworkId"></td>
</tr>
<tr>
<td align="right">学号:  </td>
<td><input type="text" name="studentId"></td>
</tr>
<tr>
<td align="right">作业标题:  </td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td valign="right">作业内容:  </td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td><br></td>
<td><br></td>
</tr>
<tr>
<td><input type="button" name="Submit" οnclick="history.back();" value="返回上一页"></td>
<td>
 <button οnclick="location.href='index.jsp'" type="button">返回首页</button> 
<input type="submit" value="提交作业"/>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
teacher.jsp 教师可查看学生列表,添加学生,修改学生信息
<%@ page import="com.javaEE.code.class12.model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="com.javaEE.code.class12.jdbc.StudentHomeworkJDBC" %>
<%@ page import="com.javaEE.code.class12.model.Student" %>
<%--
Created by IntelliJ IDEA.
User:
Date: 2020/3/8
Time: 20:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>teacher</title>
<style>
#div2, #div3 {
width: 50%;
float: left;
/*border: black;*/
text-align: center;
}
</style>
</head>
<body>
<h2 align="center">学生作业管理系统——教师端</h2>
<hr color="black">
<h3 align="center">学生列表</h3>
<div align="center">
<div>
<table align="center" width=70% border="1" cellpadding="1" cellspacing="1">
<tr align="center" height="50" bgcolor="gray">
<td>学生ID</td>
<td>学生姓名</td>
<td>创建时间</td>
<td>更新时间</td>
</tr>
<%
// 通过网络请求获取结果
List<Student> list = (List<Student>) request.getAttribute("studentList");
// 通过StudentHomeworkJDBC对象获取结果
// StudentHomeworkJDBC shJDBC = new StudentHomeworkJDBC();
// List<StudentHomework> list = shJDBC.selectAll();
for (Student s : list) {
%>
<tr align="center" bgcolor="white" height="30">
<td><%=s.getId()%>
</td>
<td><%=s.getName()%>
</td>
<td><%=s.getCreateTime()%>
</td>
<td><%=s.getUpdateTime()%>
</td>
</tr>
<%
}
%>
</table>
</div>
<div>
<div id="div2">
<h3>添加学生信息</h3>
<form action="Student?method=addStudent" method="post" οnsubmit="location.reload()">
<table align="center">
<tr>
<td align="right">学生ID:  </td>
<td><input type="text" name="studentId"></td>
</tr>
<tr>
<td align="right">学生姓名:  </td>
<td><input type="text" name="studentName"></td>
</tr>
<tr>
<td><br></td>
<td><br></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="添加学生信息"/>
</td>
</tr>
</table>
</form>
</div>
<div id="div3">
<h3>更新学生信息</h3>
<form action="Student?method=updateStudent" method="post" οnsubmit="location.reload()">
<table align="center">
<tr>
<td align="right">学生ID:  </td>
<td><input type="text" name="studentId"></td>
</tr>
<tr>
<td align="right">学生姓名:  </td>
<td><input type="text" name="studentName"></td>
</tr>
<tr>
<td><br></td>
<td><br></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="更新学生信息"/>
</td>
</tr>
</table>
</form>
</div>
</div>
<input type="button" name="Submit" οnclick="history.back();" value="返回上一页"> 
<button οnclick="location.href='index.jsp'" type="button">返回首页</button> 
<button οnclick="location.href='StudentHomework'" type="button">查看作业提交列表</button> 
<button οnclick="location.href='HomeworkTeacher'" type="button">查看作业发布列表</button> 
</div>
</body>
</html>
homework-teacher.jsp 教师可查看已发布的作业列表,发布作业和修改作业
<%@ page import="com.javaEE.code.class12.model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="com.javaEE.code.class12.jdbc.StudentHomeworkJDBC" %>
<%@ page import="com.javaEE.code.class12.model.Homework" %>
<%--
Created by IntelliJ IDEA.
User:
Date: 2020/3/8
Time: 20:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>student</title>
<style>
#div4, #div5 {
width: 50%;
float: left;
/*border: black;*/
text-align: center;
}
</style>
</head>
<body>
<h2 align="center">学生作业管理系统——教师端</h2>
<hr color="black">
<h3 align="center">作业列表</h3>
<div>
<table align="center" width="960" border="1" cellpadding="1" cellspacing="1">
<tr align="center" height="50" bgcolor="gray">
<td>作业ID</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
<td>更新时间</td>
</tr>
<%
// 通过网络请求获取结果
List<Homework> list = (List<Homework>) request.getAttribute("list");
// 通过HomeworkJDBC对象获取结果
// HomeworkJDBC shJDBC = new HomeworkJDBC();
// List<Homework> list = hJDBC.selectAll();
for (Homework h : list) {
%>
<tr align="center" bgcolor="white" height="30">
<td><%=h.getId()%>
</td>
<td><%=h.getHomeworkTittle()%>
</td>
<td><%=h.getHomeworkContent()%>
</td>
<td><%=h.getCreateTime()%>
</td>
<td><%=h.getUpdateTime()%>
</td>
</tr>
<%
}
%>
</table>
</div>
<div align="center">
<div id="div4">
<h3 align="center">添加作业</h3>
<div align="center">
<form action="HomeworkTeacher?method=addHomework" method="post" οnsubmit="location.reload()">
<table>
<tr>
<td align="right">作业标题:  </td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td valign="right">作业内容:  </td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td><br></td>
<td><br></td>
</tr>
<tr>
<td></td>
<td>
<input type="button" name="Submit" οnclick="history.back();" value="返回上一页"> 
<input type="submit" value="发布作业"/>
</td>
</tr>
</table>
</form>
</div>
</div>
<div id="div5">
<h3 align="center">修改作业</h3>
<div align="center">
<form action="HomeworkTeacher?method=updateHomework" method="post" οnsubmit="location.reload()">
<table>
<tr>
<td align="right">作业ID:  </td>
<td><input type="text" name="homeworkId"></td>
</tr>
<tr>
<td align="right">作业标题:  </td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td valign="right">作业内容:  </td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td><br></td>
<td><br></td>
</tr>
<tr>
<td></td>
<td>
<input type="button" name="Submit" οnclick="history.back();" value="返回上一页">
<input type="submit" value="修改作业"/>
</td>
</tr>
</table>
</form>
</div>
</div>
<input type="button" name="Submit" οnclick="history.back();" value="返回上一页"> 
<button οnclick="location.href='index.jsp'" type="button">返回首页</button> 
<button οnclick="location.href='StudentHomework'" type="button">查看作业提交列表</button> 
<button οnclick="location.href='Student'" type="button">查看学生列表</button> 
</div>
</body>
</html>
StudentHomework.jsp 教师查看已提交的作业
<%@ page import="com.javaEE.code.class12.model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="com.javaEE.code.class12.jdbc.StudentHomeworkJDBC" %>
<%--
Created by IntelliJ IDEA.
User: wkm
Date: 2020/2/27
Time: 09:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>My Homework</title>
</head>
<body>
<h2 align="center">学生作业管理系统——教师端</h2>
<hr color="black">
<h3 align="center">作业提交列表</h3>
<div align="center">
<table align="center" width="960" border="1"
bgcolor="black" cellpadding="1" cellspacing="1">
<tr align="center" bgcolor="gray" height="50">
<td>ID</td>
<td>学生学号</td>
<td>作业编号</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
</tr>
<%
StudentHomeworkJDBC studentHomeworkJDBC = new StudentHomeworkJDBC();
List<StudentHomework> list = studentHomeworkJDBC.selectAll();
for (StudentHomework sh : list) {
%>
<tr align="center" bgcolor="white" height="30">
<td><%=sh.getId()%>
</td>
<td><%=sh.getStudentId()%>
</td>
<td><%=sh.getHomeworkId()%>
</td>
<td><%=sh.getHomeworkTitle()%>
</td>
<td><%=sh.getHomeworkContent()%>
</td>
<td><%=sh.getCreateTime()%>
</td>
</tr>
<%
}
%>
</table>
<br>
<input type="button" name="Submit" οnclick="history.back();" value="返回上一页"> 
<button οnclick="location.href='index.jsp'" type="button">返回首页</button> 
<button οnclick="location.href='Student'" type="button">查看学生列表</button> 
<button οnclick="location.href='HomeworkTeacher'" type="button">查看作业发布列表</button> 
</div>
</body>
</html>
- 其他技术要点
git 远程仓库:详细过程请移步win10 + IDEA + git 实现远程仓库的建立、下载、提交、上传
数据库连接池:具体实现请移步Connection Pool 的实现(JavaEE 8 + MySQL)
解决中文乱码:数据库、jsp、servlet、HTTPrequest 均设置字符集为 UTF-8,文中代码有所体现
根据指定 http 请求参数,调用 Servlet 中指定的方法,文中代码有所体现,注释里也保存了当时参考的博文地址,附链接如下 一个 Servlet 处理多个请求 - git 仓库地址
AFreshCodeFarmer/JavaEE-01
————————2020.3.17更新——————————
仓库内最后一次提交的项目已添加 maven 框架,如需查看本文对应代码可往期 commit ——初版