基于Mysql+Servlet+JSP的作业提交系统

一、介绍

1.Mysql
由于之前已经介绍过,此处不再赘述。
Mysql安装介绍
2.Servlet
Servlet是使用Java语言编写的运行在服务器端的程序,Servlet由Servlet容器提供,Servlet容器将Servlet动态地加载到服务器上,使用HTTP请求和HTTP响应与客户端进行交互。
特点:方便、跨平台、具有灵活性和拓展性。

Servlet接口中定义了五个抽象方法:

  • void init (ServletConfig config) 接受一个ServletConfig类型的参数,向Servlet传递初始配置化信息。
  • ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回Servlet的ServletConfig对象。
  • String getServletInfo() 返回一个字符串,其中包含Servlet的信息。
  • void service(ServletRequest request,ServletResponse response) 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。
  • void destroy() 负责释放Servlet对象占用的资源。

HttpServlet类的常用方法:

  • protected void doGet(HttpServletRequest req,HttpServletResponse resp) 用于处理GET类型的HTTP请求的方法。
  • protected void doPost(HttpServletRequest req,HttpServletResponse resp) 用于处理POST类型的HTTP请求的方法。
  • protected void doPut(HttpServletRequest req,HttpServletResponse resp) 用于处理PUT类型的HTTP请求的方法。
    下图为Servlet与浏览器、数据库之间的关系。
    Servlet与数据库、浏览器的关系。
    如图为Servlet与Tomcat的关系,Tomcat介绍及相关安装方法:Tomcat在这里插入图片描述
    3.JSP
    JSP全程Java Server Pages,是一种动态网页开发技术,它使用JSP标签在HTML网页中插入Java代码,通常以<%开始,以%>结束。JSP是一种Java servlet,主要用于实现Java Web应用程序的用户界面部分。网页开发者们通过结合HTML代码,XHTML代码,XML元素以及嵌入JSP操作和命令来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。JSP标签有多种功能,比如访问数据库、记录用户选择信息,访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

二、系统功能

1.系统功能图

下图为系统主要实现的功能:在这里插入图片描述
此系统分为教师部分和学生部分,其中教师部分实现的功能有:添加学生、添加作业、查询学生作业、修改作业、修改学生信息;学生部分实现的功能有:提交作业、重新提交作业。

三、数据库设计

总共有三张表:
1.s_student表:在这里插入图片描述
其中,id为学号,name为学生姓名,create_time为该学生信息的创建时间,update_time为修改时间。

2.s_homework表:
在这里插入图片描述其中,id为作业id,title为作业题目,content为教师布置作业的具体内容,create_time为作业的发布时间,update_time为作业的修改时间。

3.s_student_homework表
在这里插入图片描述
其中,id为数据索引,student_id为学号,homework_id为作业编号,homework_title为作业标题,homework_content为学生提交的作业内容,create_time为提交时间,update_time为修改时间。

四、具体实现

1.首先下载Servlet包:下载地址
下载后,导入项目:File–>project structure–>Modules–>Dependencies–>添加Servlet的驱动包:Servlet-api.jar -->Apply。(此时里面已经包含之前导入的mysql包)
在这里插入图片描述
2.测试Servlet是否可用
有三种方法:
法一:继承Servlet类,在web.xml中添加映射

package servlet;

import javax.servlet.*;
import java.io.IOException;

//通过servlet连接数据库,通过jsp展现数据库中的内容
public class TestServlet implements Servlet {
  @Override
  public void init(ServletConfig servletConfig) throws ServletException {

  }

  @Override
  public ServletConfig getServletConfig() {
    return null;
  }

  @Override
  public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    servletResponse.getWriter().print("hello Sara!");
  }

  @Override
  public String getServletInfo() {
    return null;
  }

  @Override
  public void destroy() {

  }
}

web.xml:其中两个Servlet一定要一致。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

  <!--两个name一定要一致-->
  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>servlet.TestServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>

</web-app>

在浏览器上测试后得到:
在这里插入图片描述
法二:继承HttpServlet类,在web.xml中添加映射。

package servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServletV2 extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String myHeader = req.getHeader("myHeader");
    resp.getWriter().println("Hello servlet GET v2 " + myHeader);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String param = req.getParameter("param");
    resp.getWriter().println("Hello servlet POST v2 " + param);
  }
}

添加映射的方法与之前相同。
法三:无需添加映射,使用@WebServlet注解

package servlet;

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;

//注解驱动(没在web.xml中配置)
@WebServlet("/TestServletV3")
public class TestServletV3 extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String myHeader = req.getHeader("myHeader");
    resp.getWriter().println("Hello servlet GET v3 " + myHeader);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String param = req.getParameter("param");
    resp.getWriter().println("Hello servlet POST v3 " + param);
  }
}

3.代码框架图

在这里插入图片描述

4.具体功能实现(举例介绍)

添加作业:
Homework.java:homework实体类:

package model;

import java.util.Date;

public class Homework {
  private long id;

  private String title;

  private String content;

  private Date createTime;

  private Date updateTime;

  public long getId() {
    return id;
  }

  public String getTitle() {
    return title;
  }

  public String getContent() {
    return content;
  }

  public Date getCreateTime() {
    return createTime;
  }

  public Date getUpdateTime() {
    return updateTime;
  }

  public void setId(long id) {
    this.id = id;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public void setCreateTime(Date createTime) {
    this.createTime = createTime;
  }

  public void setUpdateTime(Date updateTime) {
    this.updateTime = updateTime;
  }
}

AddHomework.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>AddHomework</title>
</head>
<body>
<div style="text-align: center;">
  //使用表单提交,使用post方法
  <form action="/AddHomeworkServlet" method="post">
    标题:
    <input type="text" name="title" width="600px">
    <br>
    <br>
    <textarea cols="18" rows="15" name="content">作业内容</textarea>
    <br><br>
    <button onclick="window.location.href('index.jsp')">返回</button>
    <input type="submit" value="提交"></input>
  </form>
</div>
</body>
</html>

AddHomeworkServlet.java

package servlet;

import jdbc.StudentHomeworkJdbc;
import 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.io.PrintWriter;

//使用注解形式与jsp通信
@WebServlet("/AddHomeworkServlet")
public class AddHomeworkServlet extends HttpServlet {

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Homework homework = new Homework();
    //使用getParameter函数来获取jsp中的表单内容,其中title和content需要和jsp中name相同
    homework.setTitle(req.getParameter("title"));
    homework.setContent(req.getParameter("content"));

    StudentHomeworkJdbc.addHomework(homework);

    PrintWriter out = resp.getWriter();
    out.println("Submit successfully!");
  }
}

StudentHomeworkJdbc.java中的添加作业函数(此类中包括所有对数据库操作的函数)

//发布作业
public static void addHomework(Homework sh){

  String url = "jdbc:mysql://127.0.0.1:3306/school";

  String allUrl = url + "?user=root&password=123456";

  String driverName = "com.mysql.jdbc.Driver";

  String sqlString = "insert into s_student(title,content)values(?,?)";
  //使用PreparedStatement方法执行sql语句
  PreparedStatement pstmt;
  try {
    // 加载驱动
    Class.forName(driverName);

  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  }

  try(Connection connection =  DriverManager.getConnection(allUrl)) {
    try(Statement statement = connection.createStatement()){
      pstmt = connection.prepareStatement(sqlString);
      //此处index值为sql语句中变量的顺序
      pstmt.setString(1,sh.getTitle());
      pstmt.setString(2,sh.getContent());
      pstmt.execute();
    }

  } catch (SQLException e) {
    e.printStackTrace();
  }

}

查看已提交作业:
StudentHomework.java(实体类)

package 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;
  }
}

checkhomework.jsp

<%@ page import="model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="jdbc.StudentHomeworkJdbc" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>CheckHomework</title>
</head>
<body>
<h1 style="text-align: center;font-size: 30px">作业提交情况</h1>
<table align="center" width="960" border="1"
bgcolor="black" cellpadding="1" cellspacing="1">
<tr align="center" bgcolor="#7fffd4" height="50">
<td>ID</td>
<td>学生学号</td>
<td>作业编号</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
</tr>
<%
List<StudentHomework> list = StudentHomeworkJdbc.selectAll();
if(null == list || list.size() <= 0){
out.print("None data.");
}else {
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>
</body>
</html>

StudentHomeworkservlet.java

package servlet;

import jdbc.StudentHomeworkJdbc;
import 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("/list")
public class StudentHomeworkServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    List<StudentHomework> list = StudentHomeworkJdbc.selectAll();


    req.setAttribute("list", list);
    //界面跳转
    req.getRequestDispatcher("index.jsp").forward(req, resp);
  }
}

StudentHomeworkJdbc.java中的查看作业函数:

//查询已提交作业
public static List<StudentHomework> selectAll(){

  String url = "jdbc:mysql://127.0.0.1:3306/school";

  String allUrl = url + "?user=root&password=123456";

  String driverName = "com.mysql.jdbc.Driver";

  String sqlString = "SELECT * FROM s_student_homework";

  try {
    // 加载驱动
    Class.forName(driverName);

  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  }

  List<StudentHomework> list = new ArrayList<>();
  try(Connection connection =  DriverManager.getConnection(allUrl)) {
    try(Statement statement = connection.createStatement()){
      try(ResultSet resultSet = statement.executeQuery(sqlString)){
        // 获取执行结果
        while (resultSet.next()){
          StudentHomework 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"));
          list.add(sh);
        }
      }
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }

  return list;
}

五、部分界面展示

1.主界面
在这里插入图片描述
2.发布作业界面
在这里插入图片描述
3.添加学生界面
在这里插入图片描述
4.查看提交作业界面
在这里插入图片描述
5.提交作业界面
在这里插入图片描述
六、源代码

已将代码放入git,地址为:源码

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值