jsp中的JSTL与EL表达式用法及区别 jstl为什么能用EL表达式。EL不是类似<%= %>的吗,...

作者&投稿:慕胀 (若有异议请与网页底部的电邮联系)
JSTL (JSP Standard Tag Library ,JSP标准标签库)
JSTL标签库分为5类:JSTL核心标签库、JSTL函数标签库、数据库标签库、I18N格式化标签库、XML标签库。
JSTL的核心标签库主要包括:表达式操作、流程控制、迭代操作和URL操作。以下是JSTL常用标签的用法:
一、表达式操作
1、<c:out>
作用:用于显示数据的内容。
语法1:没有本体内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
属性说明:
value:需要显示出来的值。
default:如果value的值为null时,则显示default指定的值。
escapeXml:是否转换特殊字符,默认为true。即默认会将<、>、’、” 和 & 转换为 <、>、'、"和&。如果设为false,则不进行转换。
2、<c:set>
作用:用于将变量的值存储在JSP范围中或JavaBean的属性中。
语法1:将value的值存储在范围为scope的varName变量中
<c:set value="value" var="varName" [scope="{page|request|session|application}"] />
语法2:将本体内容的数据存储在范围为scope的varName变量中
<c:set var="varName" [scope="{page|request|session|application}"] >
...本体内容
</c:set>
语法3:将value的值存储在target对象的property属性中
<c:set value="value" target="target" property="propertyName" />
语法4:将本体内容的数据存储在target对象的property属性中
<c:set target="target" property="propertyName">
...本体内容
</c:set>
属性说明:
value:要被存储的值。
var:欲存入的变量名称。
scope:var变量的JSP范围。默认为page范围。
target:为一JavaBean或Map对象。
如果“target”是一个Map,“property”指定的是该Map的一个键;如果“target”是一个bean,“property”指定的 是该bean的一个成员字段。
如果“target”表达式为null,容器会抛出一个异常。
如果“target”表达式不是一个Map或bean,容器会抛出一个异常。
如果“target”表达式是一个bean,但是这个bean没有与“property”匹配的成员字段,容器会抛出一个异常。
property:指定的target对象的属性。
3、<c:remove>
作用:移除变量。
语法:<c:remove var="varName" [scope="{page|request|session|application}"] />
属性说明:
var:要移除的变量。
scope:var变量所在的JSP范围,默认为page范围。
4、<c:catch>
作用:用于处理产生错误的异常情况,并将错误信息存储起来。
语法: <c:catch [var="varName"] >
...欲抓取错误的部分
</c:catch>
属性说明:
var:将错误信息存储在指定的变量中,可以通过该变量获取错误信息。
二、流程控制
1、<c:if>
作用:类似if判断语句,用于表达式判断。
语法1:没有本体内容
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />
语法2:有本体内容
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />
...本体内容
</c:if>
属性说明:
test:当该属性中的表达式运算结果为true,则会执行本体内容,为false则不执行,该标签必须要有test属性。
var:存储test的运算结果,为true或false。
scope:var变量的JSP范围。
2、<c:choose>、<c:when>、<c:otherwise>
作用:这三个标签必须组合使用,用于流程控制。
范例:
<c:choose>
<c:when test="${condition1}">
condition1为true
</c:when>
<c:when test="${ condition2}">
condition2为true
</c:when>
<c:otherwise>
condition1和condition2都为false
</c:otherwise>
</c:choose>
范例说明:当condition1为true时,会显示“condition1为true”;当condition1为false且condition2为true时,会显示“condition2为true”,如果两者都为false,则会显示“condition1和condition2都为false”。
注意:若condition1和condition2的运算结果都为true时,此时只会显示"condition1为true"。
限制说明:
a、<c:when>和<c:otherwise>标签必须在<c:choose>和</c:choose>之间使用。
b、在同一个<c:choose>中,<c:otherwise>必须是最后一个标签,且只能有一个<c:otherwise>标签。<c:when>可以有多个。
c、在同一个<c:choose>中,当所有<c:when>的test都为false时,才执行<c:otherwise>的本体内容。
三、迭代操作
1、<c:forEach>
作用:为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法1:迭代一个集合对象中的所有成员
<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />
...本体内容
</c:forEach>
语法2:迭代指定次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
...本体内容
</c:forEach>
属性说明:
items:被迭代的集合对象。
var:存放当前指到的集合对象中的成员。
varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员 是否为第一个成员;last:当前指到的成员是否为最后一个成员)。
begin:迭代开始的位置,默认为0。
end:迭代结束的位置,默认为最后。
step:每次迭代的间隔数,默认为1。
范例:
<%
int atts[] = {1,2,3,4,5,6,7,8,9,10};
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" begin="0" end="9" step="1" >
${item}</br>
</c:forEach>
此标签也可以用于普通的循环控制,与for循环一样。如:
<c:forEach begin="1" end="10" var="item" >
${item}</br>
</c:forEach>
2、<c:forTokens>
作用:用指定分隔符分隔一字符串,并迭代分隔后的数组。
语法: <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] >
本体内容
</c:forTokens>
属性说明:
items:被分隔并迭代的字符串。
delims:用来分隔字符串的字符。
var:存放当前指到的成员。
varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员 是否为第一个成员;last:当前指到的成员是否为最后一个成员)。
begin:迭代开始的位置,默认为0。
end:迭代结束的位置,默认为最后。
step:每次迭代的间隔数,默认为1。
范例1:
<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>
用“,”号分隔字符串,并迭代输出分隔后的字符串数组,输出结果为“ABCDE”。
范例2:
<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
${item}
</c:forTokens>
delims中指定了三个分隔符“,”、“;”和“-”,可见我们一次可以设定所有想当做分隔字符串用的字符。输出结果依然为“ABCDE”。
四、URL操作
1、<c:import>
作用:将其他静态或动态文件包含到本身JSP网页中。不但可以包含同一个web application下的文件,还可以包含其他web application或其他网站的文件。
语法:
<c:import url="url" [var="varName"] [scope="{page|request|session|application}"] >
[<c:param name="paramName" value="paramValue"/>]
</c:import>
属性说明:
url:要包含至本身JSP网页的其他文件的URL。必选
var:将包含进来的其他文件以字符串的形式存放到指定的变量中。可选
scope:var变量的作用范围。可选
<c:param>:可选子标签,用于向包含进来的其他网页文件传递参数。
范例:
<c:import url="http://java.sun.com" >
<c:param name="test" value="1234" />
</c:import>
说明:当<c:import>标签中未指定var变量时,会直接将包含进来的其他网页文件内容显示出来,如果指定了var变量,则会将内容存放到var变量中,不显示。
2、<c:url>
作用:生成一个URL。
语法:
<c:url value="url" [context="expression"] [var="name"] [scope="scope"]>
[<c:param name="expression" value="expression"/>]
</c:url>
范例1:
<a href="<c:url value=index.jsp'/>">index page</a>
在<a>超链接标签中生成一个URL,指向index.jsp。
范例2:
<c:url value="index.jsp">
<c:param name="keyword" value="${searchTerm}"/>
<c:param name="month" value="02/2003"/>
</c:url>
生成一个URL,并传递参数,生成的结果为index.jsp?keyword=*&month=02/2003,*代表传递的searchTerm的值。
3、<c:redirect>
作用:可以将客户端的请求从一个JSP网页导向到其他文件。
语法:
<c:redirect url="url">
[<param name="paramName" value="paramValue">]
</c:redirect>
将请求导向URl指向的其他文件。
五、I18N格式化标签库
使用I18N格式化标签之前,需先插入以下指令:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
1、<fmt:formatNumber>
作用:将数字格式化成数字、货币、百分比
语法:
<fmt:formatNumber value="value" [var="varName"] [type="{number|curreny|percent}"] [maxFractionDigits="3"] [groupingUsed="{true|false}"]/>
属性说明:
value:需要进行格式化的值
var:值的另一个变量声明
maxFractionDigits:保留的小数点个数
2、<fmt:parseNumber>
作用:将字符串型的数字、货币、百分比格式化成数字
语法:
<fmt:parseNumber value="¥6789.36" [var="result"] [type="{number|curreny|percent}"] >
属性说明:
value:需要进行格式化的值
var:值的另一个变量声明
3、<fmt:formatDate>
作用:格式化时间和日期
4、<fmt:parseDate>
作用:将字符串形式的时间和日期转换成日期时间类型。
5、<fmt:setTimeZone>
作用:在JSP 网页中设置默认时区。
6、<fmt:timeZone>
作用:在JSP网页中为该标签体内的代码段设置时区。
7、<fmt:setLocale>
作用:在JSP 网页中设置语言地区。
8、<fmt:requestEncoding>
作用:在JSP 网页中设置请求所采用的编码方式,等价于JSP中的request. setCharacterEncoding(String encoding)。
9、<fmt:setBundle>
作用:设置默认的消息资源。
10、<fmt:message>
作用:在指定的消息资源中按关键字取出相应的消息内容。
11、<fmt:param>
作用:在从消息资源中取出消息内容时,为消息内容设置动态参数。
12、<fmt:bundle>
作用:为该标签体内的代码段设置一个消息资源。
他们的区别:
EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段。所以我们先来学习EL表达式EL主要用于查找作用域中的数据,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为。EL基本格式EL表达式的格式:用美元符号($)定界,内容包括在花括号({})中;例如: ${loginInfoBean.suser}此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值;例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}EL语法组成-标识符EL表达式由标识符、存取器、文字和运算符组成。标识符用来标识存储在作用域中的数据对象。EL 有 11 个保留标识符,对应于 11个EL隐式对象。除了11隐式对象外,假定所有其它标识符都用来标识作用域的变量。标识符例:${abc} 相当于<%=pageContext.findAttribute(“abc”)%>${og_1} <%=pageContext.findAttribute(“og_1”)%>…等等;就是说{}内的标识符除了11个保留字之外都表示作用域中的数据对应的名.${requestScope}中的requestScope是11个EL隐式对象之一,它不再表示作用域中数据,而是表示request作用域;EL隐藏对象pageContext PageContext 实例对应于当前页面的处理pageScope 与页面作用域属性的名称和值相关联的Map类requestScope 与请求作用域属性的名称和值相关联的Map类sessionScope 与会话作用域属性的名称和值相关联的Map类applicationScope 与应用程序作用域属性的名称和值相关联的Map类param 按名称存储请求参数的主要值的 Map 类paramValues 将请求参数的所有值作为 String 数组存储的 Map 类Header 按名称存储请求头主要值的 Map 类headerValues 将请求头的所有值作为 String 数组存储的 Map 类cookie 按名称存储请求附带的 cookie 的 Map 类initParam 按名称存储 Web 应用程序上下文初始化参数的Map类EL存取器存取器用来检索对象的特性或集合的元素。存取器: 通过 “[]” 或 “.” 符号获取相关数据例:${userBean.suser} 或 ${userBean[“suser”]}//获取输出bean中的suser属性值;${mcType[“id”]} //获取map中key为id对应的值;EL运算符运算符允许对数据和文字进行组合以及比较。EL运算符:类别 运算符算术运算符 +、-、*、/(或 div)和 %(或 mod)关系运算符 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)逻辑运算符 &&(或 and)、||(或or)和 !(或 not)验证运算符 empty验证运算符(empty):对于验证数据特别有用。empty 运算符采用单个表达式作为其变量(也即,${empty input}),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为 null 的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的 String 求值所得的结果,则 empty 运算符也将返回 true。EL文字文字表示固定的值 — 数字、字符、字符串、布尔型或空值。在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值。字符串可以用单引号或双引号定界。布尔值被指定为 true 和 falseJSTL是什么JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。xml 库包含一些标记,这些标记用来操作通过XML表示的数据,而 sql 库定义了用来查询关系数据库的操作。 两个 JSTL 标记库验证器允许开发人员在其 JSP 应用程序中强制使用编码标准。如果要使用JSTL,则必须引用jstl.jar和 standard.jar两个包。为什么要用JSTL我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet、表达式和声明)代码用来实现相关逻辑控制。看下面程序。但这样做会带来如下问题:jsp维护难度增加;出错提示不明确,不容易调试;分工不明确;(即jsp开发者是美工,也是程序员);最终增加程序的开发成本;解决上面的问题可以使用定制标记库,JSTL使JSP开发者可以减少对脚本元素的需求,甚至可以不需要它们,从而避免了相关的维护成本。使分工更明确。<% if (session.getAttribute(“user”).equals(“member”)) {%><p>Welcome, member!</p><% } else { %><p>Welcome, guest!</p><% } %>JSTL一般配合EL一起使用,因此先看看EL.JSTL部署在EE应用程序中部署JSTL有两种方式:已存在的工程上部署将jstl.jar和standard.jar两个包考到现有工程WebRoot / WEB-INF / lib 目录下将相关的 .tld文件考到现有工程 WebRoot /WEB-INF 目录下;也可通过eclipse在已存在

jstl的<C out>标签和EL表达式$的区别~

标签的作用是用来显示表达式的值。它的作用是用来替代通过JSP内置对象out或者标签来输出对象的值。
标签的语法说明如下:

标签具有以下一些属性:
l value:用来定义需要求解的表达式。
l default:缺省值。当求解后的表达式为null或者String为空时将打印这个缺省值。
l escapeXML:这个属性是可选的。用于指定在使用标记输出诸如“;”和“&”之类的字符(在 HTML 和 XML 中具有特殊意义)时是否应该进行转义。如果将 escapeXml 设置为true,则会自动的进行编码处理。

jsp会被翻译成servlet。
${i}会被翻译成:
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${i}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null, false));
也就是说el表达式就是一个值,只是在翻译过程中,用out.write输出了。
会被翻译成out.print(i)
楼主可以在tomcat下的work下具体的虚拟主机下的看翻译后的源码。
jstl,是当遇到标签,就创建对应的对象,执行标签体。
总结:el表达式就是个值。我也是才学的。有错请提出

刚接触JSTL和EL表达式,不知道如何从List<Map<String,Object>>取值_百度...
答:<c:forEach var="temp" items="${user}"> <c:forEach var="map" items="${temp}"> <c:out value='${map.key }'/> <c:out value='${map.value }'/> </c:forEach> </c:forEach>

EL表达式对比<%%>
答:1 EL表达式用${}表示,可用在所有的HTML和JSP标签中 作用是代替JSP页面中复杂的JAVA代码.2 EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组值.pageScope表示页面范围的...

jsp 中怎样引用 jstl标签
答:1、进入Apache官网找到,jstl包的链接准备下载,版本可以随意选择,尽量选择比较新的版本。2、需要下载的jstl包有4个,分别是impl,Spec,el,compat。这4个jar包分别进行下载。3、下载后的压缩包有四个,找到下载的路径中的包需要引用。4、将下载的4个jar包复制到新建的工程的lib目录下。5、将新建的...

jstl表达式中怎么直接调用方法
答:el表达式一般是得到的是Pojo类中的Get/set方法, 一般结合Jstl使用,大小写比较严紧,如果想传参的话,必须建立一个Tld文件,把自己的类封装成自己的标签,方可使用 就是一般的Pojo类,比如一个Person类的getName(String username) { return username; } 前提是必须把Person传到页面,request.setAtrribute...

用el标签如何获取列表中的第一个元素?
答:例如:在jsp中获取 <%List<Order> orderList =(List<Order>)request.getAttribute("orderList");%><%=orderList.get(0).getOrderID()%>方法:可以用 ${ListData[0].属性}获取。EL表达式简介EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath ...

关于jsp页面上,el表达式相等的问题
答:你好,JSTL就是这么用啊,我也是百思不得其解,我把你代码复制过去就不出来,最后我自己把那段代码敲了一遍,出来了.终于明白你的代码错在哪儿了!<c:if test="${sessionScope.loginPlayer.username == comment.username} "> ^ 你注意上面这句话,倒数第三个字符,是一个中文空格!把这个删除掉...

用jstl表达式怎么将在jsp页面取出的字符串转换成整型数据
答:JSP中JSTL提供的函数标签EL表达式操作字符串的方法 首先在jsp页面导入标签 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 分类: (1)转换字符串大小写: toLowerCase("要截取的字符串")---转换成小写---例: ${fn:toLowerCase("Hello,Word!")} toUpperCase("要...

jstl表达式 怎么引用Java代码 例如${对象名.属性名}:属性名要用Java代码...
答:private String name = "NAME";public String getName() { return name;} } 然后就可以在jsp页面里建立个对象 <jsp:useBean id="classa" class="com.example.name.ClassA" /> 之后就可以用它的属性了 例如这么用 ${classa.name} 实际上这么做是调用了上面那个bean类中的名称对应的get方法...

在JSP中,怎么JSTL循环输出list内容?
答:Action中:private List<Message> messageList;//省略get,set方法 Action("/findAllMessageAOP")public String findAllMessageAOP() throws Exception messageList=messageManager.queryAll();return "find";//跳转到对应的jsp页面Jsp页面的显示:<%--用EL表达式直接调用属性循环输出对象的各个属性值--%>...

...var="mem" items="${memberList}">中的c:forEach 是什么写法,什么意...
答:{}叫做EL表达式,就是说可以取到服务器的各种作用域里面的值,比如说取到request里面的一个叫 list集合 的话,你可以写成${requestScope.list},至于<c:foreach items="${requestScope.list}" var="val"> {val} </c:foreach>的话,就是jstl标签,就是迭代那个request作用域里面的list,并且每次取...