基于Mysql、Servlet和JSP的作业管理系统


JavaEE


github 源码连接点击这里

1. 知识储备

  • Mysql
    数据库语句知识,基本可以用到的都是简单的增删改查表记录语句,学习地址:菜鸟教程的MySQL
    jdbc连接:

       Class.forName(DRIVER);      //注册驱动
       Connection conn = DriverManager.getConnection(URL,USER,PASSWORD); // 创建连接
       String sql= "INSERT INTO STUDENT VALUES (?,?,?)";
       PrepareStatement stmt = conn.prepareStatement(sql);  // 创建语句
       stmt.setString(1, student.getSno()); //设置参数
       stmt.setString(2, student.getSname());
       stmt.setString(3, student.getPassword());
       stmt.executeUpdate(); //执行更新语句,还有一种执行查询操作 stmt.executeQuery();
    
  • Servlet

    Servlet 通过调用 init () 方法进行初始化。
    Servlet 调用 service() 方法来处理客户端的请求,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。
    Servlet 通过调用 destroy() 方法终止(结束)。
    最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

      // WebServlet注解表示这是一个Servlet,并映射到地址/:
      @WebServlet(urlPatterns = "/")
      public class HelloServlet extends HttpServlet {
          protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
                    // 设置响应类型:
                    resp.setContentType("text/html");
    
                    List<Homework> homework_list = student_jdbc.QueryHomework(login_no);
                    req.setAttribute("homework_list", homework_list);  //setAttribute方法设置属性,传数据
                    req.getSession().setAttribute("sno",login_no);     //Session 识别用户的标志
                    req.getRequestDispatcher("student.jsp").forward(req, resp); // getRequestDispatcher方法跳转网页,forword传递参数
                    // 获取输出流:
                    PrintWriter pw = resp.getWriter();
                    // 写入响应:
                    pw.write("<h1>Hello, world!</h1>");
                    // 最后不要忘记flush强制输出:
                    pw.flush();
         }
     }
    

    一个Servlet总是继承自HttpServlet,然后覆写doGet()或doPost()方法。注意到doGet()方法传入了HttpServletRequest和HttpServletResponse两个对象,分别代表HTTP请求和响应。我们使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议,因为HttpServletRequest和HttpServletResponse就已经封装好了请求和响应。以发送响应为例,我们只需要设置正确的响应类
    型,然后获取PrintWriter,写入响应即可。

    getRequestDispatcher()和sendRedirect()区别

    1. request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
      response.sendRedirect()是重新定向,前后页面不是一个request。
      request.getRequestDispather();返回的是一个RequestDispatcher对象。

    2. RequestDispatcher.forward()是在服务器端运行;
      HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
      所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
      而HttpServletResponse.sendRedirect()则不是。

  • JSP

    整个JSP的内容实际上是一个HTML,但是稍有不同:

    包含在<%--和--%>之间的是JSP的注释,它们会被完全忽略;
    包含在<%和%>之间的是Java代码,可以编写任意Java代码;
    如果使用<%= xxx %>则可以快捷输出一个变量的值。

    JSP页面内置了几个变量:

    out:表示HttpServletResponse的PrintWriter;

    session:表示当前HttpSession对象;

    request:表示HttpServletRequest对象。
    这几个变量可以直接使用。

2. 项目介绍


功能简介

完成了用户注册登录功能,对于教师,可以查看自己所教授学生、查看自己所布置的作业、添加学生和布置作业,对于学生,可以查看自己老师布置的作业、完成作业。

数据库设计

使用Powerdesigner画出概念模型图(ER图 .cdm),生成物理模型(.pdm),导出sql脚本文件,使用Navicat for Mysql 创建数据库执行脚本,完成数据库设计。ER图如下:

项目结构

工程文件截图:

Java源代码在com.homework.java文件夹下,包括JDBC连接、Model模型构建和Servlet设计。
* jdbc封装个工具类jdbcUtil。StudentJdbc和TeacherJdbc都调用这个工具类的对象完成驱动注册和连接,可以避免代码重复。
* 工程开始,最先着手于数据库设计,所以最开始编写的就是model,基本就是数据库每个表一个model,用于数据访问。
* Servlet和网页设计同步进行,因为这不是前后端分离开发,按操作,几乎每一个操作对应着一个Servlet和一个JSP网页

界面展示

  1. 用户登录注册界面,根据不同身份,登录进入系统后的功能也不同:

教师

  1. 查看自己布置的作业,会统计学生提交的人数,还可以编辑作业:

  2. 布置作业:

    布置完成:

  3. 查看自己教授的学生信息:

  4. 添加学生:

    添加完成

学生

  1. 查看自己老师布置的作业,会显示是否已经提交:

  2. 提交作业:

    提交完成后:

3. 总结:

一个项目的完成需要精细了思路和扎实的基础知识。设计是完成的一半,一定要先学习相关知识,最好有个类似的项目研究技术。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM