JSP中 JSTL和EL标签的使用

夙愿已清 提交于 2020-03-09 00:41:53

使用JSTL前的准备

想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar).

JSTL简介

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

JSTL安装

导入jar包

Apache Tomcat安装JSTL 库步骤如下:

官方下载地址: http://tomcat.apache.org/taglibs/standard/

下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

JSTL标签库

在JSTL中分为以下五个标签

  1. 核心标签
  2. 格式化标签
  3. SQL标签
  4. XML标签
  5. JSTL函数

使用不同的标签的时候需要在JSP中引入不同的库

核心标签(Core):

引入标签库

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

常用标签

应用实例

  <c:set>

<c:set> 等同于JSP中的 session的setAttribute() 方法

使用方法:

1.<c:set var=”名字” value=”值”/>

2.<c:set var=”名字”>值</c:set>

<c:out>

<c:out> 等同于 JSP中的 <%= %>

使用方法:

<c:out value=”需要输出的值”>

在这里可以用EL表达式来进行输出session中的Attrbute

例:

<c:set var=”test” value=”这是一个测试”>

<c:out value=”${test}”>

 输出结果: 这是一个测试

 

<c:remove>

<c:remove> 和c:set标签正好相反,c:set标签是设置setAttrbute 

这个标签则是 删除 Attrbute中设置的值 等同于 session中的removeAttrbute()方法

使用方法:

 <c:remove var=”名字”/>

 

<c:if>

<c:if> 等同于 java 中的 if 语句

使用方法:

<c:if test=”条件”>满足条件执行的JSP代码</c:if>

<c:catch>

<c:catch> 类似于 java 中的 try

使用方法:

<c:catch var=”名字”>JSP代码</c:catch>

如果在执行过程中,JSP代码发生了错误,那么将会复制给名字,因此我们可以通过判断名字是否为NULL 来进行判断是否有异常发生

例:

<c:catch var=”testException”>

<% int i = 5/0; %>

</c:catch>

<c:if test=”${testException != null}”>
    上面的代码有错误发生

 </c:if>

输出结果: 上面的代码有错误发生

如果将 上面的 0 改为 3 则没有任何输出结果

<c:choose> 和 <c:when>

<c:choose> 和 <c:when> 类似于 java 中的 switch 和 case

使用方法:(c:choose中可以有多个c:when标签)

<c:choose>

<c:when test=”条件”>处理</c:when>

<c:when test=”条件”>处理</c:when>

</c:choose>

例:

<c:set var=”test” value=”10”/>

<c:choose>

<c:when test=”${test > 5}”>test 大于5</c:when>

<c:when test=”${test < 5}”>test小于5</c:when>

</c:choose>

输出结果: test大于5

<c:otherwise>

<c:otherwise> 等同于 java switch 中的 default

使用方法

<c:choose>

<c:otherwise>处理</c:otherwise>

</c:choose>

当choose 中的 when 没有满足条件的时候 会执行 otherwise 中的内容

注意: choose 和 when 和 otherwise 是一组 when 和 otherwise 必须写在choose中

<c:import>

使用方法:

<c:import var=”date” url=”http://www.baidu.com” />

通过上面的写法会将 百度 的源代码返回到 date 变量中,使用

<c:out value=”${date}”>

输出

<c:forEach> 和 <c:forTokens>

类似于JAVA中的 FOR循环 和 FOREACH循环

使用方法:

<c:forEach var=”名字(i)” begin=”开始数字(1)” end=”结束数字(5)”>

${i}

</c:forEach>

输出结果是1 2 3 4 5

使用方法:

<c:forTokens items=”a,b,c,d,e” delims=”,” var=”name”>

${name}

</c:forTokens>

输出结果 a b c d e

forEach类似于JAVA中 for 循环 设置一个开始数字 begin 设置一个结束数字 end 然后每次循环都会将值赋值给 var   另外还有个 setp参数 里面可以设置值 意思是每次增加几个数

forTokens类似于JAVA中的foreach 在items中放一个组 然后 delims设置以什么分割 然后 将分割后循环的值赋值给 var  如果 items中存放的是一个集合 那么可以不用写delims 这样每循环一次 就会取出集合中的一个放在 var中

