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}
- 向域对象(page域、request域、session域、application域)中存储数据
-
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>
- 捕获jsp页面的异常,相当于try…catch
-
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包
-
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>