基於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