JavaWeb項目--網上商城 (6-2)

 day 2 java

 1.模塊詳解mysql

 案例1-前臺分類信息展現
                    需求: 訪問任意頁面的時候,都須要將分類的信息展現出來
                    技術分析:包含(靜態包含和動態包含)  靜態包含後臺只生成一個class文件,而動態包含生成多個class文件jquery

                           AJAX步驟分析:
                                   1.建立分類表category表    `cid` 類別id    `cname`類別名字web

                                   2.抽取全部頁面上 logo 和 菜單部分(head.jsp) 頁面加載的時候 編寫函數  @include file="/jsp/head.jsp" %>     $(function(){}  jquery加載事件   發送ajax請求 $.post(url,params,fn,type);
                                       url:/store/category          params: method=findAll      fn:將返回值遍歷,每個分類封裝成li標籤,插入到ul標籤內部      type:json
                                   三、編寫categoryservlet,繼承baseservlet,編寫findAll方法ajax

                                   四、調用service,查詢全部的分類, categoryservice中的操做   調用dao,獲取全部的分類   將list轉成json返回
                                   五、在全部的頁面裏將 head.jsp 包含進去  獲取返回值   遍歷返回值  redis

                                   六、 每個分類封裝成li標籤,插入到ul標籤內部   
                                   七、修改service層的代碼  獲取的時候,去redis中獲取,   若獲取到了返回   若沒有獲取到,先去mysql數據庫中查詢出來,將list轉成json放入redis中便可

sql

   案例2   最新商品和熱門商品展現
                        需求:  訪問首頁的時候,須要將最新商品和熱門商品展現出來.
                        技術:  方式1:ajax異步  方式2:同步    使用同步步驟分析(請求轉發)
                                      1 .建立商品表product :    pid商品id      pname   商品名  market_price 市場價格   shop_price商場價格  pimage圖片路徑   pdate上架時間    數據庫

                                                                               is_hot是否熱門   pdesc商品明細信息     pflag 物理刪除狀態  0未下架 1下架     cid  分類的id 外鍵apache

                                      2. 訪問項目首頁,請求轉發indexservlet      indexservlet中使用默認index處理               json

                                          調用productservice查詢熱門商品和最新商品, 每個都返回一個list   將兩個list放入request域中,請求轉發到 /jsp/index.jsp

                                     3..在頁面上將數據遍歷出來

    案例3-單個商品詳情
                        需求:     在首頁上點擊每一個商品,將這個商品的詳細信息展現在頁面上(product_info.jsp)
                        步驟分析:  

                                   1.給每一個商品添加超連接  <a href="/store/product?method=getById&pid=xxx">yy</a>
                                   2.編寫productservlet,繼承baseservlet,編寫getById  獲取商品的pid  調用service獲取一個商品 返回值:product   請求轉發到product_info.jsp
                                   3.service ,dao
                                  4.在product_info.jsp將商品展現
案例4-分類商品的分頁展現
                        需求:  點擊菜單欄上某一個分類的時候,將該分類下的商品,分頁展現出來(默認第一頁)
                  技術分析:
                                   分頁   頁面上須要的數據    當前頁數據   當前頁   總頁數  總記錄數  每頁顯示的條數   limit m,n   limit (當前頁-1)*每頁顯示的條數,每頁顯示的條數  

                    limit m,n    語法  /*當沒有指定位置偏移量時,只取4條時,能夠這樣寫*/  SELECT FROM YourTableName LIMIT 4;

                                                 其中m是指記錄開始的index,從0開始,表示第一條記錄,n是指從第m+1條開始,取n條。

                  步驟分析:      1.  修改head.jsp上的每一個分類的超連接  <a href="/store/product?method=findByPage&pageNumber=1&cid=xxx">

                                       2.在cateservlet中編寫findByPage方法  獲取pagenumber  獲取cid  設置pageSize  調用service獲取分頁的數據 返回值:PageBean
                                       將pagebean放入request域中,請求轉發 /jsp/product_list.jsp
                                       3.編寫service:   返回值:pagebean  建立一個pagebean  設置當前頁須要的數據  調用dao  設置總記錄數  調用dao
                                       4.dao
                                       5.在jsp/product_list.jsp上展現商品

2.代碼區
   

package com.itheima.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itheima.domain.PageBean;
import com.itheima.domain.Product;
import com.itheima.service.ProductService;
import com.itheima.service.impl.ProductServiceImpl;
import com.itheima.web.servlet.base.BaseServlet;

/**
 * 前臺商品模塊
 */
public class ProductServlet extends BaseServlet {
    private static final long serialVersionUID = 1L;

    /**
     * 分類商品分頁展現
     */
    public String findByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1.獲取pagenumber cid  設置pagesize
            /*String parameter = request.getParameter("pageNumber");*/
            int pageNumber = 1;
            
            try { 
                pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
            } catch (NumberFormatException e) {
            }
            
            int pageSize = 12;
            String cid = request.getParameter("cid");
            
            //2.調用service 分頁查詢商品 參數:3個, 返回值:pagebean
            ProductService ps = new ProductServiceImpl();
            PageBean<Product> bean=ps.findByPage(pageNumber,pageSize,cid);
            //3.將pagebean放入request中,請求轉發 product_list.jsp
            request.setAttribute("pb", bean);
        } catch (Exception e) {
            request.setAttribute("msg", "分頁查詢失敗");
            return "/jsp/msg.jsp";
        }
        return "/jsp/product_list.jsp";
    }
    
    /**
     * 商品詳情
     * @param request
     * @param response
     * @return
     * @throws ServletException
     * @throws IOException
     */
    public String getById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1.獲取pid
            String pid = request.getParameter("pid");
            
            //2.調用service獲取單個商品 參數:pid 返回值:product
            ProductService ps =new ProductServiceImpl();
            Product pro=ps.getById(pid);
            
            //3.將product放入request域中,請求轉發 /jsp/product_info.jsp
            request.setAttribute("bean", pro);
        } catch (Exception e) {
            request.setAttribute("msg", "查詢單個商品失敗");
            return "/jsp/msg.jsp";
        }
        
        return "/jsp/product_info.jsp";
    }
}
ProductServlet
package com.itheima.dao.impl;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.itheima.constant.Constant;
import com.itheima.dao.ProductDao;
import com.itheima.domain.PageBean;
import com.itheima.domain.Product;
import com.itheima.utils.DataSourceUtils;