<c:redirect>

类似于service中的重定向

使用方法:

<c:redirect url=”http://www.baidu.com”/>

重定向到百度去

另外还有<c:url> 和 <c:param>两个标签

 标签主要有

<%--JSTL 核心标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--JSTL 格式化标签--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--JSTL SQL标签--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%--JSTL XMLb标签--%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%--JSTL 函数标签--%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

其他JSTL具体用法可以查看菜鸟教程地址https://www.runoob.com/jsp/jsp-jstl.html

 

EL表达式介绍: 

EL详细用法可以查看菜鸟教程地址:https://www.runoob.com/jsp/jsp-expression-language.html

EL表达式定义规则:以 $ 开头 内容写在 {} 中 例: ${test}

当然,因为EL表达式所有的代码都是写在{}中的,所以我们也可以在里面写运算

比如:

${test+100}

最终输出的结果就是test这个变量加上数字100后的值了

再比如

${test != null} 

最终输出的结果就是一个true  通过这种方式  我们可以很好的和JSTL结合起来一起使用.

EL中的运算符分为  .  和  []  两种

如果要动态取值 可以使用[]  比如:

${session.user[date]}

其中的date是一个变量

上面代码的意思是 取出 session.user这个数组里面的第 date 个元素

需要注意的是,EL表达式限制了我们调用JAVA方法,如果想要调用,可以自定义一个TAG

EL表达式查找顺序(都是针对Attrbute()):

如果使用类似于 ${username} 的时候没有在哪一个范围查找username 那么它会以:

  1. Page
  2. Request
  3. Session
  4. Application

为顺序来进行查找,加入中途找到了 username 那么就会返回值  如果一路没找到 返回 null

EL表达式的隐性变量:

从这里开始就是介绍EL表达式的隐性变量,通过这些隐性变量可以让我们简便完成很多复杂的操作:

JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

 

例:假设我们是想要session中的name值 那么我们可以使用:

 ${sessionScope.name}

 再例:我们想要获得GET或则POST传递过来的name参数,在以前我们只能使用:

 request.getParameter(name);

 使用EL表达式可代替为:

 ${param.name}

同样,如果我们想要得到一个参数的数组,可以使用:

${paramValues.name}

当然,返回的是一个数组对象.

注意EL 表达式中空值的判定

对NuLL的判断
Empty 对于 null 和”” 都会返回true
== null 则是对null 返回true 而对”” 则是返回false
Not empty 不等于空,包括不等于null 和不等于””
<c:if test="${rdinfo.isProprietaryShop eq '0' or rdinfo.isProprietaryShop eq null }">
<c:if test =”${empty arraylist}”></if>     // 判断对象是否为空对象

总结:

el(expression langauge):表达式语言     作用:获取对象    用法:1、${变量名}  2、${变量  运算符  变量}     使用el的条件:如果用的servlet-api.jar包低于javax.servlet-api-3.0.1版本,web版本必须是3.0之前的。

1、获取PageContext页面范围域的对象,${pageScope.user(或者是list)}

2、获取ServletRequest请求范围域的对象,${requestScope.user(或者是list)}

3、获取HttpSession会话范围域的对象,${sessionScope.user(或者是list)}

4、获取ServletContext应用范围域的对象,${applicationScope.user(或者是list)}

直接${user(或者是list)},也可以获取对象。仅有一个范围域对象时,获取的就是该范围域对象,

有多个对象时,获取的对象的优先顺序为:PageContext页面范围域的对象、获取ServletRequest请求范围域的对象、获取HttpSession会话范围域的对象、获取ServletContext应用范围域的对象。

 

 jstl(java server page standard tag library):

   jsp的标准标签库    

   作用:不让jsp页面出现java代码,实现简单的java程序语句,例如,表达式操作,流程控制,迭代操作,URL操作     使用jstl的条件:jstl.jar,standard.jar,<%@ taglib uri="http://java.sun.com/jsp/jstl.core"    profix="c" %>

使用方法:(举一个最常用的迭代操作)

<c:foreach items="${list}" var="user">
 <tr> <td>${user.userId}</td> <td>${user.userName} </td> <td>${user.userAge} </td> </tr>
