javaweb商城之后端(无框架)(二)界面,商品显示功能

1.界面显示,获取商品分类类别(后端)

数据库表category

访问主页,得到分类,

访问一个servlet,执行相应操作,发送数据到主页显示,

可以直接数据库访问,得到category库得到表内容,封装category类对象,setAttribute,接着foreach+${category.cname }

也可以ajax,

ajax

<script type="text/javascript">
			//index.jsp加载完毕后 去服务器端获得所有的category数据
			$(function(){
				var content = "";
				$.post(
					"${pageContext.request.contextPath}/categoryList",//发送至servlet
					function(data){
						//[{"cid":"xxx","cname":"xxxx"},{},{}],从servlet得到的data
						//动态创建<li><a href="#">${category.cname }</a></li>
						for(var i=0;i<data.length;i++){
							content+="<li>"+data[i].cname+</li>";
						}
						
						//将拼接好的li放置到ul中
						$("#categoryUl").html(content);
					},
					"json"
				);
			});
		</script>

servlet

public class CategoryListServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		ProductService service = new ProductService();
		List<Category> categoryList = service.findAllCategory();
			Gson gson = new Gson();
			categoryListJson = gson.toJson(categoryList);
			jedis.set("categoryListJson", categoryListJson);
		
		
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().write(categoryListJson);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

Category


public class Category {

	private String cid;
	private String cname;
	public String getCid() {
		return cid;
	}
	public void setCid(String cid) {
		this.cid = cid;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}

}

service

public class ProductService {

public List<Category> findAllCategory() {
		ProductDao dao = new ProductDao();
		List<Category> categoryList = null;
		try {
			categoryList = dao.findAllCategory();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return categoryList;
	}

}

dao

public class ProductDao {

public List<Category> findAllCategory() throws SQLException {
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from category";
		return runner.query(sql, new BeanListHandler<Category>(Category.class));
	}
}

大致这样,就能得到分类,然后点击分类,显示相应的商品,

2.显示某类型商品列表

通过分类的cid(product表product类一样有的)查找product

所以需要在ajax得到分类时在分类超链接处顺便发送cid至查找产品servlet

/productListByCid?cid="+data[i].cid+"

select *显示产品按cid分类,

还有上一页下一页,domain包除了建Product类之外还需要建个页面类PageBean类

Product类对应数据库表,

PageBean类

        private int currentPage;//当前页数

private int currentCount;//单页面个数,
        private int totalCount;//该类型产品总个数
        private int totalPage;//总页数,不同产品不同页数

        private List<T> list;//产品信息List表示,T-Product

 

Servlet


public class ProductListByCidServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//获得cid
		String cid = request.getParameter("cid");
		
		String currentPageStr = request.getParameter("currentPage");
		if(currentPageStr==null) currentPageStr="1";//刚点类别自动跳第一页
		int currentPage = Integer.parseInt(currentPageStr);//转类型
		int currentCount = 8;//每页8个商品
		
		ProductService service = new ProductService();
		PageBean pageBean = service.findProductListByCid(cid,currentPage,currentCount);//进行业务处理,发送cid,当前页数,页面个数
		
		request.setAttribute("pageBean", pageBean);
		request.setAttribute("cid", cid);
		
		//定义一个记录历史商品信息的集合
		List<Product> historyProductList = new ArrayList<Product>();
		
		//获得客户端携带名字叫pids的cookie
		Cookie[] cookies = request.getCookies();
		if(cookies!=null){
			for(Cookie cookie:cookies){
				if("pids".equals(cookie.getName())){
					String pids = cookie.getValue();//3-2-1
					String[] split = pids.split("-");
					for(String pid : split){
						Product pro = service.findProductByPid(pid);
						historyProductList.add(pro);
					}
				}
			}
		}
		
		//将历史记录的集合放到域中
		request.setAttribute("historyProductList", historyProductList);
		
		
		request.getRequestDispatcher("/product_list.jsp").forward(request, response);
		
	}

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

 

service

 


