JSP基礎:四、學生信息管理系統思路


一、複習
 Servlet概述
 開發我們的第一個Servlet(手工創建)
 HttpServlet的創建(工具創建)
 Servlet工作原理
 Servlet獲取參數代碼示例
二、新內容 Servlet用戶登錄實例             javax.servlet包和javax.servlet.http包
 1、MVC模式介紹,爲什麼要使用模式?Model模型層-View視圖層-Control控制層
 因爲模式是一種指導,在一個良好的指導下,有助於你完成任務,
 有助於你作出一個優良的設計方案,達到事半功倍的效果。
 而且會得到解決問題的最佳辦法。 設計模式的目標就是
 提高系統的可維護性和可複用性。
 (私人承包的建築隊伍和中國建設集團的區別,參考圖片)
 M odel   :   entity實體類   表示一個表的數據模型User.java
 V iew    :   JSP                收集數據、事件處理、展示數據
 C ontrol:   Servlet           控制跳轉
  在J2EE中,一般由jsp扮演View層、Servlet扮演Control層、java撰寫Model層。
JSP 僅能作爲表現層(View)技術,作用有三點:
    1. 負責收集用戶請求參數。2. 用戶事件的處理。3、狀態數據呈現給用戶。
Servlet 則僅充當控制器(Controller)角色,用戶類似於調度員:(所以用戶的請求發送給 Servlet , Servlet 調用 Model 來處理用戶請求,並調用 JSP 來呈現處理結果;)
Model 通常由 JavaBean 來充當,所以業務邏輯、數據訪問邏輯都在 Model 中實現。
 2、新建一個Java Web Project【StuPrj】
 3、新建MVC分層模式下的包,便於對不同層面的對象進行操作(面向對象思想)
  com.style.control   訪問控制層Servlet
  com.style.dao 數據訪問層DAO  Data Access Object
  com.style.entity 實體層      User  Student等實體對象
  com.style.dbutil 工具包 封裝數據連接類等
 4、在com.style.dbutil裏寫數據庫的連接工具類【DBConnection.java】
 5、在com.style.entity裏寫從數據庫表抽象出來的用戶User對象【User.java】
  屬性有int uid;String uname;String upwd;跟數據庫表的字段一一對應。
 6、在com.style.dao裏寫數據庫表User的訪問DAO【UserDao.java】
  //根據用戶名和密碼來獲取用戶對象
  public User getUser(String name,String pwd)
 7、在com.style.control裏寫用戶登錄的Servlet【LoginServlet.java】
  用戶填入用戶名密碼後跳這個Servlet,
  在doPost方法中調用UserDao判斷用戶是否有權限登錄,
  能登錄跳轉到stuinfo.jsp,不能登錄踢回login.jsp
 注意:JSP中和Java中導包的區別!
 JSP:      <%@page import="com.style.dao.StuDao"%>
 Java:     import com.style.dao.StuDao;
三、學生管理系統實現
 首先參考系統的流程圖。
 1、獲取全部學生展示到頁面上
     a、首先新建學生表錄入學生的信息,
          並在com.style.entity包中新建Student.java類。【實體層】
     b、在com.style.dao包中新建StuDao.java的類,
          用於學生表的數據訪問(增刪改查)。【數據訪問層】
          新增獲取所有學生的方法:public ArrayList<Student> getAllStudents()
          PreparedStatement是預編譯的,對於批量處理可以大大提高效率
          也叫JDBC存儲過程。
     c、在com.style.control包中新增一個StuInfoServlet,
          在doPost方法中調用StuDao的獲取所有學生的方法,用戶獲得所有學生信息。
           刪除學生信息成功後跳轉回stuinfo.jsp頁面。
  1、解決請求亂碼問題、解決響應亂碼問題。
  2、調用DAO查詢到集合數據。
  3、將查到的數據存到request對象中。
  4、頁面轉發到stuinfo.jsp。
     d、準備stuInfo.jsp頁面(分析原來的頁面,純jsp怎麼寫)
          原來純JSP頁面:在尖括號百分號寫java代碼,頁面上寫【數據庫連接查詢、學生的每一條信息】html和java混合,循環tr輸出內容                   
          MVC實現JSP頁面:
  1、從請求request中得到所有學生的集合【得到數據】
  2、循環tr輸出內容。【展示數據】
 2、刪除學生信息
      a、在com.style.dao包StuDao.java類中,
           新增刪除指定學生的方法:public void deleteStudent(String sno)
      b、在com.style.control包中新增一個delete的Servlet,
           在doPost方法中調用StuDao的刪除學生方法,用於刪除學生信息。
           刪除學生信息完成後跳轉到stuinfo的Servlet
      c、JSP界面stuinfo.jsp上調用刪除事件
