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條。
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"; } }
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(); } }
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)); } }