public class ProductService {
    public PageBean findProductListByCid(String cid,int currentPage,int currentCount) {
        ProductDao dao = new ProductDao();
        //封装一个PageBean 返回web-servlet层
        PageBean<Product> pageBean = new PageBean<Product>();
        //1、封装当前页pageBean.setCurrentPage(currentPage);
        //2、封装每页显示的个数pageBean.setCurrentCount(currentCount);
        //3、封装总条数,数据库查int totalCount = 0;
        try {
            totalCount = dao.getCount(cid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        pageBean.setTotalCount(totalCount);
        //4、封装总页数math.ceil-大于当前数的整数
        int totalPage = (int) Math.ceil(1.0*totalCount/currentCount);
        pageBean.setTotalPage(totalPage);
        //5、当前页显示的数据-最重要的,显示的
        // select * from product where cid=? limit ?,?
        // 当前页与起始索引index的关系
        int index = (currentPage-1)*currentCount;
        List<Product> list = null;
        try {
            list = dao.findProductByPage(cid,index,currentCount);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        pageBean.setList(list);
        return pageBean;
        }
}

 

dao

public int getCount(String cid) throws SQLException {
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select count(*) from product where cid=?";
		Long query = (Long) runner.query(sql, new ScalarHandler(),cid);
		return query.intValue();
	}//根据cid查询该类型产品数量

	public List<Product> findProductByPage(String cid, int index, int currentCount) throws SQLException {
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from product where cid=? limit ?,?";
		List<Product> list = runner.query(sql, new BeanListHandler<Product>(Product.class), cid,index,currentCount);
		return list;
	}//根据cid,当前页的起始索引,每页个数查显示页显示的内容

 

view-jsp

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:forEach items="${pageBean.list }" var="pro">
		
			<div >
					<img src="${pageContext.request.contextPath }/${pro.pimage}" >
				</a>
				<p>
					${pro.pname }</a>
				</p>
				<p>
					<font>商城价:¥${pro.shop_price }</font>
				</p>
			</div>
		</c:forEach>
              <!-- 上一页 -->
			<c:if test="${pageBean.currentPage==1 }">
				<li class="disabled">
					<a href="javascript:void(0);">
						<span aria-hidden="true">«</span>
					</a>
				</li>
			</c:if>
			<c:if test="${pageBean.currentPage!=1 }">
				<li>
					<a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${pageBean.currentPage-1 }" >
						<span>«</span>
					</a>
				</li>
			</c:if>

                 <!-- 显示每一页 -->
			<c:forEach begin="1" end="${pageBean.totalPage }" var="page">
				<!-- 判断是否是当前页,是的话不能点击 -->
				<c:if test="${page==pageBean.currentPage }">
					<li class="active"><a href="javascript:void(0);">${page }</a></li>
				</c:if>
				<c:if test="${page!=pageBean.currentPage }">
					<li><a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${page }">${page }</a></li>
				</c:if>
			</c:forEach>
			<!-- 下一页 -->
			<c:if test="${pageBean.currentPage==pageBean.totalPage }">
				<li class="disabled">
					<a href="javascript:void(0);" aria-label="Next"> 
						<span aria-hidden="true">»</span>
					</a>
				</li>
			</c:if>
			<c:if test="${pageBean.currentPage!=pageBean.totalPage }">
				<li>
					<a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${pageBean.currentPage+1 }" > 
						<span>»</span>
					</a>
				</li>
			</c:if>

3.点击商品显示商品详情

点击查看商品,查看PageBean类list-Product类对象

<a href="${pageContext.request.contextPath }/productInfo?pid=${pro.pid}}

servlet

//获得要查询的商品的pid
		String pid = request.getParameter("pid");
		
		ProductService service = new ProductService();
		Product product = service.findProductByPid(pid);
		
		request.setAttribute("product", product);


               

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

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

service

public Product findProductByPid(String pid) {
		ProductDao dao = new ProductDao();
		Product product = null;
		try {
			product = dao.findProductByPid(pid);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return product;
	}

dao

public Product findProductByPid(String pid) throws SQLException {
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from product where pid=?";
		return runner.query(sql, new BeanHandler<Product>(Product.class), pid);
	}

view-jsp

${product.pname}

${product.。。。}

填充即可

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值