全国咨询热线:400-618-4000

Java培训之JSTL标签库介绍

创建时间:2016年06月29日17时46分 来源:传智播客Java培训学院

JSTL标签库介绍

1.什么是jstl

JSTL(JSP Standard Tag Library,jsp标准标签库)是Apache对EL表达式的扩展,也就是说JSTL依赖EL表达式。JSTL是标签语言,使用起来非常方便。但是它不是jsp内置的标签,所以用的时候需要我们自己导包,以及指定标签库。
如果你使用Myeclipse开发javaweb,那么把项目发布到Tomcat时,你会发现,Myeclipse会在当前工程的lib目录下存放jstl的jar包,如果没有使用Myeclipse开发,那么就需要自己导入这个jstl的jar包:jstl-1.2.jar。

2.jstl的标签库

Jstl标签库一共包含了四大标签库:
l core:核心标签库,这是我们学习的重点;
l fmt:格式化标签库,在这个标签库中,我们只需要学习两个标签即可;
l sql:数据库标签库,这个标签库已经过时,本文档不再对其进行介绍;
l xml:xml标签库,这个标签库已经过时,本文档不再对其进行介绍。

3.导入标签库

除了jsp动作标签外,使用其他第三方的标签都需要做以下两件事:
l 导入jar包;
l 在使用标签的jsp页面中使用taglib指令导入标签库。
例如,在jsp页面导入jstl的核心标签库:
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>,其中:
l prefix="c":指定标签库的前缀,这个前缀可以赋任意的值,但大家都会在使用core标签库时指定前缀为c;
l uri="http://java.sun.com/jsp/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件。

4.core标签库常用标签

4.1 out标签
out标签在jsp页面使用,格式为:<c:out/>,表示向浏览器端输出。out标签有如下三个属性:
l value:表示向浏览器输出的的值,可以是字符串常量,例如:<c:out value=”aaa”/>,也可以是EL表达式,例如:<c:out value=”${aaa}”/>;
l default:当输出的内容为null时,会输出default指定的值;
l escapeXml:当escapeXml的值为false,表示不会转义“<”、“>”,这样就有可能会受到JavaScript攻击,值为true时,会对以上符号进行转义,它的默认值就是true。
下面我们通过一个小例子来练习使用out标签,如下:
(1)对web应用Example10下的index.jsp页面进行编辑,主要代码如例1-1所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
... ...
<body>
    <%
     //向request域中添加域属性
     request.setAttribute("code", "<script>alert('hello');</script>");
     %>
     <c:out value="${code }" escapeXml="false"></c:out>
</body>
例1-1中,首先导入核心标签库,然后向request域中存放数据,存放的数据的值为:“<script>alert(‘hello’);</script>“,如果使用out标签输出时不对特殊字符进行转义,那么浏览器端就会弹出一个对话框。
(2)在浏览器端访问index.jsp页面,浏览器端显示结果如图1-1所示:

图1-1 浏览器显示结果
图1-1中,由于没有对特殊字符进行转义所以,浏览器在访问时将value的值当做JavaScript脚本输出,弹出对话框。
(3)现在将例1-1中,out标签的escapeXml属性设置为true,然后再访问该页面,浏览器显示结果如图1-2所示:

图1-2 浏览器显示结果
图1-2中,out标签将值按原样输出。
4.2 set标签
set标签的作用就是设置域的属性,其用法格式如:<c:set var=”xxx” value=”xxx” scope=”xxx”/>,其中三个属性的作用分别如下:
l var:定义变量的名字;
l value:表示变量的值,可以是EL表达式;
l scope:表示将设置的变量存放在哪个域中,默认是page域,可选值为:page,request,session,application。
下面通过一个小案例来练习如何使用set标签,如下:
(1)在Example10的WebRoot目录下新建一个jsp文件,名为set.jsp,主要代码如例1-2所示:
例1-2 set.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
... ...
<body>
    <c:set var="arr" value="<script>alert('hello');</script>"></c:set>
    <c:out value="${arr}"></c:out>
</body>
例1-2中,<c:set>标签的作用等同于例1-1中的request.setAttribute()方法。
(2)重新启动服务器,在浏览器端访问set.jsp页面,浏览器显示结果如图1-3所示:

图1-3 浏览器显示结果
4.3 remove标签
remove标签的作用是删除域中的数据,其在jsp页面中的用法:<c:remove var=”xxx” scope=”xxx”/>,其中这两个属性的作用如下:
l var:指定删除变量的名字;
l scope:指定从哪个域中删除指定的变量,可选值为:page,request,session,application;如果没有指定scope的值,则表示删除所有域中的名字为指定值的变量,如果指定了scope的值,那么将删除指定域中的指定变量。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee