一、JSTL简介

1、什么是JSTL

JSTL是Java中的一个定制标记库集。(这个标记库集不需要自己编写,可以直接使用)

2、为什么要使用JSTL

  • 实现了JSP页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高效率)
  • 书写JSP页面时可读性更强(长得很像xml,方便前端查看和参与开发)

用事实告诉你为什么使用JSTL:

实现:

但是,使用JSTL效果如下:

3、JSTL环境搭建

JSTL的下载:

下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

下载文件:jakarta-taglibs-standard-1.1.2.zip————2004-10-25 20:57 933K

解压文件后,在lib文件夹会获得两个jar包: standard.jar和jstl.jar

需要把这两个jar包导入到项目中,注意:

载入外来包,我们不介意采取:右击项目——Build Path方式,因为这样只是引入了一个jar包的link进来,如果把项目挪动位置或者把jar包删除了,则报错。所以我们推荐直接把要载入的文件复制到:项目——WebRoot\WEB-INF\lib里面,不要忘了把jar包选中——右键——Build Path----Add to Build Path。这样做可以让jar包随着项目走,绑在了一起。

二、EL表达式配合使用JSTL

1、JSTL小程序

如果要使用JSTL,要先导入JSTL的标签库,如果要进行页面的输出的话,需要使用<c:out>输出标签。<c:out>是属于JSTL核心标签的一个。

导入核心标签库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Ps:在uri中之所以能找到该http,是因为导入了上面两个jar,否则是找不到的。prefix="c",里面的名字可以自定义,一般为“c”。

<c:out value="输出内容"></c:out>

具体如下:

2、JSTL标签的四大分类及JSTL函数

JSTL标签中Value中的值其实可以输出变量和常量。其中常量可以直接输出,变量需要通过EL表达式去获取。

3、EL表达式

什么是EL表达式?

全名是Expression Language,常常配合jstl标签库使用,使得JSP页面更直观,写法更简单。

比如:普通写法:

EL表达式写法:

EL表达式的格式:

用美元符号“$”定界,内容包括在花括号“{}”中,即${表达式}

注意“.”和“[]”运算符:

但是:以下两种情况,两者不通用。

4、EL变量

如:<c:out value="${temp}"></c:out>

如果没有做范围的限定,会依据默认从小到大开始搜索,如果还是找不到,则输出空字符串。

5、EL自动类型转换

普通情况:

如果是用EL表达式:

6、EL隐式对象

7、EL运算符

对empty举例:

<% String username="null"; request.setAttribute("username", username); %>
<c:out value="${empty username}"></c:out>

Ps:如果username为null或者"",则返回true;如果username为"有内容",则返回false。

el表达式中empty运算符对字符串为Null,及空字符串都返回 TRUE。

三、JSTL核心标签的使用

1、out标签(表达式控制标签)

out标签的作用:

2、set标签(表达式控制标签)

set的标签的作用:

  • 存值到scope中(page,request,session,application);

    • 可以将值以变量形式存放在指定范围内,有两种方式:

  • 存值到JavaBean的属性中。

    • 需要配合target属性指定对象并通过property属性指定要赋值给对象的哪个属性。

Person类:

将Person类实例化

实例化话后的变量名叫person。那实例化后如何通过set标签向person中赋值。

变量的赋值需要配合target属性指定对象并通过property属性指定要赋值给对象的哪个属性。

3、remove标签(表达式控制标签)

remove标签的用法:

  • 只能remove掉某个变量(不能remove某个类对象的某个属性);
  • var属性是必选;
  • scope属性是可选。

比如:

此时运行结果就输出不了firstName的值了。

4、catch标签(表达式控制标签)

catch标签的用法:

  • catch标签中可以包含那些容易出错的JSTL标签(逻辑)

输出结果:

5、if标签(流程控制标签)

if标签的用法:

  • 同程序中的if作用相同,用来实现分支条件控制。

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

比如:根据用户输入的成绩进行等级判断

运行结果:

用户什么都没输入的时候,默认进来是false

输入90:

输入80:

6、choose、when、otherwise(流程控制标签)

choose、when、otherwise 标签的作用:

  • 通常这三个标签被放在一起配合使用
  • <c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为他们的父标签来使用。
  • 其中choose和when标签也可以一起组合使用。

综上所述通常有以下两种语法结构:

比如:

<!-- choose、when、otherwise -->
<c:choose>
<c:when test="${param.score<=100 && param.score>=60 }">
<c:out value="及格"></c:out>
</c:when>
<c:when test="${param.score<60 && param.score>=0 }">
<c:out value="不及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="请检查你的输入!"></c:out>
</c:otherwise>
</c:choose>

ps:用法类似于switch——case——default。

比如:

7、forEach(循环控制标签)

forEach标签的作用:

