JavaWeb17.JSTL的应用

回顾:JavaWeb16.域对象&EL表达式&JSTL标签

目录

index.jsp  商城主页

doIndex.jsp  商城数据刷新页

分页功能在页面上的体现

doIndex.jsp  上的取到分页的总页数

GoodsBizImpl.java  业务逻辑层实现类代码补充

IGoodsBiz.java  业务逻辑层接口代码补充


当一个jsp页面有java代码,还有html标签时,不便于后期的维护,所以需要分离java和html,分离就需要使用到JSTL标签

index.jsp  商城主页

 
<%--引入jar包后再引入标签库:tag标签,lib库,导入一个标签库 prefix是标签库的名字--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
  <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
  <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
  <style>
    td:nth-child(3)::before{
      content: "$";
    }
  </style>
</head>
<body>
	<c:if test="${ user==null }">
		<c:redirect url="login.jsp"/>
	</c:if>
	<c:if test="${ goods==null }">
		<!-- 重定向 -->
		<c:redirect url="doIndex.jsp"/>
	</c:if>
<div class="jumbotron">
  <div class="container">
    <h1>欢迎光临喜洋洋SuperMarket</h1>
    <!-- 拿到用户的登录数据,转成user类型才能拿到user实体类中的属性 -->
    <p>尊贵的${user.account}</p>
    <a href="car.jsp">购物车🛒</a>
    <br>
    <a href="doExit.jsp">退了</a>
  </div>
</div>
<div class="container">
  <table class="table">
    <tr>
      <th>商品序号</th>
      <th>商品名称</th>
      <th>商品单价</th>
      <th>商品描述</th>
      <th>操作</th>
    </tr>   
    <c:forEach items="${goods }" var="g">
    <tr>
      <td>${g.id }</td>
      <td>${g.name }</td>
      <td>${g.price }</td>
      <td>${g.info}</td>
      <td>
        <div class="btn-group btn-group-xs">
          <a href="doAddCar.jsp?id=${g.id }" class="btn btn-primary">添加购物车</a>
        </div>
      </td>
    </tr>
    </c:forEach>    
  </table>
</body></html>

doIndex.jsp  商城数据刷新页

这页只负责取到数据,在赋给主界面

<%
	//为首页提供数据
    IGoodsBiz goodsBiz=new GoodsBizImpl();
    List<Goods> goods=goodsBiz.getAll(ipage);
    request.setAttribute("goods", goods);//已经将数据放在请求中了
    //请求中的数据如果想带到其他界面  必须是转发
    request.getRequestDispatcher("index.jsp").forward(request, response);
%>

分页功能在页面上的体现

<div class="container text-center">
    <ul class="pagination" style="margin: 20px auto;">
        <li>
            <a href="index.jsp?ipage=${Math.max(ipage-1,1) }"><span>&laquo;</span></a>
        </li>
        <c:forEach begin="1" end="${maxPageCount}" var="num">
        
        <li class='${num==ipage ? "":"active"}'><a href="doIndex.jsp?ipage=${num}">${num}</a></li>
        </c:forEach>
        <li>
            <a href="index.jsp?ipage=${ipage+1>maxPageCount?maxPageCount:ipage+1}"><span>&raquo;</span></a>
        </li>
    </ul>
</div>

doIndex.jsp  上的取到分页的总页数

<%
    //首页的java代码
	String p=request.getParameter("ipage");//ipage(当前页码)
    int ipage=1;	//默认为第一页,如果用户修改则改为其他页
    if(p!=null){
    	ipage=Integer.parseInt(p);
    }
    //调用业务逻辑层
    IGoodsBiz goodsBiz=new GoodsBizImpl();
    int maxPageCount=goodsBiz.pageCount();
    //将数据存入域对象
    request.setAttribute("maxPageCount",maxPageCount);
 
%>

GoodsBizImpl.java  业务逻辑层实现类代码补充

//查询分页商品行总数量
	@Override
	public int pageCount() {
		return goodsDao.pageCount();
	}

IGoodsBiz.java  业务逻辑层接口代码补充

    //查询所有商品
	List<Goods> getAll(int pagenumber);

GoodsDaoImpl.java  数据库访问层实现类代码补充

 private Connection con;
 private PreparedStatement ps;
 private ResultSet rs;	 
	@Override
	public List<Goods> getAll(int pagenumber) {	//pagenumber 页面编号
		 List<Goods> list=new ArrayList<Goods>();
		 try {	
			 int pageRow=5;//一面显示的条数
			 int begin=1+((pagenumber-1)*pageRow);
			 int end=pagenumber*pageRow;
	            con=DBHelper.getCon();
	            ps=con.prepareStatement("select * from(select a.*,rownum rm from shop_goods a)b where rm between ? and ?");
	            ps.setInt(1, begin);
	            ps.setInt(2, end);
	            rs=ps.executeQuery();
	            while(rs.next()){
	               Goods goods=new Goods();
	               goods.setId(rs.getInt(1));
	               goods.setName(rs.getString(2));
	               goods.setPrice(rs.getDouble(3));
	               goods.setInfo(rs.getString(4));
	               list.add(goods);
	            }
	            return list;
	        }catch (Exception e) {
	            e.printStackTrace();
	        }finally {
	            DBHelper.close(con,ps,rs);
	        }
		return null;
	}
	public int pageCount() {	//pageCount分页商品行总数量
		int pagecount=0;
		try {
			con=DBHelper.getCon();
			ps=con.prepareStatement("select count(1) from shop_goods");
			rs=ps.executeQuery();
			if(rs.next()) {
				pagecount=(int)Math.ceil(rs.getInt(1)*1.0/5);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.close(con, ps, rs);
		}
		return pagecount;
	}

IGoodsDao.java  数据库访问层代码补充

    //查询所有商品
	List<Goods> getAll(int pagenumber);
	//查询分页商品行总数量
	int pageCount();

你要尽全力保护你的梦想。那些嘲笑你梦想的人,他们注定失败,他们想把你变成和他们一样。我坚信,只要心中有梦想,我就会与众不同。你也是。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值