jstl标签库

01_jstl标签库介绍

  • 概述

    • jstl (java standard tag libarary)
    • 和el表达式结合使用,可以让功能更加强大!
  • 环境准备

    • 导入jar包

      jstl.jar
      standard.jar
      
    • 在jsp页面导入jstl标签库

      • 使用taglib指令
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
      <%
          int num = 1;
          request.setAttribute("num" , num);
      %>
      
      <c:if test="${num eq 1}">
          num等于1
      </c:if>
      
      <c:if test="${num ne 1}">
          num不等于1
      </c:if>
      

02_jstl核心标签

  • set标签

    • 向域对象(page域、request域、session域、application域)中存储数据
      • var:参数名称
      • scope:域
      • value:参数值
    <c:set var="msg" scope="request" value="hello jstl"></c:set>
    ${msg}
    
  • remove标签

    • 移除域对象中的数据
      • var:参数名称
      • scope:域
    <c:remove var="msg" scope="request"></c:remove>
    
    ${msg}<br>
    
  • catch标签

    • 捕获jsp页面的异常,相当于try…catch
      • var:声明异常对象名称,比如:var=“e” ,变量e就可以接收异常对象
    <c:catch var="e">
        <%
            int num = 1 / 0;
        %>
    </c:catch>
    ${e}<br>
    
  • if标签

    • 条件判断
      • test :编写条件
    <c:set var="num" value="2" scope="request"></c:set>
    <c:if test="${num == 1}">
        num 等于 1
    </c:if>
    
    <c:if test="${num != 1}">
        num 不等于 1
    </c:if>
    
  • forEach标签

    • 遍历集合或数组
      • begin:开始
      • end:结束
      • step:步数
      • var:元素名称
      • items:集合/数组
      • varStatus:元素状态对象
        • first:是否是第一个元素
        • last:是否是最后一个元素
        • current:当前元素
        • index“:当前脚标
    <!-- 基本使用 -->
    <c:forEach begin="1" end="10" step="3" var="num">
        ${num}
    </c:forEach>
    
    <%
        List<String> strs  = new ArrayList<>();
        strs.add("aaa");
        strs.add("bbb");
        strs.add("ccc");
        request.setAttribute("strs",strs);
    %>
    <!-- 相当于普通for循环 -->
    <c:forEach begin="0" end="${strs.size() - 1}" step="1" var="i">
        ${strs[i]}
    </c:forEach>
    
    <!-- 相当于增强for循环 -->
    <c:forEach var="str" items="${strs}" varStatus="status">
    	${str}<br>
        ${status.current} -- ${status.index} -- ${status.first} -- ${status.last}<br>
    </c:forEach>
    
  • forToken标签

    • 分割字符串
      • items:要分割的字符串
      • delims:分割的规则
      • var:分割产生的元素
    <%
        String msg1 = "aaa--bbb--ccc";
        request.setAttribute("msg1",msg1);
    %>
    
    <c:forTokens items="${msg1}" delims="--" var="sonMsg">
        ${sonMsg}
    </c:forTokens>
    

03_jstl综合案例准备工作

  • 导入jar包

    jstl标签库

  • ProductDao

    public class ProductDaoImpl implements ProductDao {
        @Override
        public List<Product> selectProductList() throws Exception {
            return new QueryRunner(JDBCUtils.getDataSource())
                    .query("select * from tb_product",
                            new BeanListHandler<Product>(Product.class));
        }
     }
    
  • ProductServlet

    @WebServlet(name = "ProductServlet" ,urlPatterns = "/selectProductList")
    public class ProductServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ProductDao productDao = new ProductDaoImpl();
            try {
                List<Product> productList = productDao.selectProductList();
                System.out.println(productList);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }
    

04_jstl综合案例功能完成

  • 代码实现

    • productList.jsp
    <table border="1px" cellspacing="0px" cellpadding="10px" width="500px" height="200px">
        <tr>
            <td>ID</td>
            <td>名称</td>
            <td>单价</td>
            <td>数量</td>
            <td>小计</td>
        </tr>
        <%--循环之前,总价为0--%>
        <c:set var="total" value="0" scope="page"></c:set>
        <c:forEach items="${productList}" var="product">
            <%--forEach标签,循环一次就是一个小计!--%>
            <tr>
                <td>${product.id}</td>
                <td>${product.name}</td>
                <td>${product.price}</td>
                <td>${product.count}</td>
                <td>${product.price * product.count}</td>
            </tr>
            <c:set var="total" value="${total + product.price * product.count}" scope="page"></c:set>
        </c:forEach>
        <%--循环之后,计算出总价--%>
        <tr>
            <td colspan="5" align="right">
                总价:${total}元
            </td>
        </tr>
    
    </table>
    
上一篇:数据结构和算法二十四


下一篇:2018年第九届C/C++ A组蓝桥杯省赛真题(python解法)