作者:java_wxid
JSTL 标签库
JSTL标签库 全称是指 JSP Standard Tag Library JSP标准标签库。是一个不断完善的开放源代码的JSP标签库。
EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得更佳简洁。
JSTL由五个不同功能的标签库组成。
功能范围 URI 前缀
核心标签库--重点 http://java.sun.com/jsp/jstl/core c 格式化 http://java.sun.com/jsp/jstl/fmt fmt 函数 http://java.sun.com/jsp/jstl/functions fn 数据库(不使用) http://java.sun.com/jsp/jstl/sql sql XML(不使用) http://java.sun.com/jsp/jstl/xml x
在jsp标签库中使用taglib指令引入标签库
CORE 标签库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
XML 标签库
<%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %>
FMT 标签库
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
SQL 标签库
<%@ taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql” %>
FUNCTIONS 标签库
<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>
JSTL标签库的使用步骤
1、导入jstl标签库的jar包
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
2、使用taglib指令引入你需要的标签库
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
core核心库使用
<c:set />
1、可以往域中保存数据
2、可以修改域中bean对象的属性或Map集合的某个key的值
<body> <%-- i.<c:set /> --%> <%-- 域对象.setAttriubte(key,value); scope 属性设置使用哪个域对象 page,request,session,application var 就是保存的key value 属性设置你要保存的值 --%> <!-- 1、可以往域中保存数据 --> 保存之前:${ requestScope.key1 }<br/> <c:set scope="request" var="key1" value="value1"></c:set> 保存之后:${ requestScope.key1 }<br/> <hr/> <% Map<String,Object> map = new HashMap<String,Object>(); map.put("aa", "修改之前"); map.put("bb", "bbValue"); request.setAttribute("map", map); %> <%-- 2、可以修改域中bean对象的属性或Map集合的某个key的值 bean对象.setXxxx(新值); Xxx是你要修改的属性 map对象.put(key,新值); target属性表示你要修改哪个bean对象,或是哪个map集合 property属性设置你要修改的是哪个属性,或是map集合的哪个key value 属性设置你的新值 --%> 修改之前:${ requestScope.map }<br/> <c:set target="${ requestScope.map }" property="aa" value="修改之后"></c:set> 修改之后:${ requestScope.map }<br/> </body>
<c:if />
if标签可以用来做判断使用。
<%-- if标签做if判断, test 属性是if判断的表达式(使用EL表达式输出真假值) --%> <c:if test="${ 12 == 12 }"> <h1>12等于12啦啦啦……</h1> </c:if>
<c:choose> <c:when> <c:otherwise>标签
跟switch 、case、default,基本一样。
<% request.setAttribute("height", 136); %> <%-- choose。when。otherwise需要注意两个点: 1、在这里标签内不能使用html注释 2、when标签的父标签一定要是choose标签 --%> <c:choose><%-- switch --%> <%-- when 表示一种条件情况,相当于case --%> <c:when test="${ requestScope.height >= 190 }"> <h1>老高老高啦啦啦……</h1> </c:when> <c:when test="${ requestScope.height >= 180 }"> <h1>很高很高啦啦啦……</h1> </c:when> <c:when test="${ requestScope.height >= 170 }"> <h1>好矮好矮啦啦啦……</h1> </c:when> <c:when test="${ requestScope.height >= 160 }"> <h1>二等那啥啦啦啦……</h1> </c:when> <c:otherwise><%-- default --%> <c:choose> <c:when test="${ requestScope.height >= 150 }"> <h1>150</h1> </c:when> <c:when test="${ requestScope.height >= 140 }"> <h1>140</h1> </c:when> <c:when test="${ requestScope.height >= 130 }"> <h1>130</h1> </c:when> </c:choose> </c:otherwise> </c:choose>
<c:url />
1、它可以生成一个url地址,直接输出
2、可以把生成的url地址保存到某个域中
<!-- 1、它可以生成一个url地址,直接输出 value 是你的访问的资源路径 context 是你所在的工程路径,默认是当前工程 --> <c:url value="/f.jsp" context="/abc"> <c:param name="username" value="wzg168"></c:param> <c:param name="password" value="123456"></c:param> </c:url> <br/> <!-- 2、可以把生成的url地址保存到某个域中 域对象.setAttribute(key,地址); session.setAttribute(url,地址); --> <c:url value="/f.jsp" context="/abc" scope="session" var="url"> <c:param name="username" value="wzg168"></c:param> <c:param name="password" value="123456"></c:param> </c:url> Session域中保存的地址是:${ sessionScope.url }
<c:forEach />
forEach标签做遍历操作
1.遍历1到10,输出
2.遍历Object数组
3.遍历List集合—list中存放 Person类,有属性:编号,用户名,密码,年龄,电话信息
4.遍历Map集合
测试代码:
<%@page import="java.util.HashMap"%> <%@page import="java.util.Map"%> <%@page import="com.atguigu.pojo.Student"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> table{ width: 500px; border: 1px solid red; border-collapse: collapse; } th , td{ border: 1px solid red; } </style> </head> <body> <!-- 1.遍历1到10,输出 begin 遍历开始的索引 end 遍历结束的索引 var 是当前正在遍历到的数据 --> <c:forEach begin="1" end="10" var="i"> ${ i } </c:forEach> <hr/> <!-- 2.遍历Object数组 --> <% request.setAttribute("arr", new String[]{"aaaa","bbbb","cccc"}); %> <!-- items 设置你要遍历的集合(数据源) var 是当前正在遍历到的数据 --> <c:forEach items="${ requestScope.arr }" var="item"> ${ item }<br/> </c:forEach> <hr/> <!-- 3.遍历List集合---list中存放 Student类,有属性:编号,用户名,密码,年龄,电话信息 --> <% List<Student> list = new ArrayList<Student>(); for (int i = 0; i < 10; i++) { list.add(new Student(i,"name"+i,"pass"+i,18+i,"phone"+i)); } request.setAttribute("list", list); %> <table> <tr> <th>编号</th> <th>用户名</th> <th>密码</th> <th>年龄</th> <th>电话</th> <th>操作</th> </tr> <!-- step 是设置步长,每次遍历完,索引怎么移动,默认是1 varStatus 是当前遍历到的数据的状态对象 --> <c:forEach begin="1" end="7" items="${ requestScope.list }" step="1" var="stu" varStatus="status"> <c:if test="${ status.count == 3 }"> <tr style="background-color: green;"> </c:if> <c:if test="${ status.count != 3 }"> <tr> </c:if> <td>${ stu.id }</td> <td>${ stu.username }</td> <td>${ stu.password }</td> <td>${ stu.age }</td> <td>${ stu.phone }</td> <td>${ status.step }</td> </tr> </c:forEach> </table> <hr/> <!-- 4.遍历Map集合 --> <% Map<String,Object> map = new HashMap<String,Object>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); request.setAttribute("map", map); %> <c:forEach items="${ requestScope.map }" var="entry"> ${ entry.value }<br/> </c:forEach> </body> </html>