1、什么是JSTL标签

  • JSTL是java中的一个定制标记库集合。
  • JSP标签库(JSTL)是一个JSP标签库集合,它封装了JSP应用的通用核心功能。
  • 根据JSTL标签所提供的的功能,可将其分为5个类别:

    核心标签
    格式化标签
    SQL 标签
    XML标签
    JSTL函数

2、JSTl环境搭建

  • 下载jstl的jar包(导入到项目中)

    从Apache的标准标签库中下载的二进制包(jakarta-taglibs-standard-current.zip)。
    下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

  • 如果是maven管理工程(只需引入相关依赖机会自动下载)
    #mvnrepository中的jstl依赖地址
    https://mvnrepository.com/artifact/jstl/jstl/1.2
    
  • 此处我们以maven依赖为例
    <!-- https://mvnrepository.com/artifact/jstl/jstl -->
    <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
    </dependency>
    
  • 在JSP页面引入jar包
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

3、为什么要使用JSTL标签

  • 实现JSP页面代码的复用

    基于标签库原理,重复率较高的代码支持复用,提高效率。

  • 书写JSP页面的可读性强

    长得很像XML,方便前端检查和参与修改。

  • 举个简单的例子说明为什么要使用JSTL标签

  • 利用JSP编写的login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head><title>Title</title>
    </head>
    <body>
    <form action="login.jsp" method="post"><input type="text" name="user" value="${param.user}" /><input type="submit" value="提交" />
    </form><%if(request.getParameter("user") != null){if(request.getParameter("user").equals("user")){%>"欢迎用户"<% }else if(request.getParameter("user").equals("admin")){ %>"欢迎管理员"<%}
    }%></body>
    </html>
    
  • 利用JSTL标签编写的login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head><title>Title</title>
    </head>
    <body>
    <form action="app3.jsp" method="post"><input type="text" name="user" value="${param.user}" /><input type="submit" value="提交" />
    </form><c:if test="${param.user == 'user'}"><c:out value="欢迎用户"></c:out>
    </c:if>
    <c:if test="${param.user == 'admin'}"><c:out value="欢迎管理员"></c:out>
    </c:if></body>
    </html>
    
  • 两者效果是一样的(自行区别好用之处)

4、JSTL的核心标签库共13个:

其中<c:import>与三大指令中include指令作用基本相同,都是指定一个绝对或相对路径url的JSP页面,使其暴露在当前页面的指定位置。

4.1、核心标签从功能上可以分为四类:

4.2、out标签的用法

  • 输出常量。

    可以在value属性中直接赋值。

  • 输出变量

    变量不存在的时候可以配合default属性输出默认值,
    还可以通过escapeXml控制转义字符的输出格式;
    var设定存放值的变量。

    <%--输出常量(value直接赋值)--%>
    <c:out value="我是out输出标签"></c:out><%--输出变量(value可从作用域中获取值)--%>
    <c:out value="${sessionScope.name}"></c:out>
    

4.3、set标签的用法

  • 存值到scope中。

    可以将值以变量的形式存放在指定的范围。
    scope设定存放值的范围;
    value指定存放值的内容;
    var设定存放的变量。

    <c:set scope="session" value="李四" var="name"></c:set>
    
  • 存值到JavaBean的属性中。

    target属性指定javabean的对象。
    property属性指定要赋值给javabean对象的哪个属性。
    value指定存放值的内容。

    <%--引入实体类实例化对象--%>
    <jsp:useBean id="user" class="com.ebuy.pojo.User"></jsp:useBean>
    <%--为实例化对象的name属性赋值--%>
    <c:set target="${user}" property="name" value="张三"></c:set>
    

4.4、remove标签的用法

  • 移除指定scope作用域内的变量

    var属性是必选
    scope属性是必选
    如果不同的scope中存在一样的变量可以通过scope属性指定删除哪个scope中的变量

    <c:remove scope="session" var="name"></c:remove>
    

4.5、catch标签的用法

  • catch标签

    catch标签可以包含容易出错的JSTL标签(逻辑)。
    var属性定义错误信息输出的变量名。

    <!--catch标签  -->
    <c:catch var="error"><c:set target="user" property="name" value="王五"></c:set>
    </c:catch>获取catch标签中的错误信息:<c:out value="${error}"></c:out><br>
    

4.6、if标签的用法

  • 用来实现分支条件的控制。

    test属性用来存放判断条件,一般使用EL表达式来编写。
    var属性指定名称用来存放判断结果类型为true还是false。
    scope属性用来存放var属性存放的范围。

    <c:if test="${param.score>=90}" var="boolean" scope="session"></c:if>
    

