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()區別
-
request.getRequestDispatcher()是請求轉發,前后頁面共享一個request ;
response.sendRedirect()是重新定向,前后頁面不是一個request。
request.getRequestDispather();返回的是一個RequestDispatcher對象。 -
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網頁
界面展示
- 用戶登錄注冊界面,根據不同身份,登錄進入系統后的功能也不同:
教師
-
查看自己布置的作業,會統計學生提交的人數,還可以編輯作業:
-
布置作業:
布置完成:
-
查看自己教授的學生信息:
-
添加學生:
添加完成
學生
-
查看自己老師布置的作業,會顯示是否已經提交:
-
提交作業:
提交完成后:
3. 總結:
一個項目的完成需要精細了思路和扎實的基礎知識。設計是完成的一半,一定要先學習相關知識,最好有個類似的項目研究技術。