二、查看商品详情
A、点击图片使用a标签发送请求
B、传参 商品的pid
C、发送到servlet
D、请求转发
E、到product.jsp
查询的数据没有,则提示用户暂无该商品
请求发送到servlet
@WebServlet("/product")
public class ProductServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求数据
String pid = req.getParameter("pid");
/**
* 调用dao查询商品信息
* */
ProductDAOImpl productDAO = new ProductDAOImpl();
Map<String, Object> product = productDAO.getProduct(Integer.parseInt(pid));
/**
* 共享请求数据
* */
req.setAttribute("product",product);
/**
* 请求转发到product.jsp
* */
req.getRequestDispatcher("/views/product.jsp").forward(req,resp);
}
}
调用dao
接口
```java
public interface IproductDAO {
/**
* 查询所有商品展示到首页
* */
List<Map<String,Object>> listProducts();
/**
* 查询单个商品的详细信息
* */
Map<String,Object> getProduct(int pid);
}
实现类
/**
* 查询商品详情 存储到map
* */
public Map<String, Object> getProduct(int pid) {
String sql="select * from product where pid=?";
List<Map<String, Object>> product = DBUtil.executequery(sql, pid);
if(product.size()>0){
return product.get(0);
}
return null;
}
请求转发到product.jsp
通过地址栏改变商品pid,如果过没有该pid的商品,也会出现该页面,没有商品图片、接个信息,因此在jsp中也对pid判断,如果存在该pid则执行jsp代码,如果没有,则执行c:when里面的代码。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"+"views/";
%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML >
<html>
<head>
<base href="<%=basePath%>">
<meta charset="UTF-8">
<title>商品详情</title>
<link rel="stylesheet" type="text/css" href="css/product.css"/>
<script type="text/javascript" src="js/product.js">
</script>
</head>
<body>
<!-- 头部导航 -->
<jsp:include page="/views/header.jsp"></jsp:include>
相当于if(){}else if(){}
<c:choose>
<c:when test="${empty product}">
<h1>对不起 暂无该商品</h1>
</c:when>
<c:otherwise>
<div class="wrap">
<img src="${product.pimage}" />
<div class="description">
<form action="" method="post">
<h2>${product.pname}</h2>
<div class="old_price">
原价:
<span>
¥${product.marketPrice}
</span>
</div>
<div class="price">
折扣价:
<span>
¥${product.shopPrice}
</span>
</div>
<div>
尺码:均码
</div>
<div class="count">
数量:
<span class="s">-</span>
<input type="text" value="1" name="num" class="num" />
<span class="s">+</span>
</div>
<div>
<input type="submit" value="加入购物车" class="goods_cart" />
</div>
<div>
<input type="submit" value="立即购买" class="buy"/>
</div>
</form>
</div>
</div>
</c:otherwise>
</c:choose>
</body>
</html>