1. 程式人生 > >java web 學生資訊管理系統

java web 學生資訊管理系統

##學生資訊管理系統

## 資料庫準備

    CREATE DATABASE stus;     USE stus;     CREATE TABLE stu (         sid INT PRIMARY KEY  AUTO_INCREMENT,         sname VARCHAR (20),         gender VARCHAR (5),         phone VARCHAR (20),         birthday DATE,         hobby VARCHAR(50),         info VARCHAR(200)     );

##查詢

1.    先寫一個JSP 頁面, 裡面放一個超連結 。 

      <a href="StudentListServlet"> 學生列表顯示</a>

2.    寫Servlet, 接收請求, 去呼叫 Service  , 由service去呼叫dao

3.    先寫Dao , 做Dao實現。

          public interface StudentDao {

      ​                       /**       *   查詢所有學生           * @return  List<Student>              */             List<Student> findAll()  throws SQLException ;             }

          ---------------------------------------------

        public class StudentDaoImpl implements StudentDao {

​                     /**              * 查詢所有學生              * @throws SQLException               */             @Override             public List<Student> findAll() throws SQLException {                 QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());                 return runner.query("select * from stu", new BeanListHandler<Student>(Student.class));                 }              }    

4. 再Service , 做Service的實現。

        /**          * 這是學生的業務處理規範          * @author xiaomi          *          */         public interface StudentService {                      /**              * 查詢所有學生              * @return  List<Student>              */             List<Student> findAll()  throws SQLException ;                  }              ------------------------------------------              /**          * 這是學生業務實現          * @author xiaomi          *          */         public class StudentServiceImpl implements StudentService{                      @Override             public List<Student> findAll() throws SQLException {                 StudentDao dao = new StudentDaoImpl();                 return dao.findAll();             }         }

5. 在servlet 儲存資料,並且做出頁面響應。

           protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   ​                    try {                //1. 查詢出來所有的學生                StudentService service = new StudentServiceImpl();                List<Student> list = service.findAll();                                //2. 先把資料儲存到作用域中                request.setAttribute("list", list);                //3. 跳轉頁面                request.getRequestDispatcher("list.jsp").forward(request, response);                            } catch (SQLException e) {                e.printStackTrace();            }                    }

6. 在list.jsp上顯示資料

   EL + JSTL  + 表格

##增加 

1. 先跳轉到增加的頁面 , 編寫增加的頁面

2. 點選新增,提交資料到AddServlet . 處理資料。

3. 呼叫service

4. 呼叫dao, 完成資料持久化。

5. 完成了這些儲存工作後,需要跳轉到列表頁面。 這裡不能直接跳轉到列表頁面,否則沒有什麼內容顯示。 應該先跳轉到查詢所有學生資訊的那個Servlet, 由那個Servlet再去跳轉到列表頁面。

6. 愛好的value 值有多個。 

   request.getParameter("hobby");    String[] hobby =     request.getParameterValues("hobby") ---> String[]     String value = Arrays.toString(hobby): // [愛好, 籃球, 足球]

###刪除

1. 點選超連結,彈出一個詢問是否刪除的對話方塊,如果點選了確定,那麼就真的刪除。

        <a href="#" onclick="doDelete(${stu.sid})">刪除</a>

​        

1. 讓超連結,執行一個js方法

       <script type="text/javascript">

           function doDelete(sid) {                /* 如果這裡彈出的對話方塊,使用者點選的是確定,就馬上去請求Servlet。                 如何知道使用者點選的是確定。                如何在js的方法中請求servlet。 */                var flag = confirm("是否確定刪除?");                if(flag){                    //表明點了確定。 訪問servlet。 在當前標籤頁上開啟 超連結,                    //window.location.href="DeleteServlet?sid="+sid;                    location.href="DeleteServlet?sid="+sid;                }            }        </script>

2. 在js訪問裡面判斷點選的選項,然後跳轉到servlet。

3. servlet收到了請求,然後去呼叫service , service去呼叫dao

##更新

1. 點選列表上的更新, 先跳轉到一個EditServlet 

> 在這個Servlet裡面,先根據ID 去查詢這個學生的所有資訊出來。

2. 跳轉到更新的頁面。 ,然後在頁面上顯示資料

         <tr>             <td>姓名</td>             <td><input type="text" name="sname" value="${stu.sname }"></td>           </tr>

           <tr>             <td>性別</td>             <td>                 <!-- 如果性別是男的,  可以在男的性別 input標籤裡面, 出現checked ,                 如果性別是男的,  可以在女的性別 input標籤裡面,出現checked -->                 <input type="radio" name="gender" value="男" <c:if test="${stu.gender == '男'}">checked</c:if>>男                 <input type="radio" name="gender" value="女" <c:if test="${stu.gender == '女'}">checked</c:if>>女             </td>           </tr>

         <tr>             <td>愛好</td>

            <td>                 <!-- 愛好: 籃球 , 足球 , 看書                  因為愛好有很多個,  裡面存在包含的關係 -->                 <input type="checkbox" name="hobby" value="游泳" <c:if test="${fn:contains(stu.hobby,'游泳') }">checked</c:if>>游泳                 <input type="checkbox" name="hobby" value="籃球" <c:if test="${fn:contains(stu.hobby,'籃球') }">checked</c:if>>籃球                 <input type="checkbox" name="hobby" value="足球" <c:if test="${fn:contains(stu.hobby,'足球') }">checked</c:if>>足球                 <input type="checkbox" name="hobby" value="看書" <c:if test="${fn:contains(stu.hobby,'看書') }">checked</c:if>>看書                 <input type="checkbox" name="hobby" value="寫字" <c:if test="${fn:contains(stu.hobby,'寫字') }">checked</c:if>>寫字                          </td>           </tr>

3. 修改完畢後,提交資料到UpdateServlet

> 提交上來的資料是沒有帶id的,所以我們要手動建立一個隱藏的輸入框, 在這裡面給定id的值, 以便提交表單,帶上id。 

        <form method="post" action="UpdateServlet">             <input type="hidden" name="sid" value="${stu.sid }">                      ...         </form>

4. 獲取資料,呼叫service, 呼叫dao.

##分頁功能

* 物理分頁 (真分頁)

> 來資料庫查詢的時候,只查一頁的資料就返回了。  

     優點 記憶體中的資料量不會太大     缺點:對資料庫的訪問頻繁了一點。

    SELECT * FROM stu LIMIT    5 OFFSET 2 

* 邏輯分頁 (假分頁)

> 一口氣把所有的資料全部查詢出來,然後放置在記憶體中。 

    優點: 訪問速度快。     缺點: 資料庫量過大,記憶體溢位。