请求响应的业务逻辑(商城二)

二、查看商品详情
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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值