public class ProductDaoImpl implements ProductDao {

    @Override
    /**
     * 查詢熱門
     */
    public List<Product> findHot() throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product where is_hot = ? and pflag = ? order by pdate desc limit 9";
        return qr.query(sql, new BeanListHandler<>(Product.class), Constant.PRODUCT_IS_HOT,Constant.PRODUCT_IS_UP);
    }

    @Override
    /**
     * 查詢最新
     */
    public List<Product> findNew() throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product where pflag = ? order by pdate desc limit 9";
        return qr.query(sql, new BeanListHandler<>(Product.class),Constant.PRODUCT_IS_UP);
    }

    @Override
    /**
     * 查詢單個商品
     */
    public Product getById(String pid) throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product where pid = ? limit 1";
        return qr.query(sql, new BeanHandler<>(Product.class), pid);
        
    }

    @Override
    /**
     * 查詢當前頁數據
     */
    public List<Product> findByPage(PageBean<Product> pb, String cid) throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product where cid = ? and pflag = ? order by pdate desc limit ?,?";
        return qr.query(sql, new BeanListHandler<>(Product.class), cid,Constant.PRODUCT_IS_UP,pb.getStartIndex(),pb.getPageSize());
    }

    @Override
    /**
     * 獲取總記錄數
     */
    public int getTotalRecord(String cid) throws Exception {
        return ((Long)new QueryRunner(DataSourceUtils.getDataSource()).query("select count(*) from product where cid = ? and pflag = ?", new ScalarHandler(), cid,Constant.PRODUCT_IS_UP)).intValue();
    }

}
ProductDaoImpl
package com.itheima.dao.impl;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.itheima.dao.CategoryDao;
import com.itheima.domain.Category;
import com.itheima.utils.DataSourceUtils;

public class CategoryDaoImpl implements CategoryDao {

    @Override
    /**
     * 查詢全部分類
     */
    public List<Category> findAll() throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from category";
        return qr.query(sql, new BeanListHandler<>(Category.class));
    }

}
CategoryDaoImpl 查詢全部分類
相關文章
相關標籤/搜索