JavaWeb-MVC設計模式

元數據sql

Meata data數據庫

描述數據的數據 String sql , 描述這份sql字符串的數據叫作元數據設計模式

數據庫元數據 DatabaseMetaData 參數元數據 ParameterMetaData 結果集元數據 ResultSetMetaData架構

MVC設計模式

JSP的開發模式

三層架構&MVC練習

學生信息管理系統

數據庫準備

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 頁面, 裏面放一個超連接 。jsp

    學生列表顯示ide

  2. 寫Servlet, 接收請求, 去調用 Service , 由service去調用daopost

  3. 先寫Dao , 作Dao實現。spa

    public interface StudentDao {

    ​ /**.net

    • 查詢全部學生設計

      • @return List */ List findAll() throws SQLException ; }

      public class StudentDaoImpl implements StudentDao {

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

}
  1. 再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();
        }
    }
  2. 在servlet 存儲數據,而且作出頁面響應。

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

​ try { //1. 查詢出來全部的學生 StudentService service = new StudentServiceImpl(); List list = service.findAll();

//2. 先把數據存儲到做用域中
        request.setAttribute("list", list);
        //3. 跳轉頁面
        request.getRequestDispatcher("list.jsp").forward(request, response);

    } catch (SQLException e) {
        e.printStackTrace();
    }

}
  1. 在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方法

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

  3. servlet收到了請求,而後去調用service , service去調用dao

更新

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

在這個Servlet裏面,先根據ID 去查詢這個學生的全部信息出來。

  1. 跳轉到更新的頁面。 ,而後在頁面上顯示數據

    <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>
  2. 修改完畢後,提交數據到UpdateServlet

提交上來的數據是沒有帶id的,因此咱們要手動建立一個隱藏的輸入框, 在這裏面給定id的值, 以便提交表單,帶上id。

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

        ...
    </form>
  1. 獲取數據,調用service, 調用dao.

分頁功能

  • 物理分頁 (真分頁)

來數據庫查詢的時候,只查一頁的數據就返回了。

優勢 內存中的數據量不會太大
缺點:對數據庫的訪問頻繁了一點。

SELECT * FROM stu LIMIT 5 OFFSET 2
  • 邏輯分頁 (假分頁)

一口氣把全部的數據所有查詢出來,而後放置在內存中。

優勢: 訪問速度快。
缺點: 數據庫量過大,內存溢出。

相關文章
相關標籤/搜索