</c:foreach>

JSTL简介

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

JSTL安装

导入jar包

Apache Tomcat安装JSTL 库步骤如下:

官方下载地址: http://tomcat.apache.org/taglibs/standard/

下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

JSTL标签库

在JSTL中分为以下五个标签

  1. 核心标签
  2. 格式化标签
  3. SQL标签
  4. XML标签
  5. JSTL函数

使用不同的标签的时候需要在JSP中引入不同的库

核心标签(Core):

引入标签库

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

常用标签

应用实例

  <c:set>

<c:set> 等同于JSP中的 session的setAttribute() 方法

使用方法:

1.<c:set var=”名字” value=”值”/>

2.<c:set var=”名字”>值</c:set>

<c:out>

<c:out> 等同于 JSP中的 <%= %>

使用方法:

<c:out value=”需要输出的值”>

在这里可以用EL表达式来进行输出session中的Attrbute

例:

<c:set var=”test” value=”这是一个测试”>

<c:out value=”${test}”>

 输出结果: 这是一个测试

 

<c:remove>

<c:remove> 和c:set标签正好相反,c:set标签是设置setAttrbute 

这个标签则是 删除 Attrbute中设置的值 等同于 session中的removeAttrbute()方法

使用方法:

 <c:remove var=”名字”/>

 

<c:if>

<c:if> 等同于 java 中的 if 语句

使用方法:

<c:if test=”条件”>满足条件执行的JSP代码</c:if>

<c:catch>

<c:catch> 类似于 java 中的 try

使用方法:

<c:catch var=”名字”>JSP代码</c:catch>

如果在执行过程中,JSP代码发生了错误,那么将会复制给名字,因此我们可以通过判断名字是否为NULL 来进行判断是否有异常发生

例:

<c:catch var=”testException”>

<% int i = 5/0; %>

</c:catch>

<c:if test=”${testException != null}”>
    上面的代码有错误发生

 </c:if>

输出结果: 上面的代码有错误发生

如果将 上面的 0 改为 3 则没有任何输出结果

<c:choose> 和 <c:when>

<c:choose> 和 <c:when> 类似于 java 中的 switch 和 case

使用方法:(c:choose中可以有多个c:when标签)

<c:choose>

<c:when test=”条件”>处理</c:when>

<c:when test=”条件”>处理</c:when>

</c:choose>

例:

<c:set var=”test” value=”10”/>

<c:choose>

<c:when test=”${test > 5}”>test 大于5</c:when>

<c:when test=”${test < 5}”>test小于5</c:when>

</c:choose>

输出结果: test大于5

<c:otherwise>

<c:otherwise> 等同于 java switch 中的 default

使用方法

<c:choose>

<c:otherwise>处理</c:otherwise>

</c:choose>

当choose 中的 when 没有满足条件的时候 会执行 otherwise 中的内容

注意: choose 和 when 和 otherwise 是一组 when 和 otherwise 必须写在choose中

<c:import>

使用方法:

<c:import var=”date” url=”http://www.baidu.com” />

通过上面的写法会将 百度 的源代码返回到 date 变量中,使用

<c:out value=”${date}”>

输出

<c:forEach> 和 <c:forTokens>

类似于JAVA中的 FOR循环 和 FOREACH循环

使用方法:

<c:forEach var=”名字(i)” begin=”开始数字(1)” end=”结束数字(5)”>

${i}

</c:forEach>

输出结果是1 2 3 4 5

使用方法:

<c:forTokens items=”a,b,c,d,e” delims=”,” var=”name”>

${name}

</c:forTokens>

输出结果 a b c d e

forEach类似于JAVA中 for 循环 设置一个开始数字 begin 设置一个结束数字 end 然后每次循环都会将值赋值给 var   另外还有个 setp参数 里面可以设置值 意思是每次增加几个数

forTokens类似于JAVA中的foreach 在items中放一个组 然后 delims设置以什么分割 然后 将分割后循环的值赋值给 var  如果 items中存放的是一个集合 那么可以不用写delims 这样每循环一次 就会取出集合中的一个放在 var中

<c:redirect>

