您的位置:首页 > Web前端 > JavaScript

JSP 标准标签库JSTL与EL表达式

2017-02-04 10:45 627 查看
JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段。
EL(Expression Language)表达式语言:用于计算和输出存储在标志位置(page、request、session、application)的java对象的值,然后对它们执行简单操作;EL是JSP2.0规范的一部分,只要容器支持Servlet2.4/JSP2.0,就可以在JSP2.0网页中直接使用EL。通常与
JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为。

EL表达式的格式:用美元符号($)定界,内容包括在花括号({})中;

例如: 

点号记法:${BeanName.beanProperty}

数组记法:${BeanName[“beanProperty”]

动态属性值:${loginInfoBean.spwd}

EL表达式的作用域:
使用EL的时候,默认会以一定顺序(pageContext、request、session、application)搜索四个作用域,将最先找到的变量值显示出来。






开启和关闭EL表达式
(1)开启方法
在servlet2.4之后默认方法为false,即可以不写或写成
<%@ page isELIgnored="false" %>
(2)关闭方法
<%@ page isELIgnored="true" %>
还有一种批量禁用EL的方法,可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,web.xml中进行如下配置。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
</web-app>





核心标签库(c:)

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


.<c:out>标签用于输出一段文本到浏览器中

属性:

value   支持EL   Object   指定要输出的内容

escapeXml  支持EL  Boolean指定是否将>,<,&,',"等特殊字符进行HTML编码转换后再进行输出。默认为true

default  支持EL   Object  指定如果value属性的值为null/""时所输出的默认值

.<c:set>标签用于把某个对象存在指定的域范围内,或者设置web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性

value  支持EL   Object  用于指定属性值

var    不支持EL  String  用于指定要设置的Web域属性的名称

scope  不支持EL   String  用于指定属性所在的web域

target 支持EL     Object 用于指定要设置属性的对象,这个对象必须是javaBean对象或java.util.Map对象

property  支持EL   String  用于指定当前要为对象设置的属性名称

.<c:if test="">标签可以构造简单的if-then结构的条件表达式

test    支持EL  boolean  决定是否处理标签体中的内容的条件表达式

var     不支持EL String  用于指定将test属性的执行结果保存到某个web域中的某个属性的名称

scope   不支持EL String   指定将test属性的执行结果保存到那个web域中

.<c:choose>标签用于指定多个条件选择的组合,和下面两个标签可以构造类似"if-elseif-else"的复杂条件判断结构
<c:when><c:choose>的子标签,用来判断条件是否成立

<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="${param.count}" var="count“ />

<c:choose>

<c:when test="${count == 0}">

对不起,没有符合您要求的记录。

</c:when>

<c:otherwise>

符合您要求的记录共有${count}条.

</c:otherwise>

</c:choose>

.<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容

var   不支持EL   String   指定将当前迭代到的元素保存到page这个web域中的属性名称

items 支持EL     任何支持的类型   将要迭代的集合对象

varStatus   不支持EL  String  指定将代表当前迭代状态信息的对象保存到page这个wen域中的属性名称

begin  支持EL    int     如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代

end    支持EL    int     参看begin属性的描述

step   支持EL    int     指定迭代的步长,既迭代因子的迭代增量

.<c:forTokens>标签对带有相同符合格式内容进行分割输出,例如varstr="1,2,3,4,5,6"

items   支持EL   任何类型   将要迭代的集合对象

delims  不支持EL  String    字符串的分割符,可以同时有分割符

varStatus  不支持EL   String 指定将代表当前迭代状态信息的对象保存到page这个web域中的属性名称

begin   支持EL    int      如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代

end     支持EL    int      参看begin属性的描述

step    支持EL    int      指定迭代的步长

var     不支持EL  String    指定将当前迭代到的元素保存到page这个web域中的属性名称

.&
4000
lt;c:url>
标签用于在JSP页面中构造一个URL地址,其主要目的是实现url重写。url重写就是将会话标识号以参数形式附加在URL地址后面

value    支持EL  String    指定要构造的URL

var     不支持EL String    指定将要构造出的URL结果保存到Web域中的属性名称

scope    不支持EL String    指定将要构造出的URL结果保存到哪个Web域中

.<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:

<c:catch [var="varName"]>nested actions</c:catch>

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:catch var="myex“ >

<%

10/0;

%>

</c:catch>

异常:<c:out value="${myex}" /><br />

异常 myex.getMessage:<c:out value="${myex.message}" /><br/>

异常 myex.getCause:<c:out value="${myex.cause}" /><br />

异常 myex.getStackTrace:<c:out value="${myex.stackTrace}"/>

.<c:redirect>标签用于将当前的访问请求转发或重定向到其他资源,它可以根据url属性所指定的地址,执行类似这个JSP标准标签的功能,将访问请求转发到其他资源;或执行response.sendRedirect()方法的功能,将访问请求重定向到其他资源。 

url    支持EL   String   指定要转发或重定向到的目标资源的URL地址

.<c:remove>用于删除数据

.<c:import>
检索一个绝对或相对 URL,然后将其内容暴露给页面

.<c:param>标签在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“�й�”后再附加到URL地址后面,这也就是使用<c:param>标签的最大好处。 
http://localhost:808/servlet/MyServlet?name=“中国”
示例:
<c:param name=“name” value=“中国" />
<%--使用标签 --%>
<%--set标签:保存数据(保存到域中)默认保存到page域 --%>
<c:set var="name"value="rose" scope="request"></c:set>

<%
String msg = null;
pageContext.setAttribute("msg",msg);
%>
${requestScope.name}
${msg }
<br/>
<%--out标签:获取数据(从域中)
default:当value值为null时,使用默认值
escapeXml:是否对value值进行转义,false,不转义,true,转义(默认)
--%>
<c:out value="${msg}"default="<h3>标题3</h3>" escapeXml="false"></c:out>

<hr/>

<%--if标签:单条件判断--%>
<c:if test="${emptymsg}">
条件成立
</c:if>

<hr/>
<%--choose标签+when标签+otherwirse标签: 多条件判断 --%>
<c:set var="score"value="86"></c:set>

<c:choose>
<c:whentest="${score>=90 && score<=100}">
优秀
</c:when>
<c:whentest="${score>=80 && score<90}">
良好
</c:when>
<c:whentest="${score>=70 && score<80}">
一般
</c:when>
<c:whentest="${score>=60 && score<70}">
及格
</c:when>
<c:otherwise>
不及格
</c:otherwise>
</c:choose>

<%-- forEach标签:循环--%>
<%
//List
List<Student>  list = newArrayList<Student>();
list.add(new Student("rose",18));
list.add(new Student("jack",28));
list.add(new Student("lucy",38));
//放入域中
pageContext.setAttribute("list",list);

//Map
Map<String,Student> map = new HashMap<String,Student>();
map.put("100",new Student("mark",20));
map.put("101",new Student("maxwell",30));
map.put("102",new Student("narci",40));
//放入域中
pageContext.setAttribute("map",map);
%>
<hr/>
<%--
begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
end="":    到哪个元素结束。默认到最后一个元素
step="" : 步长    (每次加几) ,默认1
items="": 需要遍历的数据(集合)
var="": 每个元素的名称
varStatus="": 当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)

--%>
<c:forEachitems="${list}" var="student" varStatus="varSta">
序号:${varSta.count} -姓名:${student.name } - 年龄:${student.age}<br/>
</c:forEach>

<hr/>

<c:forEachitems="${map}" var="entry">
${entry.key } - 姓名:${entry.value.name } - 年龄:${entry.value.age }<br/>
</c:forEach>
<hr/>
<%-- forToken标签: 循环特殊字符串--%>
<%
String str ="java-php-net-平面";
pageContext.setAttribute("str",str);
%>

<c:forTokensitems="${str}" delims="-" var="s">
${s }<br/>
</c:forTokens>
<%--redrict:重定向 --%>
<c:redirecturl="http://www.baidu.com"></c:redirect>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jstl 标签