日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Javaweb 第15天 web练习和分页技术

發布時間:2025/7/25 java 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javaweb 第15天 web练习和分页技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第15天 web練習和分頁技術

復習day14內容:

?

學習新技術的思路?

?

?

?

分析功能的思路?

?

?

?

使用queryRunner操作數據庫的步驟?

?

?

ResultSetHandler接口常用實現類(三個重點)?

?

?

?

?

?

今日任務

  • 用戶的聯系人增刪改查
  • 聯系人的條件查詢、
  • 分頁技術實現
  • ?

  • 案例—添加聯系人

  • 圖分析

  • ?

    添加聯系人功能:

    ?

    回顧聯系人管理系統需求:

    1)使用添加聯系人功能,必須要用戶登錄(session中必須要有loginUser),如果,沒有登陸,讓用戶返回登陸頁面。

    2)不同用戶,可以有同樣的聯系人,同一個用戶,聯系人不能重復

    3)聯系人不重復的情況下,數據庫添加一條聯系人的記錄

    ?

    ?

    畫圖分析:

    ?

    ?

    ?

  • 代碼實現

  • Jsp:

    ?

    Servlet代碼:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    import java.lang.reflect.InvocationTargetException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import org.apache.commons.beanutils.BeanUtils;

    ?

    import cn.itcast.domain.Contact;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class AddContactServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????request.setCharacterEncoding("utf-8");

    ????????//第一步:校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//第二步:封裝數據

    ????????Contact con = new Contact();

    ????????try {

    ????????????BeanUtils.populate(con, request.getParameterMap());

    ????????} catch (Exception e) {

    ????????????//抓取異常的時候,根據需求去抓,不同的異常,不同處理

    ????????????e.printStackTrace();

    ????????}

    ????????//單獨封裝了u_id數據,這個數據是,表示當前聯系人是哪個用戶的

    ????????con.setU_id(loginUser.getId());

    ????????//第三步:調用service,添加聯系人

    ????????ContactService contactService = new ContactServiceImpl();

    ????????int info = contactService.addContact(con);

    ????????//第四步:根據返回值,處理

    ????????if(info == 1){

    ????????????//添加成功,請求一個Servlet,獲取所有當前用戶的聯系人數據

    ????????????//response.sendRedirect(request.getContextPath()+"/welcome.jsp");

    ????????????response.sendRedirect(request.getContextPath()+"/findAllContact");

    ????????????return;

    ????????}else if(info == -1){

    ????????????//聯系人重復

    ????????????request.setAttribute("msg", "聯系人重復");

    ????????????request.getRequestDispatcher("/addContect.jsp").forward(request, response);

    ????????????return;

    ????????}else{

    ????????????//服務器忙,請稍候再

    ????????????request.setAttribute("msg", "服務器忙,請稍候再試");

    ????????????request.getRequestDispatcher("/addContect.jsp").forward(request, response);

    ????????????return;

    ????????}

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    ?

    Service代碼:

    接口:

    ?

    /**

    ???? * 添加聯系人方法

    ???? * @param con

    ???? * @return

    ???? */

    ????int addContact(Contact con);

    ?

    實現類:

    private ContactDao contactDao = new ContactDaoImpl();

    ????

    ????@Override

    ????public int addContact(Contact con) {

    ????????//查詢數據庫,聯系人是否重復

    ????????int info = contactDao.findContactByNameAndUid(con.getName(),con.getU_id());

    ????????if(info == 1){

    ????????????//不重復,可以添加

    ????????????contactDao.addContact(con);

    ????????????return 1;

    ????????}else{

    ????????????return -1;

    ????????}

    ????}

    ?

    ?

    ?

    Dao代碼:

    接口:

    /**

    ???? * 根據用戶id和聯系人名稱查詢數據的方法

    ???? * @param name

    ???? * @param u_id

    ???? * @return

    ???? */

    ????int findContactByNameAndUid(String name, int u_id);

    ?

    ????/**

    ???? * 添加聯系人的方法

    ???? * @param con

    ???? */

    ????void addContact(Contact con);

    實現類:

    private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    ????@Override

    ????public int findContactByNameAndUid(String name, int u_id) {

    ????????String sql = "select * from contact where name = ? and u_id = ?";

    ????????try {

    ????????????Contact contact = qr.query(sql, new BeanHandler<Contact>(Contact.class), name,u_id);

    ????????????if(contact == null){

    ????????????????return 1;

    ????????????}else{

    ????????????????return -1;

    ????????????}

    ????????} catch (SQLException e) {

    ????????????//e.printStackTrace();打印堆棧信息,包括了錯誤信息。后期需要寫入日志,數據一定要保留起來

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("查詢聯系人異常");

    ????????}

    ????????

    ????}

    ?

    ????@Override

    ????public void addContact(Contact con) {

    ????????String sql = "insert into contact values(null,?,?,?,?,?)";

    ????????try {

    ????????????qr.update(sql,con.getU_id() ,con.getName(),con.getSex(),con.getAddress(),con.getTel());

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("添加聯系人異常");

    ????????}

    ?

    ????}

    ?

    ?

  • 案例—查詢當前用戶的全部聯系人實現

    查詢全部聯系人(當前登錄用戶的全部聯系人)

    ?

    查詢全部聯系人功能什么時候被調用?

    ?

  • 用戶登錄之后,查詢全部聯系人功能被調用

    獲取到所有聯系人數據之后將數據轉發到welcome.jsp,顯示所有聯系人的數據。

    ?

  • 添加聯系人完成之后,查詢全部聯系人功能被調用

    添加聯系人完成之后,要看到添加的數據。

    需要重新獲取全部聯系人數據,轉發welcome.jsp頁顯示

  • ?

  • 修改聯系人完成之后,查詢全部聯系人功能被調用

    修改聯系人完成之后,看到修改后的數據。

  • ?

  • 刪除聯系人完成之后,查詢全部聯系人功能被調用

    同上

  • 圖分析

  • 代碼實現

  • ?

    loginServlet:

    ?

    ?

    findAllContactServlet:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    import java.util.List;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.Contact;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class FindAllContactServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//獲取數據(u_id

    ????????int u_id = loginUser.getId();

    ????????//調用service方法

    ????????ContactService contactService = new ContactServiceImpl();

    ????????List<Contact> data = contactService.findAll(u_id);

    ????????

    ????????//將數據存入request,轉發到welcome.jsp頁面

    ????????request.setAttribute("data", data);

    ????????request.getRequestDispatcher("/welcome.jsp").forward(request, response);

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    Service:

    ?

    接口:

    /**

    ???? * 查詢指定用戶的所有聯系人

    ???? * @param u_id

    ???? * @return

    ???? */

    ????List<Contact> findAll(int u_id);

    實現類:

    public List<Contact> findAll(int u_id) {

    ????????return contactDao.findAll(u_id);

    ????}

    Dao:

    接口:

    /**

    ???? * 獲取指定用戶聯系人的方法

    ???? * @param u_id

    ???? * @return

    ???? */

    ????List<Contact> findAll(int u_id);

    ?

    實現類:

    ?

    public List<Contact> findAll(int u_id) {

    ????????String sql = "select * from contact where u_id = ?";

    ????????try {

    ????????????return qr.query(sql, new BeanListHandler<Contact>(Contact.class), u_id);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("獲取指定的用戶所有聯系人失敗");

    ????????}

    ????}

    添加聯系人servlet修改:

    ?

    ?

    ?

    ?

  • 案例--修改聯系人分析(分兩次請求

    效果是什么?

    ?

  • 點擊修改連接(第一次請求),在頁面(upadateContact.jsp)上看到原來的數據
  • 點擊修改聯系人按鈕提交數據(第二次請求)
  • 在welcome.jsp頁面看到修改后的數據,通過調用findAllContactServlet,servlet獲取所有的聯系人,看到修改后的結果
  • ?

    ?

    ?

    ?

  • 圖分析

  • 修改聯系人流程一:

    ?

    修改聯系人流程二:

    ?

  • 代碼實現

  • 修改welcome.jsp頁面:

    ?

    ?

    顯示了當前聯系人數據的id:

    ?

    ?

    修改updateContact.jsp頁面:

    ?

    FindContactByIdServlet:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.Contact;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class FindByIDServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//獲取參數聯系人id

    ????????String parameter = request.getParameter("id");

    ????????int id = Integer.parseInt(parameter);

    ????????//調用service方法獲取數據

    ????????ContactService contactService = new ContactServiceImpl();

    ????????Contact con = contactService.findById(id);

    ????????//將數據轉發到updateContact.jsp頁面

    ????????request.setAttribute("con", con);

    ????????request.getRequestDispatcher("/updateContact.jsp").forward(request, response);

    ????????

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    Service:

    接口:

    /**

    ???? * 根據id查詢數據

    ???? * @param id

    ???? * @return

    ???? */

    ????Contact findById(int id);

    ?

    實現類:

    public Contact findById(int id) {

    ????????return contactDao.findById(id);

    ????}

    ?

    Dao:

    接口:

    ?

    /**

    ???? * 根據id查詢數據

    ???? * @param id

    ???? * @return

    ???? */

    ????Contact findById(int id);

    實現類:

    public Contact findById(int id) {

    ????????String sql = "select * from contact where id = ?";

    ????????try {

    ????????????return qr.query(sql, new BeanHandler<Contact>(Contact.class), id);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("獲取指定的聯系人數據失敗");

    ????????}

    ????}

    ?

    修改操作UpdateContactServlet:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    import java.lang.reflect.InvocationTargetException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import org.apache.commons.beanutils.BeanUtils;

    ?

    import cn.itcast.domain.Contact;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class UpdateContactServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????request.setCharacterEncoding("utf-8");

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//封裝數據

    ????????Contact con = new Contact();

    ????????try {

    ????????????BeanUtils.populate(con, request.getParameterMap());

    ????????} catch (Exception e) {

    ????????????e.printStackTrace();

    ????????}

    ????????//調用service

    ????????ContactService contactService = new ContactServiceImpl();

    ????????contactService.updateContact(con);

    ????????//調用findAllContact查看效果

    ????????response.sendRedirect(request.getContextPath()+"/findAllContact");

    ????????

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    ?

    Service:

    接口:

    ?

    /**

    ???? * 修改聯系人

    ???? * @param con

    ???? */

    ????void updateContact(Contact con);

    ?

    實現類:

    public void updateContact(Contact con) {

    ????????contactDao.updateContact(con);

    ????}

    ?

    Dao:

    接口:

    /**

    ???? * 修噶聯系人

    ???? * @param con

    ???? */

    ????void updateContact(Contact con);

    實現類:

    public void updateContact(Contact con) {

    ????????String sql = "update contact set name = ? , sex = ? , tel = ? , address = ? where id = ?";

    ????????try {

    ????????????qr.update(sql, con.getName(),con.getSex(),con.getTel(),con.getAddress(),con.getId());

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("修改指定的聯系人數據失敗");

    ????????}

    ????}

    ?

    ?

    ?

  • 例--刪除聯系人實現

    注意:一般來說,公司在做刪除功能時候,不是真實的物理刪除(執行delete語句),只會設置標記,標記這條數據失效。

    ?

    為什么不刪除數據?

    數據是公司最寶貴的財富,根據數據可以做大數據分析

    例子:根據訂單的下單時間,下單金額,訂單的地址,訂單商品的信息——這個人什么時候發工資,薪資水平,去哪里偷東西,偷哪些貴重物品

    ?

    智能推薦:確定推薦的時間,你需要的品牌,你附近的商家

    ?

    傳智播客:名字,上海地址,老家地址,專業,學歷,年齡,來源,有無工作經驗,是否在校

    ?

    老家地址:下一個分校應該在哪里

    專業:分析出,當前培訓的市場擴張程度

    學歷:給就業部老師,指定相應的就業方案

    年齡:招生的部門,主要的招生的年齡段

    來源:老學員介紹,廣告,優酷視頻看到的,通過百度查詢——下一個推廣的主要方向

    是否在校:第一,是否要開辟高校市場。第二,就業指導老師,準備相應的就業方案

    ?

    ?

    功能的效果:

    ?

  • 畫圖分析

  • ?

    ?

    注意:相關money的功能(加 減 乘 除 ,顯示),相關用戶的功能,一定要把用戶當作小白,把用戶的體驗,能做多好就做多好

    ?

  • 代碼實現

  • Welcome.jsp修改:

    ?

    Servlet代碼:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class DeleteServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//獲取數據 id

    ????????int id = Integer.parseInt(request.getParameter("id"));

    ????????//調用service方法刪除數據

    ????????ContactService contactService = new ContactServiceImpl();

    ????????contactService.delete(id);

    ????????

    ????????//調用findAllContact查看刪除效果

    ????????response.sendRedirect(request.getContextPath()+"/findAllContact");

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    ?

    Service代碼:

    接口:

    /**

    ???? * 刪除操作

    ???? * @param id

    ???? */

    ????void delete(int id);

    實現類:

    ?

    public void delete(int id) {

    ????????contactDao.delete(id);

    ????}

    Dao代碼:

    ?

    接口:

    /**刪除操作

    ???? * @param id

    ???? */

    ????void delete(int id);

    實現類:

    ?

    public void delete(int id) {

    ????????String sql = "delete from contact where id = ?";

    ????????try {

    ????????????qr.update(sql, id);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("刪除指定的聯系人數據失敗");

    ????????}

    ????????

    ????}

  • 案例--根據條件查詢聯系人實現

    頁面分析:

    ?

    ?

    條件查詢sql語句實現:

    ?

    select * from contact where key like '%用戶輸入的查詢內容(value)%';

    ?

    要查詢的數據庫字段:是頁面下拉框選擇的內容(key)

    用戶輸入的查詢條件:是input輸入框中用戶輸入的內容(value)

  • 畫圖分析

  • ?

    ?

  • 代碼實現

  • ?

    Servlet:

    ?

    package cn.itcast.web;

    ?

    import java.io.IOException;

    import java.util.List;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.Contact;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class FindByKeyServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????request.setCharacterEncoding("utf-8");

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//獲取數據(key :查詢字段name tel address || value :用戶輸入的模糊查詢的條件 || u_id 當前用戶

    ????????String key = request.getParameter("key");

    ????????String value = request.getParameter("value");

    ????????int u_id = loginUser.getId();

    ????????//調用service方法獲取數據

    ????????ContactService contactService = new ContactServiceImpl();

    ????????List<Contact> data = contactService.findByKey(key ,value, u_id);

    ????????//將數據轉發到welcome.jsp頁面

    ????????request.setAttribute("data", data);

    ????????request.getRequestDispatcher("/welcome.jsp").forward(request, response);

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    ?

    Service:

    ?

    接口:

    /**

    ???? * 條件查詢方法

    ???? * @param key 查詢字段

    ???? * @param value :用戶輸入的查詢內容

    ???? * @param u_id 當前用戶id

    ???? * @return

    ???? */

    ????List<Contact> findByKey(String key, String value, int u_id);

    ?

    實現類:

    ?

    public List<Contact> findByKey(String key, String value, int u_id) {

    ????????

    ????????return contactDao.findByKey(key,value,u_id);

    ????}

    Dao:

    接口:

    ?

    /**

    ???? * 條件查詢的方法

    ???? * @param key

    ???? * @param value

    ???? * @param u_id

    ???? * @return

    ???? */

    ????List<Contact> findByKey(String key, String value, int u_id);

    ?

    實現類:

    public List<Contact> findByKey(String key, String value, int u_id) {

    ????????String sql = "select * from contact where "+ key +" like ? and u_id = ?";

    ????????try {

    ????????????return qr.query(sql, new BeanListHandler<Contact>(Contact.class), "%"+value+"%",u_id);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("條件查詢聯系人數據失敗");

    ????????}

    ????}

  • 案例--大結果集分頁實現

  • 分頁介紹

  • 大結果集: 一次性,從,數據庫中,獲取,大量(上萬的數量)的,數據。

    分頁: 將數據分批次展示給用戶

    ?

    ?

    大結果集分頁的技術需求(它因為什么原因誕生的):

    ?

    1)物理計算機的瓶頸(內存瓶頸),如果給一個只有1千萬數據內存的機器,給了2千萬數據。數據溢出。

    ?

    一個水桶,只能裝1L水,現在我給他灌2L的水,肯定有1L的水溢出,浪費了。

    2)封裝數據到對象,過程十分慢長(這個漫長是數據量太大),這樣的用戶體驗非常差

    假設:有一個超級機器,內存無限的,1個數據要1秒鐘,1千萬數據,一千萬秒。

    ?

    ?

    補充:用戶等待一個功能響應,一般只會等多久?

    跟據不同的信息內容,不同。

    查看商品,用戶不喜歡等待,而且有代替方案,一般5到15秒。

    支付,等30秒左右

    搶票,不要動我的手機,我正在搶票,等待時間3分鐘。

    ?

    ?

    ?

    分頁技術的實現:數據庫實現,內存實現(redis數據庫)

    ?

    ?

    數據庫實現:通過關鍵字,限制一次性從數據庫中獲取數據的起始位置和長度。

    ?

    起始位置:數據從哪一行開始獲取。

    長度:一次性獲取數據的量。

    ?

    MySql關鍵字:limit

    ?

    Select * from contact where key =? limit ?,?

    ?

    第一個問號:起始位置

    第二個問號:長度

    ?

    ?

    代碼測試:

    //測試數據庫分頁

    //測試數據庫分頁

    ????@Test

    ????public void test1(){

    ????????

    ????????QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    ????????//第一個?:起始位置第二個?:長度

    ????????String sql = "select * from contact limit ?,?";

    ????????try {

    ????????????List<Contact> list = qr.query(sql, new BeanListHandler<Contact>(Contact.class), 10,10);

    ????????????System.out.println(list);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????}

    ????}

    效果截圖:

    ?

    ?

    ?

    內存分頁實現:

    ?

    先將數據從數據庫中獲取出來,將數據存入緩存(list集合)中,將數據分批次展示給用戶。

    ?

    緩存:內存中開辟的空間,專門用來存儲數據的

    ?

    代碼測試:

    ?

    //測試內存分頁

    ????????@Test

    ????????public void test2(){

    ????????????

    ????????????QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    ????????????//第一個?:起始位置第二個?:長度

    ????????????String sql = "select * from contact";

    ????????????try {

    ????????????????List<Contact> list = qr.query(sql, new BeanListHandler<Contact>(Contact.class));

    ????????????????//list集合中的數據分批次展示給用戶

    ????????????????List<Contact> subList = list.subList(3, 6);

    ????????????????System.out.println(subList);

    ????????????} catch (SQLException e) {

    ????????????????e.printStackTrace();

    ????????????}

    ????????}

    ?

    代碼執行效果:

    ?

  • 頁面修改(功能展示)

  • ?

    頁面修改結果:

    ?

    ?

    分析——使用數據庫分頁技術實現分頁效果,需要那些數據?

    ?

  • 用戶需要看到的數據的頁碼(pageNum)
  • 當前聯系人總數(total)
  • 一頁多少行(長度size)
  • 尾頁(end)
  • 當前分頁查詢的結果(聯系人數據data:List<Contact>)
  • ?

  • Page類(封裝分頁數據的對象)書寫

  • ?

    將復雜的數據,我們封裝一個對象中,這個對象,我們取名字叫Page

    符合面向對象思想,封裝。

    ?

    ?

  • 畫圖分析

  • ?

    ?

  • 代碼實現

  • ?

    ?

    Servlet:

    package cn.itcast.web;

    ?

    import java.io.IOException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.Page;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class QueryPageServlet extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????//校驗登錄

    ????????User loginUser = (User)request.getSession().getAttribute("loginUser");

    ????????if(loginUser == null){

    ????????????response.sendRedirect(request.getContextPath()+"/login.jsp");

    ????????????return;

    ????????}

    ????????//獲取數據

    ????????int pageNum = Integer.parseInt(request.getParameter("pageNum"));

    ????????int u_id = loginUser.getId();

    ????????//調用service方法獲取數據

    ????????ContactService contactService = new ContactServiceImpl();

    ????????Page page = contactService.queryPage(u_id,pageNum);

    ????????//將數據轉發到welcome.jsp頁面

    ????????request.setAttribute("page", page);

    ????????request.getRequestDispatcher("/welcome.jsp").forward(request, response);

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????doGet(request, response);

    ????}

    ?

    }

    ?

    ?

    Service:

    接口:

    /**

    ???? * 分頁查詢的方法

    ???? * @param u_id

    ???? * @param pageNum

    ???? * @return

    ???? */

    ????Page queryPage(int u_id, int pageNum);

    實現類:

    ?

    public Page queryPage(int u_id, int pageNum) {

    ????????//獲取總記錄數據

    ????????int total = contactDao.count(u_id);

    ????????

    ????????//定義長度

    ????????int size = 10;

    ????????//計算尾頁

    ????????//total size end %

    ????????//100 10 10 0

    ????????//101 10 11 1

    ????????int end = total % size == 0 ? (total / size) :(total / size)+1;

    ????????//計算起始位置

    ????????int startIndex = (pageNum - 1) * size;

    ????????//獲取聯系人數據

    ????????List<Contact> data = contactDao.queryPage(u_id ,startIndex,size);

    ????????//封裝數據到page對象

    ????????Page page = new Page();

    ????????page.setData(data);

    ????????page.setEnd(end);

    ????????page.setPageNum(pageNum);

    ????????page.setSize(size);

    ????????page.setTotal(total);

    ????????//返回page

    ????????return page;

    ????}

    Dao:

    接口:

    ?

    /**

    ???? * 獲取總記錄數

    ???? * @param u_id

    ???? * @return

    ???? */

    ????int count(int u_id);

    ?

    ????/**

    ???? * 獲取聯系人數據

    ???? * @param u_id

    ???? * @param startIndex

    ???? * @param size

    ???? * @return

    ???? */

    ????List<Contact> queryPage(int u_id, int startIndex, int size);

    ?

    實現類:

    ?

    public int count(int u_id) {

    ????????String sql = "select count(*) from contact where u_id = ? ";

    ????????//ScalarHandler:封裝count avg max min 。。。。函數執行結果

    ????????try {

    ????????????//Long:一般數據的總數,使用int 類型存不下的

    ????????????Long long1 = qr.query(sql, new ScalarHandler<Long>(), u_id);

    ????????????return long1.intValue();

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("分頁總數獲取失敗");

    ????????}

    ????}

    ?

    ????@Override

    ????public List<Contact> queryPage(int u_id, int startIndex, int size) {

    ????????String sql = "select * from contact where u_id = ? limit ?,?";

    ????????try {

    ????????????return qr.query(sql, new BeanListHandler<Contact>(Contact.class), u_id,startIndex,size);

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("分頁聯系人數據獲取失敗");

    ????????}

    ????}

    loginServlet:

    ?

    ?

    Welcome.jsp修改:

    ?

  • 案例—分頁與條件查詢組合實現(了解:內容)

    畫圖分析

    需求:將條件查詢的結果,進行分頁顯示

    ?

  • 頁面修改

  • 1)要分頁請求中,必須包含條件請求參數

    2)條件查詢的請求中,必須包含分頁請求的參數

  • 組合查詢servlet

  • package cn.itcast.web;

    ?

    import java.io.IOException;

    ?

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    ?

    import cn.itcast.domain.Page;

    import cn.itcast.domain.User;

    import cn.itcast.service.ContactService;

    import cn.itcast.service.impl.ContactServiceImpl;

    ?

    public class QueryPageServlet2 extends HttpServlet {

    ?

    ????public void doGet(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ?

    ????????// 校驗登陸

    ????????User loginUser = (User) request.getSession().getAttribute("loginUser");

    ????????if (loginUser == null) {

    ????????????response.sendRedirect(request.getContextPath() + "/login.jsp");

    ????????????return;

    ????????}

    ????????// 獲取數據

    ????????String key = request.getParameter("key");

    ????????String value = request.getParameter("value");

    ????????// 處理中文亂碼

    ????????if(value == null){

    ????????????value = "";

    ????????}

    ????????value = new String(value.getBytes("iso-8859-1"), "utf-8");

    ????????int pageNum = Integer.parseInt(request.getParameter("pageNum"));

    ????????int u_id = loginUser.getId();

    ????????// 調用service方法

    ????????ContactService contactService = new ContactServiceImpl();

    ????????Page page = contactService.queryPage2(key, value, pageNum, u_id);

    ????????// 展示數據

    ????????// 除了要將分頁(page)數據保存到request對象

    ????????// 注意:要將查詢keyvalue都要保存到request對象

    ????????request.setAttribute("page", page);

    ????????request.setAttribute("key", key);

    ????????request.setAttribute("value", value);

    ????????request.getRequestDispatcher("/welcome.jsp").forward(request, response);

    ?

    ????}

    ?

    ????public void doPost(HttpServletRequest request, HttpServletResponse response)

    ????????????throws ServletException, IOException {

    ????????// 處理中文亂碼

    ????????request.setCharacterEncoding("utf-8");

    ????????// 校驗登陸

    ????????User loginUser = (User) request.getSession().getAttribute("loginUser");

    ????????if (loginUser == null) {

    ????????????response.sendRedirect(request.getContextPath() + "/login.jsp");

    ????????????return;

    ????????}

    ????????// 獲取數據

    ????????String key = request.getParameter("key");

    ????????String value = request.getParameter("value");

    ????????int pageNum = Integer.parseInt(request.getParameter("pageNum"));

    ????????int u_id = loginUser.getId();

    ????????// 調用service方法

    ????????ContactService contactService = new ContactServiceImpl();

    ????????Page page = contactService.queryPage2(key, value, pageNum, u_id);

    ????????// 展示數據

    ????????// 除了要將分頁(page)數據保存到request對象

    ????????// 注意:要將查詢keyvalue都要保存到request對象

    ????????request.setAttribute("page", page);

    ????????request.setAttribute("key", key);

    ????????request.setAttribute("value", value);

    ????????request.getRequestDispatcher("/welcome.jsp").forward(request, response);

    ????}

    ?

    }

    ?

    ?

  • 組合查詢service

  • 接口:

    /**

    ???? * 條件查詢和分頁方法

    ???? * @param key

    ???? * @param value

    ???? * @param pageNum

    ???? * @param u_id

    ???? * @return

    ???? */

    ????Page queryPage2(String key, String value, int pageNum, int u_id);

    實現類:

    ????public Page queryPage2(String key, String value, int pageNum, int u_id) {

    ????????// 獲取總記錄數

    ????????int total = contactDao.count2(u_id,key,value);

    ????????// 定義長度

    ????????int size = 3;

    ????????// 根據總記錄數和長度,計算尾頁

    ????????// 不能直接做除法:

    ????????// 如果有101條數據,應該有11頁,但是除法運算,結果:10

    ????????int end = total % size == 0 ? (total / size) : (total / size) + 1;

    ????????// 計算數據庫查詢的起始位置

    ????????// 第一頁:pageNum=1 1-1=0 0*size = 0

    ????????// 第二頁:pageNum=2 2-1=1 1*size = 10

    ????????// 第三頁:pageNum=3 3-1=2 2*size = 20

    ????????int startIndex = (pageNum - 1) * size;

    ????????// 獲取聯系人數據

    ????????List<Contact> data = contactDao.queryPage2(u_id,key,value, startIndex, size);

    ????????// 創建對象封裝數據(page

    ????????Page p = new Page();

    ????????p.setData(data);

    ????????p.setEnd(end);

    ????????p.setPageNum(pageNum);

    ????????p.setSize(size);

    ????????p.setTotal(total);

    ????????// 返回page

    ????????return p;

    ????}

  • 組合查詢dao

  • 接口:

    ?

    /**

    ???? * 條件查詢和分頁——獲取總記錄數據

    ???? * @param u_id

    ???? * @param key

    ???? * @param value

    ???? * @return

    ???? */

    ????int count2(int u_id, String key, String value);

    ?

    ????/**

    ???? * 條件查詢和分頁——獲取聯系人數據

    ???? * @param u_id

    ???? * @param key

    ???? * @param value

    ???? * @param startIndex

    ???? * @param size

    ???? * @return

    ???? */

    ????List<Contact> queryPage2(int u_id, String key, String value,

    ????????????int startIndex, int size);

    ?

    實現類:

    ?

    @Override

    ????public int count2(int u_id, String key, String value) {

    ????????QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    ????????String sql = "select count(*) from contact where u_id = ?";

    ????????//思考:用戶登錄之后,默認查詢當前用戶全部聯系人,key value 沒有數據

    ????????//所以,我們需要根據keyvalue的值,判斷,應該生成什么樣的sql語句

    ????????//定義一個集合用來存儲數據,這個集合中的數據,會根據判斷,變化

    ????????List<Object> list = new ArrayList<Object>();

    ????????list.add(u_id);

    ????????if(key !=null && !key.equals("")){

    ????????????//表示當前key是有數據

    ????????????//應該拼接上keyvalue

    ????????????//思考:因為有判斷存在,sql語句的參數,有時候是一個問號,有時是兩個問號

    ????????????sql = sql + " and "+key+" like ?";

    ????????????list.add("%"+value+"%");

    ????????}

    ????????

    ????????try {

    ????????????Long long1 = qr.query(sql, new ScalarHandler<Long>(),list.toArray());

    ????????????return long1.intValue();

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("獲取聯系人總數失敗");

    ????????}

    ????}

    ?

    ????@Override

    ????public List<Contact> queryPage2(int u_id, String key, String value,

    ????????????int startIndex, int size) {

    ????????QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    ????????String sql = "select * from contact where u_id = ?";

    ????????//在用戶登錄之后,默認查詢所有數據,keyvalue是沒有值得,sql語句需要根據keyvalue進行變化

    ????????List<Object> list = new ArrayList<Object>();

    ????????list.add(u_id);

    ????????if(key !=null && !key.equals("")){

    ????????????sql = sql + " and "+key+" like ?";

    ????????????list.add("%"+value+"%");

    ????????}

    ????????sql = sql + " limit ?,?";

    ????????list.add(startIndex);

    ????????list.add(size);

    ????????try {

    ????????????return qr.query(sql, new BeanListHandler<Contact>(Contact.class), list.toArray());

    ????????} catch (SQLException e) {

    ????????????e.printStackTrace();

    ????????????throw new RuntimeException("獲取聯系人分頁數據失敗");

    ????????}

    ????}

    ?

  • 修改登錄servlet

  • ?

    作業:參考課堂筆記完成案例功能

  • 完成添加功能(25點積分)
  • 完成查詢全部聯系人的功能(25點積分)
  • 完成修改聯系人的功能(25點積分)
  • 完成刪除聯系人的功能(25點積分)
  • 完成條件查詢聯系人的功能(25點積分)
  • 完成大結果集分頁功能(25點積分)
  • ?

    QQ:395793718

    電話:13651825024

    轉載于:https://www.cnblogs.com/beyondcj/p/6270898.html

    總結

    以上是生活随笔為你收集整理的Javaweb 第15天 web练习和分页技术的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    麻豆国产电影 | 亚洲国产成人在线 | 激情综合网天天干 | 国产原创在线 | 天堂资源在线观看视频 | 中文字幕影视 | 日日麻批40分钟视频免费观看 | 日本中文字幕网 | 香蕉97视频观看在线观看 | 国产成人一二片 | 国产精品乱码在线 | 美女免费视频观看网站 | 欧美午夜久久久 | 韩国av免费在线观看 | 亚洲激情一区二区三区 | 视频三区在线 | 免费在线国产 | 在线免费观看不卡av | 免费在线观看午夜视频 | 在线免费观看麻豆 | 久草久草久草久草 | 欧美在线一 | 婷婷中文字幕在线观看 | 亚洲狠狠干 | 天天干天天干天天干 | 一级欧美一级日韩 | 狠狠的干狠狠的操 | 欧美激情视频一区 | 婷婷五综合 | 91大神视频网站 | 欧美性脚交 | www.五月激情.com | 男女日麻批 | 国产亚洲精品成人av久久ww | 精品电影一区 | 免费看污黄网站 | 五月天六月婷婷 | 狠狠色丁香久久婷婷综合丁香 | 中文字幕一区二 | 国产成人精品av在线 | 免费日p视频 | 99精品国产兔费观看久久99 | 一区二区三区四区五区在线视频 | 久久久www免费电影网 | 久久综合色一综合色88 | 亚洲 欧美 国产 va在线影院 | 色视频网页 | 美女久久精品 | 久久国产色 | 国产美女免费看 | 久久精品亚洲一区二区三区观看模式 | 亚洲无人区小视频 | 国产精品久久久久9999吃药 | 国产成人一区二区三区电影 | 国产精品一区二区三区久久久 | 国产日韩欧美在线影视 | 91精品啪 | 免费观看性生交大片3 | 久久伊人五月天 | 亚洲国产日韩精品 | 日韩精品无码一区二区三区 | 麻豆va一区二区三区久久浪 | 97超碰中文字幕 | av中文字幕av | 久久久不卡影院 | 午夜精品一区二区三区免费视频 | 色综合久久五月天 | 精品久久久成人 | 免费毛片一区二区三区久久久 | 日产中文字幕 | 91av网站在线观看 | 亚洲另类视频在线 | 粉嫩av一区二区三区四区 | 91麻豆高清视频 | 久久狠狠干| 国产字幕av| 蜜臀久久99静品久久久久久 | 国产伦理一区二区三区 | av不卡免费在线观看 | 91久久精品日日躁夜夜躁国产 | 欧美日韩精品免费观看 | 五月天综合激情 | 国产成人精品999在线观看 | 日韩精品在线观看视频 | 亚洲国产欧美一区二区三区丁香婷 | 91秒拍国产福利一区 | 99视频在线观看视频 | 国产毛片久久 | 成人免费观看大片 | 日日夜夜精品 | 青草视频在线 | av在线a| 三级动图 | 中文字幕色在线 | 中文字幕在线观看免费观看 | 日韩精品久久中文字幕 | 97福利在线观看 | 国产在线久草 | 欧美高清视频不卡网 | 欧美性网站 | 亚洲精品影视在线观看 | 久久热首页 | 久久永久免费视频 | 日本h在线播放 | 成人亚洲免费 | 免费看一级片 | 超碰在线1| 欧美日韩国产精品一区二区 | 婷婷亚洲最大 | 久久高清精品 | 国产中文字幕大全 | 91九色视频在线 | 久久精品视频99 | 欧美日韩视频在线观看一区二区 | 一区二区久久 | 欧美性一级观看 | 国产日韩av在线 | 久久精品男人的天堂 | 久久在现视频 | 亚洲精品视频 | 国产精品成 | 国产aaa大片 | 国产中文字幕亚洲 | 欧美在线一二 | 久久久免费精品 | 国产自在线观看 | 成人在线视频你懂的 | 久草视频在线新免费 | 久久综合中文字幕 | av福利在线看 | 99精品福利视频 | 五月的婷婷| 日韩肉感妇bbwbbwbbw | 99亚洲国产精品 | 麻豆国产在线视频 | 最新中文在线视频 | 亚洲在线精品视频 | 在线观看网站你懂的 | 91精品国产九九九久久久亚洲 | 超碰人人99 | 五月婷婷激情六月 | 又黄又网站 | 免费av大全 | 九九热精品国产 | 亚洲一一在线 | 国产一区免费在线观看 | 欧美色图亚洲图片 | 久久九九免费视频 | www.天天成人国产电影 | 亚洲精品乱码久久久久久久久久 | 亚洲精品 在线视频 | 激情在线网站 | 亚洲成人在线免费 | 深夜国产福利 | 久草在线手机观看 | 视频一区二区免费 | 日韩午夜精品 | 欧美性做爰猛烈叫床潮 | 欧美日韩精品在线播放 | 成人av片免费看 | 免费黄色av. | 欧美一级电影片 | 中文字幕影片免费在线观看 | 91最新在线观看 | 欧美一区二区在线免费观看 | 欧美国产亚洲精品久久久8v | 六月久久婷婷 | 欧美国产精品久久久久久免费 | 91精品久久久久久粉嫩 | 久久久久久国产一区二区三区 | 久久亚洲精品国产亚洲老地址 | 福利av在线 | 欧美成人xxx | 国产精品扒开做爽爽的视频 | 人人看人人 | 91麻豆精品91久久久久同性 | 成人 国产 在线 | 丁香婷婷色综合亚洲电影 | 91免费的视频在线播放 | 激情综合婷婷 | 色婷婷a| 成人精品久久 | 超碰在线日韩 | 超碰夜夜 | 一级片免费观看视频 | 成人黄色视 | 国产精品毛片久久 | 国产在线观看高清视频 | 亚洲人成人99网站 | 久久国产一区二区三区 | 国产精品6999成人免费视频 | 免费视频18| 日韩精品一区二区三区外面 | 国产免费叼嘿网站免费 | 91原创在线观看 | 日韩在线视频网址 | 狠狠色噜噜狠狠狠狠2021天天 | 国产一区二区精品久久 | www.香蕉| 午夜久久| 国产xxxxx在线观看 | 亚洲在线视频播放 | 最新动作电影 | 狠狠搞,com| av超碰免费在线 | 日日夜夜免费精品视频 | 中文字幕日韩国产 | 日日摸日日添夜夜爽97 | 精品999 | 蜜桃视频精品 | 99久久精品免费视频 | av网站有哪些 | 中文字幕高清免费日韩视频在线 | 国产专区精品 | 亚洲免费不卡 | 国产 日韩 欧美 自拍 | 免费在线电影网址大全 | 久久免费视频在线观看6 | 中文字幕在线播放av | 伊人亚洲综合网 | 91精品国产乱码久久桃 | 日本公妇色中文字幕 | 亚洲综合成人专区片 | 在线成人性视频 | 亚洲国产成人精品久久 | 一区二区精品国产 | 69亚洲视频 | 91精品视频免费在线观看 | 亚洲欧美一区二区三区孕妇写真 | 久久精品免费 | av大全在线| 午夜av影院 | 久久国产a| 中文字幕在线国产精品 | 日韩中文字幕在线看 | 视频国产在线 | 国产日本亚洲 | 五月婷婷狠狠 | 精品国产美女 | 综合网婷婷 | 高清av不卡| www.天天色.com| 国产精久久久久久久 | 天天操夜夜逼 | 91超碰免费在线 | 久久久亚洲麻豆日韩精品一区三区 | 国内精品久久久久久久97牛牛 | 久久国产影视 | 久久国产精品99国产精 | 日韩欧美高清一区二区三区 | 免费看的黄色录像 | 九九综合九九综合 | 在线视频一二三 | 日韩有码在线观看视频 | 天堂中文在线播放 | 91麻豆.com| 最新中文字幕在线观看视频 | 丁香影院在线 | 亚洲最大成人网4388xx | 婷婷六月中文字幕 | 中文字幕av有码 | 中文字幕电影网 | av资源网在线播放 | 西西444www大胆高清图片 | 婷婷免费视频 | 999久久久久久 | 最近免费中文视频 | 国产99精品在线观看 | 91看片一区二区三区 | 中文字幕久久精品亚洲乱码 | 精品欧美一区二区在线观看 | 日韩精品一区二 | 91在线免费观看国产 | 国产精品成人一区二区三区 | 亚洲理论影院 | 亚洲色图27p | 成人在线你懂得 | 福利视频第一页 | 成人av免费在线观看 | 免费在线播放av电影 | 亚洲成人资源网 | 成人影视免费看 | 久久久久久国产一区二区三区 | 麻豆久久精品 | 二区三区中文字幕 | 成人精品福利 | 亚洲国产av精品毛片鲁大师 | 国产黄色电影 | 欧美性大战久久久久 | 久久成人国产精品入口 | 天天操欧美 | www.天堂av| 日韩在线欧美在线 | 国产在线v | 欧美日韩一区二区三区不卡 | 最新中文字幕在线资源 | 亚洲国产三级在线观看 | 精品人妖videos欧美人妖 | 色妞色视频一区二区三区四区 | 天天操天天干天天摸 | 成人免费观看网址 | 国产视频在线观看一区二区 | 在线观看日韩精品视频 | 狠狠操精品 | 欧美亚洲专区 | 天天综合网久久 | 国产精品成人a免费观看 | 一区二区视频在线看 | 91在线观看高清 | 在线观看成人小视频 | 久久色视频 | 色综合久久久 | 中文在线a在线 | 欧美亚洲专区 | 91九色国产在线 | 欧洲亚洲国产视频 | 99人成在线观看视频 | 超碰97免费 | 日韩国产欧美在线播放 | 91福利在线导航 | 久久精品一区二区 | 91精品视频免费 | 国产福利在线免费 | 色伊人网 | 91免费高清观看 | 在线观看免费高清视频大全追剧 | 美国av大片| 麻豆国产在线视频 | 日本视频精品 | 国产福利在线不卡 | 亚洲激情 | 91免费网站在线观看 | 二区三区在线视频 | 欧美一区二区三区在线视频观看 | 成人动态视频 | 亚洲三级在线播放 | 国产精品高潮呻吟久久久久 | 在线观看精品一区 | 精品国产大片 | 在线看毛片网站 | 精品久久久久久亚洲综合网站 | 久久国产欧美日韩精品 | 伊人狠狠色丁香婷婷综合 | 在线免费观看视频你懂的 | 337p西西人体大胆瓣开下部 | 免费看在线看www777 | 亚洲色图27p | 91视频中文字幕 | 少妇18xxxx性xxxx片 | 91成人免费在线视频 | 久久中文精品视频 | 国产女人免费看a级丨片 | www.888av | 国产精品入口麻豆www | 国产高清免费视频 | 夜夜视频 | 亚洲综合黄色 | 精品91视频 | 探花视频免费观看高清视频 | 免费日韩一区二区三区 | 天天综合网国产 | 日韩试看 | 黄网av在线| 国产一级电影在线 | 日本精品午夜 | 中文字幕一区二区三区在线观看 | 最近中文字幕免费 | 色噜噜日韩精品欧美一区二区 | 黄色大片免费网站 | 五月婷婷在线观看 | 久久久久久久久久久高潮一区二区 | 免费国产在线精品 | 亚洲激情在线视频 | 亚洲美女精品视频 | 91.精品高清在线观看 | 综合色中文| 久久久久久久久久久久久影院 | 在线看片成人 | 国产精品久久久久影视 | 日本黄区免费视频观看 | 2023国产精品自产拍在线观看 | 深夜福利视频在线观看 | 91亚洲精品在线观看 | 日本久久综合网 | 992tv在线| 精品视频123区在线观看 | 欧美日本一区 | 国产精品午夜免费福利视频 | 久久久久国产a免费观看rela | 精品v亚洲v欧美v高清v | www最近高清中文国语在线观看 | 91成人精品 | 久久伦理 | 日韩毛片一区 | 亚洲精品国偷拍自产在线观看 | 天天插狠狠干 | 伊人va| 国产精品免费一区二区三区 | 日本久久久久久久久 | 丰满少妇对白在线偷拍 | 色狠狠综合 | 国产精品尤物视频 | 黄色毛片视频免费观看中文 | 欧美一区二区日韩一区二区 | 免费男女羞羞的视频网站中文字幕 | 91av小视频| 久久综合久久综合久久综合 | 一级黄色片毛片 | 国产精品久久久久久久午夜片 | 五月开心色 | 婷婷中文在线 | 色婷婷88av视频一二三区 | 99这里只有 | 免费观看一级 | 成人影片免费 | 国产电影一区二区三区四区 | 国产日韩一区在线 | 免费看短 | 五月天中文在线 | 国产精品久久久久久爽爽爽 | 香蕉久草 | 日本三级香港三级人妇99 | 精品美女在线视频 | 91资源在线免费观看 | 波多在线视频 | 色综合久久久久综合 | 性色av免费看 | 四虎永久免费在线观看 | 国产亚洲精品久久久久久移动网络 | 亚洲人在线7777777精品 | 日本久久久久久久久久久 | 色爱区综合激月婷婷 | 黄色电影网站在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 久久国产品 | 成人av网站在线观看 | av在线播放网址 | 色婷婷久久久综合中文字幕 | 亚洲黄色网络 | 久久精品免费观看 | 国产精品成人自产拍在线观看 | 一级黄色免费网站 | 国产一区二区久久精品 | 亚洲欧美在线观看视频 | 国产精品精品久久久久久 | 新av在线| 精品在线免费观看 | 欧美网站黄色 | 婷婷六月天在线 | 日韩中文字幕在线观看 | 久久精品99国产精品酒店日本 | 久久婷婷影视 | 正在播放亚洲精品 | 日本久久久影视 | 日韩高清dvd| 不卡的一区二区三区 | 久久久久久蜜av免费网站 | 日韩视频免费在线观看 | 97av视频| 日韩欧美在线不卡 | 久久综合亚洲鲁鲁五月久久 | 成年人电影免费在线观看 | 欧美精品做受xxx性少妇 | 伊人久久国产精品 | 国产专区视频在线观看 | 中文字幕在线视频一区二区 | 欧洲激情在线 | 99久久婷婷国产 | 欧美日韩久久不卡 | 国产欧美日韩视频 | 91福利社在线观看 | 麻豆国产精品永久免费视频 | 久草在线免费看视频 | 99免费在线播放99久久免费 | 久久久久国产一区二区三区 | 人人爽人人澡 | 国产精品99久久久精品免费观看 | 国产在线观看av | 在线免费看片 | 亚洲专区在线播放 | 欧美日韩激情网 | 最新av在线播放 | 国产精品6 | 国产黄色特级片 | 中日韩三级视频 | 天天综合在线观看 | 久久影院中文字幕 | 激情综合网五月婷婷 | 最新日本中文字幕 | 久久久久久在线观看 | 99久久www | 久久你懂得 | 免费三级网 | 性色av免费观看 | 日本在线观看一区二区三区 | 欧洲精品视频一区 | 最新av网站在线观看 | 亚洲精品久久久久久中文传媒 | 亚洲精品视频一二三 | 亚洲综合色婷婷 | 久久久久综合精品福利啪啪 | 99久久精品久久久久久动态片 | 亚洲欧洲久久久 | 香蕉视频在线免费看 | 国产一区二区三区四区大秀 | 91看国产 | 日本午夜在线观看 | 久久视频 | 日本护士三级少妇三级999 | 成人av动漫在线 | 91麻豆精品国产91久久久久久 | 日韩精品中文字幕在线不卡尤物 | 91在线看黄| 欧美日韩性视频 | 91在线色 | 五月婷婷六月丁香激情 | 中文资源在线官网 | 91久久精品日日躁夜夜躁国产 | 国产一区二区三区在线 | 亚洲资源一区 | 日本韩国精品一区二区在线观看 | 黄色av网站在线观看免费 | 麻豆精品传媒视频 | 黄色三级在线 | 国产色拍 | 成年人黄色免费网站 | 四虎国产| 久久久久久久久久久久久久av | 亚洲国产精品视频在线观看 | 黄色软件大全网站 | 国产黄色a| 日韩一区在线播放 | 一区二区免费不卡在线 | 五月丁婷婷 | 欧美国产日韩一区二区三区 | 96精品视频 | 亚洲一区二区观看 | 国产精品99免费看 | 最新国产精品久久精品 | 久久久久久久久久久久久久电影 | 国产毛片久久 | 91精品国产自产老师啪 | 久草在线免费看视频 | 91成人精品国产刺激国语对白 | 西西人体4444www高清视频 | 亚洲欧洲精品久久 | 国产亚洲精品女人久久久久久 | 一区二区三区在线视频观看58 | 9999在线视频| 在线观看黄网站 | 在线观看免费高清视频大全追剧 | 久久久久久久久久久综合 | 美国三级黄色大片 | 91网免费观看 | 9草在线 | av网站免费在线 | 91精品久久久久久 | 国产中文字幕av | 成人资源在线 | 激情综合五月婷婷 | 国产一区二区三区四区大秀 | 激情五月看片 | 99re久久资源最新地址 | 性色av香蕉一区二区 | 国产91精品在线观看 | 久久五月婷婷丁香社区 | 欧美一级日韩免费不卡 | 亚州精品视频 | 天天操天天爱天天干 | 国产在线精品观看 | 日韩午夜在线播放 | 久久1区| 欧美午夜精品久久久久久浪潮 | 就色干综合 | 中中文字幕av | 日本99热 | 久久99久 | 午夜少妇一区二区三区 | 黄污网| 91在线观 | 麻豆国产网站 | 国产五月婷婷 | 成 人 免费 黄 色 视频 | 国内精品视频在线播放 | 丁香视频全集免费观看 | 欧美另类重口 | 9久久精品 | 蜜臀久久99精品久久久无需会员 | 欧美另类xxxxx | 一区二区三区免费在线观看视频 | 国产特黄色片 | 久 久久影院 | av 在线观看 | 成人91av| 在线观看香蕉视频 | 国产精品一区二区久久 | 亚洲第一伊人 | 日韩高清免费观看 | 99超碰在线播放 | 久草观看 | 国产免费视频一区二区裸体 | 狠狠88综合久久久久综合网 | 国产精品黄网站在线观看 | 久久成人麻豆午夜电影 | 菠萝菠萝蜜在线播放 | 99精品毛片 | 久久国产精品99久久久久 | 成人av中文字幕在线观看 | 成人久久久精品国产乱码一区二区 | 7777精品伊人久久久大香线蕉 | 日日操夜 | 免费看黄在线看 | 在线免费观看视频 | 中文字幕在线观看免费高清电影 | 免费一级片观看 | 一区 二区电影免费在线观看 | 成人h在线播放 | 伊人午夜视频 | 九九热免费精品视频 | 99精品在线观看视频 | 亚洲 在线 | 粉嫩av一区二区三区四区 | 免费看av片网站 | www.com在线观看 | 在线免费黄色av | 麻豆国产精品永久免费视频 | 国产黄色片免费观看 | 九色视频网 | 日韩专区视频 | 婷婷5月激情5月 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 97国产大学生情侣酒店的特点 | 欧美贵妇性狂欢 | 91成人区 | 一级黄色片在线观看 | 亚洲最大成人网4388xx | 久久热亚洲 | av成人动漫在线观看 | 亚洲精品久久久蜜桃 | 日日干视频 | 色五月成人 | www天天干| 国产精品一区免费观看 | 一区二区三区电影在线播 | 成人一区二区三区中文字幕 | 免费在线色视频 | 一色av| 天天干天天摸 | 国产精品久久二区 | 国产原创中文在线 | 日韩激情第一页 | 久久精品91久久久久久再现 | 亚洲精品啊啊啊 | 国产偷国产偷亚洲清高 | 国产黄色一级片在线 | 日韩免费av在线 | 成人在线免费小视频 | 日韩中文字幕视频在线 | 国产精品99视频 | 日韩大片在线免费观看 | 免费av的网站 | 成人黄色在线看 | 91精品一区国产高清在线gif | 国产成人久久精品77777 | 日韩黄色大片在线观看 | 久久久综合精品 | 成人av电影免费观看 | 国产精品区一区 | 91久久国产综合精品女同国语 | 日本中文在线 | 亚洲乱码久久 | 成年人国产视频 | 日韩影视精品 | 一区二区三区四区五区在线 | 伊人影院av | 一级黄色片在线播放 | 免费看三级网站 | 日韩色在线观看 | 69欧美视频 | 国产精品久久久久久模特 | 久久天天躁夜夜躁狠狠躁2022 | 在线观看日韩国产 | 午夜久久久久久久久久久 | 天天操夜夜操天天射 | 国产不卡精品视频 | 天天弄天天干 | 国产成人精品久久 | 视频一区久久 | 欧美精品免费在线观看 | 欧美国产精品久久久久久免费 | 国产精品国产三级国产aⅴ入口 | 亚洲欧美国产精品va在线观看 | 99精品视频在线观看播放 | 在线视频电影 | 国产日韩中文字幕 | 免费国产在线精品 | 久久激情综合网 | 在线精品在线 | 波多野结衣久久资源 | 亚洲国产手机在线 | 夜夜爽天天爽 | 国内精品久久久久久久影视简单 | 狠狠狠狠狠狠干 | 天天射天天拍 | 日本黄色免费大片 | 天天摸天天舔天天操 | 99精品视频在线播放免费 | av官网| 亚洲国产精品久久久久婷婷884 | 超碰在线官网 | 欧美日韩91 | 久久免费99 | 国产999精品久久久久久绿帽 | 久久综合婷婷综合 | 成人a级黄色片 | 久久久久久久久久电影 | 人人插人人爱 | 99久久久国产精品免费99 | 免费日韩视 | 免费成人av在线 | 久久成人综合视频 | 成人在线小视频 | 欧美日韩不卡一区 | 日韩在线大片 | 欧美极品少妇xxxx | 少妇性xxx| 亚洲一区视频在线播放 | 国产成人精品一区一区一区 | 国产一区二区三区四区大秀 | av网站在线观看播放 | 六月色| 国产精品理论片在线播放 | 久久精品99北条麻妃 | 国产亚洲永久域名 | 99热国产在线中文 | 中文字幕丝袜一区二区 | 激情综合五月天 | 日韩在线国产精品 | 婷婷成人综合 | 久久国产高清 | 综合亚洲视频 | 国产69精品久久久久久 | 国产一区二区视频在线播放 | 中文字幕免费高清av | 成人午夜网址 | 91精品久久久久久综合乱菊 | www.狠狠操.com| 亚洲色影爱久久精品 | 国产在线成人 | 久久久久久精 | 四虎国产永久在线精品 | 欧美色图狠狠干 | 天天综合狠狠精品 | 日日夜夜中文字幕 | 精品国产乱码久久久久 | 欧美日韩精品在线一区二区 | 国产九色91 | 一本一道久久a久久精品 | 国产成人精品一二三区 | 毛片.com| 2019精品手机国产品在线 | 国产在线自 | 久久综合久久八八 | 国产福利一区二区在线 | 国产成人福利在线观看 | 天天摸天天舔天天操 | 91成人看片 | 在线国产一区二区 | 麻豆视传媒官网免费观看 | 一区二区三区免费网站 | 中文字幕免费在线 | 国产在线黄 | 精品久久国产精品 | 国产精品第一页在线 | 日韩在线视频看看 | 色黄久久久久久 | 玖玖999 | 黄色av网站在线观看免费 | 天天爱天天射 | 在线视频 精品 | 9在线观看免费高清完整版在线观看明 | 天天做天天爱天天综合网 | 欧美人体xx | 1区2区3区在线观看 三级动图 | 日日精品 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久草视频在线资源站 | 国内精品视频在线 | av黄色免费在线观看 | 欧美男女爱爱视频 | 免费在线观看av网站 | 亚洲每日更新 | 欧美亚洲免费在线一区 | 少妇18xxxx性xxxx片 | 国产精品视频免费 | 激情欧美丁香 | 综合色婷婷 | 91免费观看视频在线 | 国产二区av| 欧美动漫一区二区三区 | 久久精品国产一区二区 | 三级免费黄色 | 天天草天天干 | 日日操夜 | www免费网站在线观看 | 视频二区在线视频 | 亚洲va天堂va欧美ⅴa在线 | 天天干天天干天天射 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产成人综合精品 | 国产精品精品久久久久久 | 欧美性视频网站 | 久久国产成人午夜av影院宅 | 天天爽天天射 | 日日干干 | 中文字幕观看在线 | 亚洲一区二区天堂 | 一区二区 久久 | 国产精品毛片久久久 | 四虎影视精品永久在线观看 | 一区二区三区高清不卡 | 国产成人一区二区三区影院在线 | 毛片随便看 | 午夜精品电影 | 视频一区亚洲 | 在线色吧 | 久久久久久久久久久久电影 | 日本性xxxxx 亚洲精品午夜久久久 | 99精品免费视频 | 香蕉视频在线观看免费 | 国产精品久久久久久久久久ktv | 国产精品美 | 免费日韩一区二区三区 | 欧美午夜a | 一级理论片在线观看 | 天天色天天干天天色 | 韩国精品一区二区三区六区色诱 | 免费观看午夜视频 | 国产精品一区免费看8c0m | 99视频+国产日韩欧美 | 丁香五香天综合情 | 91九色丨porny丨丰满6 | 久久9999久久免费精品国产 | 免费网站看v片在线a | 免费在线观看av网址 | 久久国产一区二区三区 | 中文字幕视频网站 | 8x成人在线 | 亚洲无吗视频在线 | 国产精品手机看片 | 在线成人看片 | 亚洲va综合va国产va中文 | 91亚色免费视频 | 日本夜夜草视频网站 | 免费日韩一区二区三区 | 国产亚洲综合性久久久影院 | 国产一级二级三级在线观看 | 天天躁日日躁狠狠躁av麻豆 | av在线免费观看网站 | 在线精品国产 | 欧美精品在线一区二区 | 成人网看片 | 69av国产 | 久久在线免费 | 精品在线99| 精品久久久久久久久久岛国gif | 天天色天天射天天干 | 最新精品视频在线 | 丁香婷婷久久久综合精品国产 | 日韩99热 | 成年人视频在线免费观看 | 中文字幕视频一区二区 | 午夜久久久久久久 | 91精选在线观看 | 亚洲伊人网在线观看 | 午夜av免费在线观看 | 91视频免费视频 | 九九免费在线观看视频 | 久久色在线观看 | 日韩中文字幕免费视频 | 日本精品一区二区 | 久久久久久久久久久久99 | 日韩在线观看你懂的 | 国产成人精品av久久 | 国产剧情一区二区 | 国产精品久久久久av免费 | 国产中出在线观看 | 久久高清精品 | 亚洲春色奇米影视 | 久久天堂亚洲 | 久久久高清视频 | 国产精品永久免费在线 | 久久夜色精品国产欧美乱极品 | 在线视频 影院 | 亚洲国产欧美在线人成大黄瓜 | 免费视频a| 在线观看 国产 | 欧美片网站yy | 人人爱人人舔 | 96国产在线| 久久久久久久久久久久影院 | 久久婷婷一区 | 国产精品一区二区美女视频免费看 | 国产精品videoxxxx | 日韩欧美xxxx | 亚洲成a人片综合在线 | 在线91精品| 最新久久久 | 亚洲精品视频在线播放 | 欧美成人播放 | 免费在线看成人av | 欧洲精品亚洲精品 | 久久视了 | 国产视频午夜 | 天天艹日日干 | 夜添久久精品亚洲国产精品 | 久久理论视频 | 97视频一区 | 精品一区二区免费 | 久久免费视频网站 | 曰本免费av | av电影免费看 | 中文在线www| 综合网五月天 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线观看日本高清mv视频 | 福利一区二区三区四区 | 四虎视频 | 日韩精品在线一区 | wwwwww国产 | 婷婷丁香七月 | 黄色亚洲免费 | 欧美日韩综合在线观看 | 91在线看片| 久久精品第一页 | 麻豆一区二区三区视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 日韩一级电影网站 | 日韩av免费在线电影 | 免费看麻豆 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 色成人亚洲| av网址最新 | 激情五月婷婷网 | 尤物97国产精品久久精品国产 | 婷婷综合电影 | 99免费看片 | 99视频在线精品免费观看2 | 欧美片网站yy | 亚洲h色精品 | 免费a v视频 | 亚洲精品人人 | 中文字幕在线一区二区三区 | 在线观看日韩国产 | av日韩在线网站 | 91久久久国产精品 | 久久黄色网页 | 国产精品video爽爽爽爽 | 青青河边草免费观看 | 中文国产在线观看 | 亚洲综合少妇 | 久久综合狠狠综合久久综合88 | 99这里只有久久精品视频 | 免费看十八岁美女 | 4438全国亚洲精品在线观看视频 | 高清av影院| 九九热久久久 | 日韩视频免费观看高清完整版在线 | 人人澡视频| 国产精品区二区三区日本 | 一本—道久久a久久精品蜜桃 | 国产一区二区在线播放视频 | 在线看片日韩 | 亚洲 av网站| 日本九九视频 | 日韩精品视频免费看 | 亚洲欧美综合精品久久成人 | 夜夜夜夜爽 | 懂色av一区二区在线播放 | 不卡的av电影 | 国产精品女教师 | 91精品视频在线免费观看 | 成人手机在线视频 | 国产精品淫 | 国产人成一区二区三区影院 | av片中文字幕 | 韩国av在线| 一级黄色片在线观看 | 天天综合网久久 | 一区二区三区在线电影 | 一区二区三区电影大全 | 六月婷婷网 | 伊人影院在线观看 | 蜜臀av网址 | 色天天综合网 | 狠狠操狠狠干天天操 | 国产精品手机视频 | 日日夜夜天天综合 |