<a href="delete?num=<%=s.getSno()%>" οnclick="return confirm('是否刪除該學生信息?')">刪除</a>
 -----------------------------------------------------------------------
      注意:【常見錯誤】
     java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
      沒有導包、數據庫驅動字符串沒有寫對。                               
     java.sql.SQLException: No value specified for parameter 1
     你sql語句中的參數和你設置的?不對應 
 -----------------------------------------------------------------------
 3、添加學生信息
      a、在com.style.dao包StuDao.java類中,
           新增添加學生的方法:public void addStudent(Student s)
      b、在stuinfo.jsp上新增添加的學生的鏈接:
           <a href="addstu.jsp">添加學生</a>
      c、新建addstu.jsp頁面、參考前期的新增學生頁面(純表單界面)。
      d、在新學生信息填寫完畢後,提交到一個處理數據的Servlet:
           在com.style.control包中新增一個add的Servlet
  1、解決請求亂碼問題、解決響應亂碼問題
  2、獲取前一個頁面傳遞過來的參數
  3、把數據封裝成Student
  4、調用DAO,將數據插入數據庫
  5、新增完成後跳轉到stuinfo的Servlet
 4、修改學生信息
      a、在com.style.dao包StuDao.java類中,
           新增修改學生的方法:public void updateStudent(Student s)
      b、JSP界面stuinfo.jsp上調用修改事件
  <a href="update?num=<%=s.getSno()%>">修改</a>
      c、新建updatestu.jsp頁面參考前期的修改學生頁面(純表單界面,對比之前界面)
      d、在新學生信息修改完畢後(學生編號不能改),提交到update的Servlet。
      e、在com.style.control包中新增一個update的Servlet
  1、解決請求亂碼問題、解決響應亂碼問題
  2、調用DAO,進行數據庫修改操作
  5、修改完成後跳轉到stuinfo的Servlet
 5、知識擴展和常見問題:
      a、轉發和重定向的區別
 見示例項目:WebDemo
           轉發:
 request.getRequestDispatcher("/index").forward(request, response);
           重定向:
 response.sendRedirect("index");   不能有斜槓
 區別:
 地址欄:轉發地址欄的URL不會變化,重定向地址欄的URL會變成定向後的地址。
 參數:   轉發會將request和response裏的參數帶過去,重定向不能攜帶參數。
 發生在:轉發發生在服務器,重定向發生的客戶端。
 原理:   轉發----->請求--->demo1--->帶着你和你的禮物私下去找--->index.jsp
             重定向--->請求--->demo2--->收下你的禮物給你一個消息(去找index.jsp)
         --->請求--->index.jsp (禮物沒有了) 
 圖示:見圖示。
 問題:帳號密碼錯誤了,要跳轉回login.jsp,重定向還是轉發?點擊修改按鈕,進入UpdateInitServlet,根據拿到的學號,查詢到一個Student信息,跳轉到update.jsp,重定向還是轉發?
      b、關於跳轉路徑中帶不帶/的問題。
  1、對於JSP頁面來說,斜槓代表web服務器(tomcat)的根目錄
  2、對於Servlet來說,斜槓代表項目的根目錄。
   response.sendRedirect("login.jsp"); //響應是JSP頁面級別的
      c、Servlet中怎麼獲取客戶端瀏覽器傳過來的參數?
  String name = request.getParameter("name");       姓名
  String[] strs= request.getParameterValues("ah");   愛好
      c、每一步DAO中訪問數據庫的方法開發完成後在main方法中測試一次。
      d、DBConnection.java數據庫連接工具類。
      e、數據庫中字段使用數據庫關鍵字如:like、in等,sql中使用``包起來可以解決。
      f、關於DAO層繼續抽象出BaseDao的擴展

 
       
發佈了44 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章