day 2
1.模块详解
案例1-前台分类信息展示
需求: 访问任意页面的时候,都需要将分类的信息展示出来
技术分析:包含(静态包含和动态包含) 静态包含后台只生成一个class文件,而动态包含生成多个class文件
AJAX步骤分析:
1.创建分类表category表 `cid` 类别id `cname`类别名字
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
3、编写categoryservlet,继承baseservlet,编写findAll方法
4、调用service,查询所有的分类, categoryservice中的操作 调用dao,获取所有的分类 将list转成json返回
5、在所有的页面里将 head.jsp 包含进去 获取返回值 遍历返回值
6、 每一个分类封装成li标签,插入到ul标签内部
7、修改service层的代码 获取的时候,去redis中获取, 若获取到了返回 若没有获取到,先去mysql数据库中查询出来,将list转成json放入redis中即可
案例2 最新商品和热门商品展示
需求: 访问首页的时候,需要将最新商品和热门商品展示出来.
技术: 方式1:ajax异步 方式2:同步 使用同步步骤分析(请求转发)
1 .创建商品表product : pid商品id pname 商品名 market_price 市场价格 shop_price商场价格 pimage图片路径 pdate上架时间
is_hot是否热门 pdesc商品明细信息 pflag 物理删除状态 0未下架 1下架 cid 分类的id 外键
2. 访问项目首页,请求转发indexservlet indexservlet中使用默认index处理
调用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)); } }