基于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对象。
    这几个变量可以直接使用。
    

项目介绍


功能简介

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

### 数据库设计
    使用Powerdesigner画出概念模型图(ER图 .cdm),生成物理模型(.pdm),导出sql脚本文件,使用Navicat for Mysql 创建数据库执行脚本,完成数据库设计。ER图如下:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503162258804-373712748.png)
### 项目结构
    工程文件截图:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503162424411-1619630011.png)
    
    >**Java源代码**在com.homework.java文件夹下,包括JDBC连接、Model模型构建和Servlet设计。
       * jdbc封装个工具类jdbcUtil。StudentJdbc和TeacherJdbc都调用这个工具类的对象完成驱动注册和连接,可以避免代码重复。
       * 工程开始,最先着手于数据库设计,所以最开始编写的就是model,基本就是数据库每个表一个model,用于数据访问。
       * Servlet和网页设计同步进行,因为这不是前后端分离开发,按操作,几乎每一个操作对应着一个Servlet和一个JSP网页 
### 界面展示
    1. 用户登录注册界面,根据不同身份,登录进入系统后的功能也不同:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503163853767-2119014305.png)
    
    >教师
     
    2. 查看自己布置的作业,会统计学生提交的人数,还可以编辑作业:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164213797-1874667342.png)
        
    3. 布置作业:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164343857-223799618.png)
       
       布置完成:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164909235-1046381890.png)

    4. 查看自己教授的学生信息:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164506806-617003446.png)
    
    5. 添加学生:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164551575-1642489671.png)
      
       添加完成后:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164827473-1430803927.png)

    >学生
  
    6. 查看自己老师布置的作业,会显示是否已经提交:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503164747799-1627741793.png)
     
    7. 提交作业:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503165005915-1774263571.png)

       提交完成后:
    ![](https://img2020.cnblogs.com/blog/1735970/202005/1735970-20200503165046153-845225822.png)

总结:

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

猜你喜欢

转载自www.cnblogs.com/mo--yang/p/12822007.html