[Servlet&JSP] JSTL的使用
2015-12-17 16:02
786 查看
我们可以使用JSTL(JSP Standard Tag Library)来替换JSP中用来实现页面逻辑的Scriptlet,让网页上使用与HTML类似的标签,这会使得网页设计变得更加简单,可以随时调整页面而不用费心的修改Scriptlet。
核心标签库
提供条件判断、属性访问、URL处理及错误处理等标签。
格式标签库
提供数字、日期等的格式化功能,以及区域(Locale)、信息、编码处理等国际化功能的标签。
SQL标签库
提供基本的数据库查询、更新、设置数据源等功能的标签。
XML标签库
提供XML剖析、流程控制、转换等功能的标签。
5.函数标签库
提供用于字符串处理的自定义EL函数标签库
JSTL是另一个标准规范,本身并不在JSP的规范当中,所以必须另外下载实现。
JSTL下载
网址:http://tomcat.apache.org/taglibs/standard/
版本: Standard 1.1.2
配置
解压下载文件jakarta-taglibs-standard-1.1.2.zip,将lib目录下的jstl.jar和standard.jar复制到项目的WEB-INF/lib目录下。
使用
在JSP文件中使用taglib元素指定元素定义前置名称与uri引用。
前置标签设置了这个标签库在此JSP网页中的名称空间,以避免与其他标签库的标签名称发生冲突,惯例上使用JSTL核心标签库时,会使用c作为前置名称。uri则告知容器,如何引用JSTL标签库实现。
1
一个实例如下:
2
一个实例如下:
3
用于通过循环来产生一连串的输出。
4
用于将某个字符串拆分为数个字符(Token)。例如:
5
如果要在发生异常的页面直接捕捉异常对象,可以使用将可能发生异常的网页段落包起来。如果异常发生了,这个异常对象会设置给var属性所指定的名称,这样才有机会使用这个异常对象。例如:
include指示元素:
在JSTL中,有个
除了可以导入当前web应用程序中的网页之外,该标签还可以导入非目前web应用程序中的网页。例如:
其中charEncoding用来指定要导入的网页的编码,如果要被导入的网页编码与目前的网页编码不同,就必须使用charEncoding属性加以指定,导入的网页才不至于产生乱码。
例如,用户登录后再session范围内设置一个“login”属性,代表用户已经登录,则可以按如下编写:
这段标签的作用相当于
也可以使用EL来设置value,例如:
以上代码与直接写
也可以使用JSTL的
如果要在URL上携带参数,则可以搭配
JSTL简介
JSTL提供的标签库可以分为五个大类。核心标签库
提供条件判断、属性访问、URL处理及错误处理等标签。
格式标签库
提供数字、日期等的格式化功能,以及区域(Locale)、信息、编码处理等国际化功能的标签。
SQL标签库
提供基本的数据库查询、更新、设置数据源等功能的标签。
XML标签库
提供XML剖析、流程控制、转换等功能的标签。
5.函数标签库
提供用于字符串处理的自定义EL函数标签库
JSTL是另一个标准规范,本身并不在JSP的规范当中,所以必须另外下载实现。
JSTL下载
网址:http://tomcat.apache.org/taglibs/standard/
版本: Standard 1.1.2
配置
解压下载文件jakarta-taglibs-standard-1.1.2.zip,将lib目录下的jstl.jar和standard.jar复制到项目的WEB-INF/lib目录下。
使用
在JSP文件中使用taglib元素指定元素定义前置名称与uri引用。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
前置标签设置了这个标签库在此JSP网页中的名称空间,以避免与其他标签库的标签名称发生冲突,惯例上使用JSTL核心标签库时,会使用c作为前置名称。uri则告知容器,如何引用JSTL标签库实现。
流程处理标签
1 <c:if>
标签
一个实例如下:<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>登录页面</title> </head> <body> <c:if test="${param.name=='abc' && param.password=='123'}"> <h1>${param.name} 登录成功</h1> </c:if> </body> </html>
<c:if>标签中的test属性中可以设置EL表达式或JSP操作数(
<%= %>),如果表达式的结果为true,则会将
<c:if>主体输出。
2 <c:choose>
、<c:when>
、<c:otherwise>
标签
一个实例如下:<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <jsp:useBean id="user" class="club.chuxing.User" /> <jsp:setProperty name="user" property="*" /> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>登录页面</title> </head> <body> <c:choose> <c:when test="${test.valid}"> <h1> <jsp:geProperty name="user" property="name" />登录成功 </h1> </c:when> <c:otherwise> <h1>登录失败</h1> </c:otherwise> </c:choose> </body> </html>
<c:when>和
<c:otherwise>必须放在
<c:choose>之中。
<c:choose>中可以有多个
<c:when>标签,此时会从上往下进行测试,如果有个
<c:when>的test运算结果为true,就输出其主体内容,之后的
<c:when>就不会做测试,如果若有的
<c:when>经测试都不成立,则会输出
<c:otherwise>的内容。
3 <c:forEach>
标签
用于通过循环来产生一连串的输出。<c:forEach>标签的items属性可以是数组或Collection对象,每次回循序读取数组或Collection对象中的一个元素,并制定给var属性所设置的变量,之后就可以在
<c:forEach>标签主体中,使用var属性所设置的变量来取得该元素。例如:
<body> <table> <c:forEach var="message" items="${messageService.messages}"> <tr> <td>${message.name}</td><td>${message.text}</td> </tr> </c:forEach> </table> </body>
4 <c:forTokens>
标签
用于将某个字符串拆分为数个字符(Token)。例如:<body> <c:forTokens var="token" delims="," items="Java,C++,JavaScript"> ${token}<br /> </c:forTokens> </body>
5 <c:catch>
标签
如果要在发生异常的页面直接捕捉异常对象,可以使用将可能发生异常的网页段落包起来。如果异常发生了,这个异常对象会设置给var属性所指定的名称,这样才有机会使用这个异常对象。例如:<body> <c:catch var="error"> ${param.a} + ${param.b} = ${param.a + param.b} </c:catch> <c:if test="${error != null}"> <br /><span style="color:red;">${error.message}</span> <br />${error} </c:if> </body>
网页导入、重定向标签
之前学过了两种包括其他JSP网页至目前网页的方法,一个是include指示元素,另一个时<jsp:include>标签。用法如下:
include指示元素:
<%@include file="/WEB-INF/jspf/header.jspf"%>
<jsp:include>标签:
<jsp:include page="add.jsp"> <jsp:param name="a" value="1" /> <jsp:param name="b" value="2" /> </jsp:include>
在JSTL中,有个
<c:import>标签,可以视作是
<jsp:include>标签的加强版,它可以在运行时动态导入另一个网页,也可以搭配
<c:param>在导入另一网页时带有参数,例如:
<c:import url="add.jsp"> <c:param name="a" value = "1" /> <c:param name="b" value = "2" /> </c:import>
除了可以导入当前web应用程序中的网页之外,该标签还可以导入非目前web应用程序中的网页。例如:
<c:import url="http://chuxing.club" charEncoding="utf-8" />
其中charEncoding用来指定要导入的网页的编码,如果要被导入的网页编码与目前的网页编码不同,就必须使用charEncoding属性加以指定,导入的网页才不至于产生乱码。
<c:redirect>标签的作用如同sendRedirect()方法,如果重定向时需要参数,也可以通过
<c:param>来设置。
<c:redirect url="add.jsp"> <c:param name="a" value = "1" /> <c:param name="b" value = "2" /> </c:redirect>
属性处理与输出标签
JSP的<jsp:setProperty>功能有限,只能用来设置JavaBean的属性,如果只是要在page、request、session、application等范围内设置一个属性,或者想要设置Map对象的键与值,则可以使用
<c:set>标签。
例如,用户登录后再session范围内设置一个“login”属性,代表用户已经登录,则可以按如下编写:
<c:set var="login" value="abc" scope="session" />
这段标签的作用相当于
<% session.setAttribute("login", "abc"); %>
也可以使用EL来设置value,例如:
<c:set var="login" value="${user}" scope="session" />
<c:set>标签也可以将value的设置改为主体的方式,在所要设置的属性值冗长时,采用主体的方式会比较容易编写,例如:
<c:set var="details" scope="session"> abc,chuxing.club,abc.chuxing.club </c:set>
<c:set>标签不设置scope时,就会从page、request、session、application的范围寻找属性名称,如果在某个范围内找到属性名称,则在该范围设置属性。如果所有范围都没有找到属性名称,则会在page范围内添加属性。如果要移除某个属性,则可以使用
<c:remove>标签。例如:
<c:remove var="login" scope="session" />
<c:set>标签也可以直接用来设置JavaBean或Map对象的键值,此时必须使用target属性进行设置,例如:
<c:set target="${user}" property="name" value="${param.name}" />
<c:out>标签可以用来输出指定的文字。例如:
<c:out value="${param.message}">
以上代码与直接写
${param.message}的区别在于,
<c:out>标签会自动将角括号、单引号、双引号等字符用替代字符替换,这个功能是
<c:out>标签的escapeXml属性来控制的,默认为true;如果设置为false,就不会做字符的替换。还可以使用default属性设置EL运算结果为null时的默认显示值。
<c:out value="${param.a}" default="0" />
URL处理标签
response的encodeURL()方法可以用来做URL重写,在用户关闭Cookie功能时,仍可以继续利用URL重写来维持使用session进行会话管理。也可以使用JSTL的
<c:url>,它会在用户关闭Cookie的功能时,自动用Session ID做URL重写。
<body> <a href="<c:url value='count.jsp' />">升序</a> </body>
如果要在URL上携带参数,则可以搭配
<c:param>标签,参数将被编码后附加在URL上,例如,就以下这个片段而言,最后的URL将成为
some.jsp?name=chu+xing。
<c:url value="some.jsp"> <c:param name="name" value="chu xing" /> </c:url>
相关文章推荐
- JVM监控工具:jps、jstat、jinfo、jmap、jhat、jstack使用介绍
- JavaScript判断数据类型
- ExtJS5 - 认识MVVM
- js中的double
- JSON介绍
- js获取网页高度(详细整理)
- 如何学习javascript
- JS 模板引擎 Handlebars.js 中文说明
- JavaScript数据类型
- JS订阅方法
- javascript对象之javascript数组
- JS实现alert中显示换行的方法
- Json序列化和反序列化之jackson
- JavaScript中Function函数与Object对象的关系
- phonegap+百度地图导航(JS版)
- js回车监听按钮事件(火狐IE 兼容)
- WdatePicker.js的使用方法 帮助文档 使用说明(时间控件)
- ExtJS发送POST请求 参数格式为JSON
- ExtJS清除表格缓存
- Javascript操作DOM常用API总结