类似于service中的重定向

使用方法:

<c:redirect url=”http://www.baidu.com”/>

重定向到百度去

另外还有<c:url> 和 <c:param>两个标签

 标签主要有

<%--JSTL 核心标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--JSTL 格式化标签--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--JSTL SQL标签--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%--JSTL XMLb标签--%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%--JSTL 函数标签--%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

其他JSTL具体用法可以查看菜鸟教程地址https://www.runoob.com/jsp/jsp-jstl.html

 

EL表达式介绍: 

EL详细用法可以查看菜鸟教程地址:https://www.runoob.com/jsp/jsp-expression-language.html

EL表达式定义规则:以 $ 开头 内容写在 {} 中 例: ${test}

当然,因为EL表达式所有的代码都是写在{}中的,所以我们也可以在里面写运算

比如:

${test+100}

最终输出的结果就是test这个变量加上数字100后的值了

再比如

${test != null} 

最终输出的结果就是一个true  通过这种方式  我们可以很好的和JSTL结合起来一起使用.

EL中的运算符分为  .  和  []  两种

如果要动态取值 可以使用[]  比如:

${session.user[date]}

其中的date是一个变量

上面代码的意思是 取出 session.user这个数组里面的第 date 个元素

需要注意的是,EL表达式限制了我们调用JAVA方法,如果想要调用,可以自定义一个TAG

EL表达式查找顺序(都是针对Attrbute()):

如果使用类似于 ${username} 的时候没有在哪一个范围查找username 那么它会以:

  1. Page
  2. Request
  3. Session
  4. Application

为顺序来进行查找,加入中途找到了 username 那么就会返回值  如果一路没找到 返回 null

EL表达式的隐性变量:

从这里开始就是介绍EL表达式的隐性变量,通过这些隐性变量可以让我们简便完成很多复杂的操作:

JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

 

例:假设我们是想要session中的name值 那么我们可以使用:

 ${sessionScope.name}

 再例:我们想要获得GET或则POST传递过来的name参数,在以前我们只能使用:

 request.getParameter(name);

 使用EL表达式可代替为:

 ${param.name}

同样,如果我们想要得到一个参数的数组,可以使用:

${paramValues.name}

当然,返回的是一个数组对象.

注意EL 表达式中空值的判定

对NuLL的判断
Empty 对于 null 和”” 都会返回true
== null 则是对null 返回true 而对”” 则是返回false
Not empty 不等于空,包括不等于null 和不等于””
<c:if test="${rdinfo.isProprietaryShop eq '0' or rdinfo.isProprietaryShop eq null }">
<c:if test =”${empty arraylist}”></if>     // 判断对象是否为空对象

总结:

el(expression langauge):表达式语言     作用:获取对象    用法:1、${变量名}  2、${变量  运算符  变量}     使用el的条件:如果用的servlet-api.jar包低于javax.servlet-api-3.0.1版本,web版本必须是3.0之前的。

1、获取PageContext页面范围域的对象,${pageScope.user(或者是list)}

2、获取ServletRequest请求范围域的对象,${requestScope.user(或者是list)}

3、获取HttpSession会话范围域的对象,${sessionScope.user(或者是list)}

4、获取ServletContext应用范围域的对象,${applicationScope.user(或者是list)}

直接${user(或者是list)},也可以获取对象。仅有一个范围域对象时,获取的就是该范围域对象,

有多个对象时,获取的对象的优先顺序为:PageContext页面范围域的对象、获取ServletRequest请求范围域的对象、获取HttpSession会话范围域的对象、获取ServletContext应用范围域的对象。

 

 jstl(java server page standard tag library):

   jsp的标准标签库    

   作用:不让jsp页面出现java代码,实现简单的java程序语句,例如,表达式操作,流程控制,迭代操作,URL操作     使用jstl的条件:jstl.jar,standard.jar,<%@ taglib uri="http://java.sun.com/jsp/jstl.core"    profix="c" %>

使用方法:(举一个最常用的迭代操作)

<c:foreach items="${list}" var="user">
 <tr> <td>${user.userId}</td> <td>${user.userName} </td> <td>${user.userAge} </td> </tr>
</c:foreach>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!