JSTL详解

来源:互联网 发布:淘宝客服应聘个人简历 编辑:程序博客网 时间:2024/05/29 13:05

其实之前在用JSTL的时候还是比较懵逼的,虽然在列表页时通常都会用到foreach标签,但其实并没有真正的理解,这也是重新学习的理由。

简介

JSTL全称:JSP Standard Tag Library,即JSP标准标记库,它是一个开源的JSP标签库,由Apache在维护,封装了许多JSP应用程序通用的核心功能,因而使用广泛,JSTL由四个定制标签库(core、fmt、xml和sql)组成。其中,core提供了一些定制操作,通过限制作用域管理变量、实现迭代以及条件操作,它还提供了用来生成和操作URL的标记。fmt定义了用来格式化数据的操作,例如数字和时间的格式化输出。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。后两者实际上已经过时了。

使用

导入标签库

除了JSP内置的动作标签之外,使用其他的自定义标签库时,都需要

  • 添加相关依赖jar包
  • 在JSP页面使用taglib标签导入标签库,如下:
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
- 其中prefix的值可以是任意值,但约定俗成写成"c";- uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件

常用标签

1.set标签

<c:set var="xxx" value="yyy"/>  /**表示在pageContext中添加name为xxx,值为yyy的键值对**/
<c:set var="xxx" value="yyy" scope="session"/>  /**表示在session中添加name为xxx,值为yyy的键值对**/

2.out标签

<c:out value=”xxx”/>/**在页面中输出xxx字符串**/
<c:out var="aaa" value=”${xxx}” default=”yyy”/>/**在页面中输出xxx所指代的值,如果${xxx}不存在,则默认为yyy,aaa表示变量的名称**/
<%request.setAttribute("xxx","<script>javascript语句</script>");%><c:out value="${xxx}" default="xxx" escapeXml="false" />/**在escapeXml为false的情况下,"<"">"不会被转换,这就导致可能的JavaScript攻击。**/

3.remove标签

<c:remove var="xxx" scope="session"/>/**删除session中变量名为xxx的变量,还有一个scope属性,默认是all scopes。**/

4.url标签

<c:url value="/"/>/**输出"/项目名称/"**/<c:url value="/" var="x" scope="session"/>/**将上述变量赋值给变量x,作用域为session。**/<c:url value="/xxxServlet"><c:param name="username" value="abc"/><c:param name="password" value="123"/> /**输出:/项目名/xxxServlet?username=abc&password=123     如果参数中包含中文,那么会自动使用URL编码**/

5.foreach标签

<c:forEach var="i" begin="1" end="5">   Item <c:out value="${i}"/><p></c:forEach>/** var指定变量名,begin为变量起始值,end为变量终止值。**/
<%      List<String> names = new ArrayList<String>();      names.add("zhangSan");      names.add("liSi");      names.add("wangWu");      names.add("zhaoLiu");      pageContext.setAttribute("ns", names);  %>  <c:forEach var="item" items="${ns }">      <c:out value="name: ${item }"/><br/>  </c:forEach>  /**这里forEach中依然item作为变量名,需要被循环遍历的items是域对象中的ns,forEach下的out标签中输出item变量,该变量即为forEach中var声明的item。**/

6.if标签

<c:set var="salary" scope="session" value="${2000*2}"/><c:if test="${salary > 2000}">   <p>My salary is: <c:out value="${salary}"/><p></c:if>/**这里test需要是一个布尔表达式,只有当表达式值为true时,下面的代码才会被执行。**/