常用用法1-全部遍历:

例子:

常用用法2-部分遍历:(begin end)

index值是从0开始的。

例子:

常用用法3-部分遍历中指定步长(step)

例子:

<!-- 用法三:部分遍历并带步长 -->
<c:forEach var="fruit" items="${fruits}" begin="1" end="3" step="2">
<c:out value="${fruit}"></c:out><br>
</c:forEach>

Ps:step默认值:1。

常用用法4-部分遍历时输出元素的状态(varStatus)

例子:

<!-- 用法四:部分遍历并带状态 -->
<c:forEach var="fruit" items="${fruits}" begin="1" end="3" varStatus="fru">
<c:out value="${fruit}——四个属性:"></c:out><br>
<c:out value="index属性:${fru.index}"></c:out><br>
<c:out value="count属性:${fru.count}"></c:out><br>
<c:out value="first属性:${fru.first}"></c:out><br>
<c:out value="last属性:${fru.last}"></c:out><br>
<c:out value="----------"></c:out><br>
</c:forEach>

PS:index从0开始;count从1开始;first是否第一个(boolean);last是否最后一个(boolean)。

8、forTokens(循环控制标签)

forTokens标签的用法:

例子:

输出:

注:forTokens还有如下属性,与forEach的属性相同。

9、import(URL操作标签)

import标签的用法:

impor各属性含义:

例子:

 1 <!-- import标签用法 -->
 2 <!-- 导入网络上的绝对路径 -->
 3 <c:catch var="error0">
 4 <c:import url="http://www.imooc.com"></c:import>
 5 </c:catch>
 6 <c:out value="${error0}"></c:out>
 7 <hr>
 8 <!-- 导入相对路径文件 -->
 9 <c:catch var="error1">
10 <c:import url="Test.txt" charEncoding="gbk"></c:import>
11 </c:catch>
12 <c:out value="${error1}"></c:out>

Ps:由于可能网络中断导致抛出异常,所以常常把import标签放在catch标签里。

 1 <!-- var及scope用法 -->
 2 <c:catch var="error2">
 3 <c:import url="Test.txt" var="test" scope="session" charEncoding="gbk"></c:import>
 4 </c:catch>
 5 <c:out value="${error2}"></c:out><br>
 6 <c:out value="import标签存储的test字符串变量值:${sessionScope.test}"></c:out>
 7
 8 <!-- context属性用法 -->
 9 <c:catch var="error3">
10 <c:import url="/index1.jsp" context="/Test1"></c:import>
11 </c:catch>
12 <c:out value="${error3}"></c:out><br>

Ps1:如果没定义var,则可以直接输出;如果定义了var,则用c:out标签输出。
Ps2:第一步:改eclipse中tomcat的部署路径,如果是灰掉的,停掉tomcat,然后clean,就可以改为第二项了(如果想在webapps生成,记得在Deploy path选择webapps)。第二步:改conf/context.xml中加上crossContext="true"。如:<Context crossContext="true"></Context>

注意:

10、redirect标签(URL操作标签详解)

redirect标签的用法:

注意:重定向的话浏览器的url都变为重定向的url,而import只是载入,浏览器url不变。

例子:

重定向把参数值都带到URL中去了:

获取值:

11、url标签(URL操作标签)

<!-- url标签用法 -->
<c:if test="${1<2}">
<c:set var="partUrl">temp.jsp</c:set>
</c:if>
<c:url value="http://localhost:8080/Test/${partUrl}" var="newUrl" scope="session"></c:url>
<a href="${newUrl}">New URL</a>

四、JSTL函数的使用

1、contains函数、startsWith、endsWith

contains函数表示加入的字符串是否包含字串,返回一个boolean类型的值。

 1 <!-- JSTL函数使用 -->
 2 <c:out value="“Hello World”字符串中是否包含“Hello”?${fn:contains('Hello World','Hello')}"></c:out>
 3 <hr>
 4 <c:out value="“Hello World”字符串中是否包含“ABCD”?${fn:contains('Hello World','ABCD')}"></c:out>
 5 <hr>
 6 <c:out value="“Hello World”字符串中是否包含“hello”(忽略大小写)?${fn:containsIgnoreCase('Hello World','hello')}"></c:out>
 7 <hr>
 8 <c:out value="“Hello”是否在“Hello World”字符串开头?${fn:startsWith('Hello World','Hello')}"></c:out>
 9 <hr>
10 <c:out value="“world”是否在“Hello World”字符串尾部?${fn:endsWith('Hello World','world')}"></c:out>

Ps1:配合使用:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

2、escapeXml、indexOf

 1 <!-- 不会输出<book>标签 -->
 2 <book>书</book>
 3 <hr>
 4 <!-- 可输出标签但会出现转义问题 -->
 5 <c:out value="${fn:escapeXml('<book>书</book>')}"></c:out>
 6 <hr>
 7 <!-- 可输出标签且不会出现转义问题 -->
 8 <c:out value="<book>书</book>"></c:out>
 9 <hr>
10 <!-- indexOf函数用法 -->
11 <c:out value="“Hello World”字符串“llo”出现的index值:${fn:indexOf('Hello World','llo')}"></c:out>

JSP常用标签——JSTL标签和EL表达式相关推荐

  1. java day41【JSP 、MVC开发模式 、EL表达式 、JSTL标签 、三层架构】

    第一章  JSP 1. 指令 * 作用:用于配置JSP页面,导入资源文件 * 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> * 分类: 1. page : ...

  2. Java虚拟机中的内存模型?JSP常用的动作标签及作用? 如何防止表单重复提交问题? JSP四大作用域及请求范围? 分别说出http,https,ftp,talnet的默认端口?

    文章目录 一 ,Java虚拟机中的内存模型JVM? 1,Java堆 2,方法区 3,Java栈 4,本地方法栈 问题扩展: 二 , JSP常用的动作标签及作用 (1)问题分析: (2)核心答案讲解: ...

  3. jsp(3,6,9) EL表达式及JSTL

    1. jsp 1.1jsp是什么 全称: Java Server Pages,java服务器页面.和Servlet一样,是sun公司定义的一种动态网页开发技术.     特点:基于html模版,可以在 ...

  4. JSP中自定义jstl标签

    本期精彩: 之前的博客中有介绍jstl标签和EL表达式:web知识之域对象&EL表达式&JSTL标签_小阿飞_的博客-CSDN博客_web域对象JSP中,关于域对象.EL.JSTLht ...

  5. 自定义标签JSTL标签库详解

     自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简 ...

  6. JSP系列教材 (十一)- EL表达式语言

    EL表达式非常好用,好用的吓死人 ~  步骤1:取值 步骤2:作用域优先级 步骤3:JavaBean概念 步骤4:获取JavaBean的属性 步骤5:结合JSTL的<c:forEach 步骤6: ...

  7. 关于Jsp页面的jstl标签的级联属性的异常。

    使用SpringMVC框架时,当我做表单回显时. 情景描述.Employee 类有一个Department类的属性.这两个类存在多对一关联关系. 下面是Employee类的属性的定义. public ...

  8. JSP之自定义jstl标签

    目录 一,什么是JSP

  9. jsp java el表达式_jsp相关笔记,el表达式、jsp标签库(jstl)

    一.jsp基础部分 1.介绍 概念 JSP(Java Server Page),java服务器端页面,可以定义html标签,又可以定义java代码. 原理 JSP本质上就是一个Servlet 2.JS ...

最新文章

  1. yolov3为什么对大目标检测不好_基于改进Yolov3的目标检测的研究
  2. “达克效应”让人们信心满满还是畏惧不前?- 更应该是谨慎地冒险
  3. python debug【】
  4. IO多路复用之epoll总结
  5. 【freemarker】渲染列表一系列操作
  6. 验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型
  7. html 轮播 平移,网站轮播图的实现-平移版
  8. Android UI事件传递就是这么个事儿
  9. bzoj1045题解
  10. 用html设计倒计时秒表,Javascript实现秒表倒计时功能
  11. 历年软考网络工程师考试真题及答案
  12. BM3D代码matlab,BM3D的学习与Matlab实现
  13. 【PostMan】测试Post请求
  14. Android开发之对上下两个图层的操作
  15. 工作中那些让人印象深刻的BUG(2)
  16. 解析几何----双曲线左支极坐标方程
  17. 安卓高级8 支付宝支付
  18. 西门子在华启动“零碳先锋计划”;希尔顿欢朋在华项目签约数突破600 | 美通社头条...
  19. uniapp连接蓝牙相关问题
  20. 变革中的思索之重读《孙子兵法》

热门文章

  1. 跳水比赛背后的隐形教练现身了!百度智能云还完成了历史性的大升级
  2. 她琴棋书画全能,还进入清华计算机系实验室,被赞智商太超群、能力过强悍...
  3. 他们花一百万让你的票圈广告更好看,还被ACM点了赞
  4. 简单点,让论文写作简单点,老牌名校助理教授给出8个建议
  5. 小马智行L4无人车今日量产下线,这比融资更具里程碑意义
  6. 技术宅硬核跨年,DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」| 开源...
  7. 三次元风景照秒变宫崎骏动画,还能把石原里美吉卜力化,AnimeGAN已开源
  8. AI之父图灵登上50英镑钞票,荣耀比肩牛顿达尔文;吴恩达:将激励更多人
  9. Go开发之路 -- 指针类型
  10. flutter 如何自定义一个loadmore / 加载更多