4.7、choose、when、otherwise标签的用法:

  • 通常这三个标签放在一起来使用。

    <c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为父标签来使用。
    <c:choose>标签和<c:when>标签也可以组合使用。

    <c:set var="score" value="99" scope="request"></c:set>
    <c:choose><c:when test="${score>90 and score<=100}">优秀</c:when><c:when test="${score>80 and score<=90}">良好</c:when><c:when test="${score>70 and score<=80}">一般</c:when><c:when test="${score>60 and score<=70}">及格</c:when><c:otherwise>不及格</c:otherwise>
    </c:choose>
    

4.8、forEach标签的用法

  • 根据循环条件遍历集合中的元素。

    var设定变量名用于存储从集合中取出的元素(必须无默认值)。
    items制定要遍历的集合(必须无默认值)。
    begin、and用于制定遍历的起始位置和终止为止(有默认)。
    step制定循环的步长(有默认值)
    varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。

    <c:forEach var="存储当前遍历元素的变量"items="待遍历集合"begin="开始遍历元素的index值"end="结束遍历元素的index值"step="部分遍历中每次遍历的间隔元素个数"varStatus="指定一个变量用来存储当前元素的状态值"><%--操作var变量表示的元素<br>--%></c:forEach>
    
  • 实例操作

    <table border="1"><c:forEach var="i" begin="1" end="10" step="1" varStatus="j"><tr><td>${j}---${i}</td></tr></c:forEach>
    </table>
    

  • 隔行换色

    <%--隔行变色--%>
    <table border="1"><c:forEach var="i" begin="1" end="10" step="1" varStatus="j">//在html的标签中可以嵌套使用jstl标签<tr <c:if test="${j.index%2==0}"> style="background-color: #3a52a8" </c:if></tr><td>${j.index}---${i}</td></tr></c:forEach>
    </table>
    

    在html的标签中可以嵌套使用jstl标签

  • forEach遍历list集合

    <%List list = new ArrayList();User user1 = new User();user1.setUserId("1001");user1.setUserName("张三");user1.setPassword("123456");User user2 = new User();user2.setUserId("1001");user2.setUserName("张三");user2.setPassword("123456");User user3 = new User();user3.setUserId("1001");user3.setUserName("张三");user3.setPassword("123456");list.add(user1);list.add(user2);list.add(user3);request.setAttribute("list",list);
    %><table border="1"><tr><td>编号</td><td>姓名</td><td>密码</td></tr><C:forEach items="${requestScope.list}" var="u"><tr><td>${u.userId}</td><td>${u.userName}</td><td>${u.password}</td></tr></C:forEach>
    </table>
    

  • forEach遍历Map集合

    <%Map<String,String> map = new HashMap<>();map.put("1001","张三");map.put("1002","李四");map.put("1003","王五");request.setAttribute("map",map);
    %><table border="1"><tr><td>编号</td><td>姓名</td></tr><c:forEach items="${requestScope.map}" var="m"><tr><td>${m.key}</td><td>${m.value}</td></tr></c:forEach></table>

4.9、forTokens标签

  • 用于浏览字符串,并根据指定的字符串将字符串截取。

    items指定被迭代的字符串
    delims指定使用的分隔符
    var指定用来存放遍历的元素

    <%request.setAttribute("zifu","中国,美国,英国,法国");
    %><c:forTokens items="${requestScope.zifu}" delims="," var="z">${z}<br>
    </c:forTokens>

4.10、import标签的用法

  • 可以把其他静态或动态文件包含到本jsp页面。

    同<jsp:include>的区别为:
    <jsp:include>只能包含同一个web应用中的文件。
    而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
    url被导入资源的URL路径
    context相同服务器下其他的web工程,必粗以"/"开头
    var 以String类型存入被包含文件的内容
    Scope var变量的JSP范围
    charEncoding 被导入文件的编码格式
    varReader以Reader类型存储被包含的文件内容

    <%@ include file="footer.jsp"%><c:import url="footer.jsp"></c:import>
    

4.11、redireck标签的用法

  • 该标签用来实现请求的重定向,同时可以在url中加入指定的参数。

    url指定重定向页面的地址,可以是一个string类型的绝对地址或者相对路径。
    context用于导入其他web应用中的页面。

    <c:redirect url="test.jsp"></c:redirect>
    

4.12、url标签的用法

  • 该标签用于动态生成一个String类型的url,可以同<c:param>标签共同使用,也可以使用html的标签实现超链接。

    value表示url路径值
    var将url的路径值存放在变量中
    scope表示var变量的范围

    <c:url value="http://www.baidu.com" var="baidu"><%--携带参数--%><c:param name="name" value="zs"></c:param><c:param name="sex" value="2"></c:param>
    </c:url><a href="${baidu}">点击进入百度首页</a>
    

4.13、fmt格式化标签(作为了解)

  • 此标签可以将日期格式化.

  • 属性介绍:

     value 用来格式化的时间或日期type 指定格式化的是日期还是时间,或者两者都是取值范围:date,time,bothpattern 自定义格式化样式dateStyle 日期的格式化样式timeStyle 时间的格式化样式timeZone 指定使用的时区var 存储格式化后的结果scope 指定存储的范围
    

    导入fmt标签库
    <%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

    <%Date d = new Date();request.setAttribute("d",d);
    %><fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
    

JSTL核心标签详解相关推荐

  1. MyBatis核心配置文件详解

    MyBatis核心配置文件详解 1.核心配置文件中的标签必须按照固定的顺序 2.properties标签 3.settings标签 4.typeAliases标签 5.environments标签 6 ...

  2. mybatis-day02-CRUD、动态代理开发、核心xml详解、输入输出参数

    文章目录 一.今日内容 二.mybatis实现crud 2.1 搭建环境(配置文件参考a.网址)(顺便实现findAll查询) 目录结构: pom.xml User.java SqlMapConfig ...

  3. ext核心API详解

    http://hi.baidu.com/j2me/profile 1 EXT核心API详解(一)-Ext 1 EXT核心API详解(二)-Array/Date/Function/Number/Stri ...

  4. jstl核心标签使用

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  5. HTML marquee标签详解

    HTML marquee标签详解 在论坛默认的编辑状态下,我们可以通过UBB语法的move和fly语句让对象动起来,但功能很简单,只是平行地移动.而我们使用HTML的Marquee语句则可以产生更多的 ...

  6. EXT核心API详解(二)-Array/Date/Function/Number/String

    EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o )  Number object是否在数组中,找不到返 ...

  7. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

  8. W3C中meta标签详解

    2019独角兽企业重金招聘Python工程师标准>>> meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <meta ...

  9. HTML基本标签详解与运行截图

    Web前端基础修炼 HTML基本标签详解与运行截图 CSS基本操作详解及截图演示 JavaScript基础(ECMAScript) JavaScript中DOM操作 JavaScript中BOM操作 ...

最新文章

  1. 开启apache的server-status辅助分析工具
  2. Java基础:char类型字节占用数
  3. Dataset:数据集集合(NLP方向数据集)——常见的自然语言处理数据集大集合(建议收藏,持续更新)
  4. SSIS实用教程(SQLServer2005)
  5. 【ElasticSearch】ES 的 path.data 配置多个盘的路径,查询效率与单个存储盘的效率比,哪个效率高些?
  6. netdev FAQ
  7. 寄售Consignment和VMI有什么区别?
  8. 此行向远:他们为人工智能雕刻灵魂
  9. Python ICMP扫描
  10. 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客
  11. 用JS判断浏览器是否是IE9以下
  12. 机器学习笔记之R语言基础5(T,F检验)
  13. php生成字符画,超易用的字符画在线生成器,非常适合制作STEAM展柜。
  14. 再读《终身成长》——重塑思维
  15. 服务器网口灯亮但显示未插网线,网线插路由器WAN口,但WAN口灯不亮怎么办?
  16. 最新Navicat Premium 16 激活中文版 适用于win和mac版
  17. Git详细使用说明++
  18. C++:char数组初始化
  19. 关于win10图标不正常显示的一种解决方法
  20. node-red教程 5.4 context global与函数节点的其它功能

热门文章

  1. ireport 制作图表去掉边框设置
  2. python将CSV文件转为excel
  3. Power Pivot - 业务指标的DAX度量值
  4. [洛谷 1365] WJMZBMR打osu! / Easy {期望DP}
  5. html中label文本垂直居中,如何在VB中实现label中的文字垂直方向居中?
  6. Linux sed 命令简要
  7. 23北京邮电大学备考经验
  8. 北邮计算机专业复试题目,2018年北邮计算机院复试上机题目
  9. windows软件进行反汇编修复流程
  10. 后台UI框架开发(一)