jsp 教程(五) — jstl

  1. 云栖社区>
  2. 博客>
  3. 正文

jsp 教程(五) — jstl

科技小能手 2017-11-13 00:48:00 浏览611
展开阅读全文
Technorati 标签: jstl,core

整体概览:

    jstl 标签库,按其功能划分,有以下五大类标签:核心标签库(core),xml标签库,国际化标签库(i18n),sql 标签库,函数标签库(fn),其相关的 uri 和前缀如下,

uri 和 前缀如下表:

标签库 uri prefix
Core http://java.sun.com/jsp/jstl/core c
XML http://java.sun.com/jsp/jstl/xml x
I18N(国际化) http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
Functions http://java.sun.com/jsp/jstl/functions fn

   另外对于各个标签能实现的功能,简略如下:

标签 core xml i18n sql functions
子功能 1、操作变量 
2、流程控制 
3、操作 url 
4、其他
1、核心 
2、流程控制 
3、字符转换
1、本地化 
2、格式化信息 
3、数据日期的格式化
1、database(sql) 1、集合的长度 
2、操作字符串

    在使用各种标签之前,要加上指令标签 taglib,<%@ taglib uri="..." prefix="..." %>,如 core 标签的使用:

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

    这一次主要谈一下如何使用 jstl 里 core 标签,其他的标签的使用将会后续谈到。

一、core 标签的概览

    core 标签库里有 13 个标签,根据其功能来划分,可以划分为下面几类:

子功能 标签

操作变量

remove 
set

流程控制

choose 
    when 
    otherwise 
forEach 
forTokes 
if

操作 url

import 
    param 
redirect 
    param 
url 
    param

其他

catch 
out

    下面具体谈一下各类子功能标签的使用

二、core 标签——操作变量

    <c:set> 用于将变量存储在 JSP 内或 javaBean 属性里。<c:set> 的各种属性介绍如下:

属性名 必需? 数据类型 描述
var false java.lang.String 变量名
value false java.lang.String 赋值 var 的值
target false java.lang.String 目标对象,必须是一个 javaBean 对象或 java.util.Map 对象
property false java.lang.String 属性名(目标对象必须有对应的setXxx()方法
scope false java.lang.String 作用域,默认为 page

    Demo如下:

//示例如下
<c:set value="张三" var="name" scope="session"></c:set>
<c:set var="name" scope="session">李四</c:set>
<c:set value="赵五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>

    对应的看一下<c:remove> 标签,其作用刚好和<c:set>相反,用来删除某作用域内的一个变量。<c:remove>各种属性描述如下:

属性名 必须? 数据类型 描述
var true java.lang.String 变量名
scope false java.lang.String 作用域

    Demo:

    <c:remove var="name" scope="session"/>
 

二、core 标签 —— 流程控制

    1、<c:if> 标签,其功能就像java 里的 if 语句,使用方法如下,<c:if>各属性描述如下表:

    <c:if test="条件表达式" var="name" [scope="page|request|session|application"]></c:if>

属性名 必须? 数据类型 描述
test true boolean 条件判断语句,为true 时执行标签体中的代码
var false java.lang.String 保存条件表达结果的变量名,类型为 Boolean
scope false java.lang.String 作用域

    Demo:

<c:if test="${person.name == '张四'}">
    <c:set var="name" value="张三"/>
    ...
</c:if>

    2、<c:choose>、<c:when> 和 <c:otherwise>,这三个标签用于排他性选择判断,类似于 java 里的 switch 语句。使用方法如下,各属性的描述如下表:

<c:choose>
     <c:when test="条件表达式1" >
         ...
     </c:when>
     <c:when test="条件表达式2"  >
         ...
     </c:when>
         <c:when test="条件表达式3"  >
         ...
     </c:when>
     <c:otherwise>
         ...//以上表达式都不成里时执行的语句
     </c:otherwise>
 </c:choose>

    (1)<c:choose> ,<c:otherwise>内没有任何属性

<c:when>
属性名 必须? 数据类型 描述
test true boolean 当条件表达式为 true 时,才执行标签体的代码块

    Demo:

<c:choose>
     <c:when test="${person.name == ’张三’}" >
         我的名字叫 张三。
     </c:when>
     <c:when test="${person.name == ’李四’}" >
         ...
     </c:when>
         <c:when test="${person.name == ’王五’}" >
         ...
     </c:when>
     <c:otherwise>
         ...
     </c:otherwise>
 </c:choose>

    3、<c:forEach> 和 <c:forTokens> 都是用于迭代和循环遍历。当中<c:forEach> 有以下两种使用方式:

    (1)知道具体的循环次数,类似于java 里的for 循环。可以用以下方式

<c:forEach begin="begin" end="end" [var="varName"] [varStatus="varStatusName"][step="step"]>
    <!-- 标签体 -->
</c:forEach>

    (2)不知道具体迭代的次数,可以用以下方式,类似于 java 里的 foreach 循环:

<c:forEach begin="begin" end="end" [var="varName"] [varStatus="varStatusName"][step="step"]>
    <!-- 标签体 -->
</c:forEach>

    <c:forEach>各属性的描述如下:

属性名 必须? 数据类型 描述
items false java.lang.Object 要进行迭代的 Collection 对象
begin false int 如果指定了属性“items”,则从items 的索引为 begin 的元素开始迭代;如果没有指定items,则以begin 作为迭代的初始索引,
end false int 如果指定了属性“items”,则迭代到 items 的索引为 end 的元素;如果没有指定items,则以end作为迭代的终止索引,
step false int 迭代的步长
var false java.lang.String 在第一种使用方式里指当前迭代迭代对象的索引值;在第二种使用方式了,指当前迭代的对象。
varStatus false java.lang.String 代表迭代的状态,可用来访问迭代自身的信息,是javax.servlet.jsp.jstl.core.LoopTagStatus 对象。

    Demo:

<c:forEach var="people" items="${sessionScope.peoples}">
    ...
    <c:out value="${people.name}" />
    ...
</c:forEach>

    现在在来谈以下<c:forTokens>,其作用与<c:foreach>很相似,不同的是在 <c:forToken> 还有一个属性“delims”,进行分隔的点,示例如下:

<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
   <c:out value="${name}"/>
</c:forTokens>

    输出如下:Zara nuha roshy

三、core 便签 —— 操作 url

    在 JSP 里,<c:import><c:url><c:redirect><c:param>可实现 url 资源的连接。导入、重定向等处理。

    1、<c:import> 把其他静态或动态文件包含到 JSP 页面。与<jsp:include>的区别是后者只能包含同一个web应用中的文件,前者可以包含其他web应用中的文件,甚至是网络上的资源。语法格式如下:

    <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>

    各属性的描述如下:

属性名 必须? 数据类型 描述
url true java.lang.String 待导入资源的URL
var false java.lang.String 存放资源内容的变量(String)
scope false java.lang.String 作用域,默认是 page
varReader false java.lang.String 用于读取资源,其参数类型是reader
context false java.lang.String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。
charEncoding false java.lang.String 资源的字符编码

    主要有以下两种用法:

    (1)资源的内容使用String对象向外暴露,意思是把文件内容以String 类型存入指定的变量 var。

<c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]> 
    <c:param name="name" value="value">  
</c:import> 

    (2)资源的内容使用Reader对象向外暴露。

<c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"]> 
    <c:param name="name" value="value">  
</c:import> 

     Demo:

<c:import url="http://www.baidu.com" var="data"/>
<!-- 加上下面这一行,会输出html 代码 -->
<c:out value="${data }"></c:out>

    2、<c:redirect> 该标签用来实现请求的重定向。例如,对用户输入的用户名和密码进行验证,不成功则重定向到登录页面。或者实现Web应用不同模块之间的衔接,用法如下:

<c:redirect url="url" [context="context"]>
    <c:param name="name" value="value">
</c:redirect>

    各属性描述如下:

属性名 必须? 数据类型 描述
url false java.lang.String 要被导向的资源的 url
context false java.lang.String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。

    Demo:

<c:redirect url="login.jsp">
     <c:param name="username">yelang</c:param>
     <c:param name="password">123456</c:param>
</c:redirect>

   3、<c:url> 用于动态生成一个 String 类型的URL,可以同<c:redirect>标签共同使用,也可以使用HTML的<a>标签实验超链接。语法如下:

<c:url value="value" [var="name"] [scope="..."] [context="context"]>
    <c:param name="name" value="value">
</c:url>

    各属性描述如下:

属性名 必须? 数据类型 描述
var false java.lang.String 存放 url  的字符串变量
scope false java.lang.String 作用域
value false java.lang.String 被处理的 url
context false java.lang.String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。

    Demo:

 
<h4>使用url标签生成一个动态的url,并把值存入session中.</h4>
<c:url value="/login.jsp" var="url" scope="session" />
<a href="${url}">首页

    最后补充一下,在<c:redirect><c:url><c:impot> 的标签体内都可以使用 <c:param>,其作用都是一样的,就是向导入的 url 传入参数,例如在重定向至登录页面时,可传入用户名和密码(参数),当然实际情况我们很少会这样做。现在了解一下<c:param>的用法和属性,

    <c:param name="name" value="value">

属性名 必须? 数据类型 描述
name true java.lang.String 参数名
value false java.lang.String 参数的值

四、core 便签 —— 其他 catch 和 out

    <c:out> 用来显示数据对象(字符串、表达式、文本、session变量等)的内容或结果,等同于使用Java脚本:<% out.println("hello") %>  <% =表达式 %>。<c:out>语法格式如下:

    <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

    各属性描述如下:

属性名 必须? 数据类型 描述
value true java.lang.String 标签输出的值,可以是常量、变量、表达式或 el 表达式
default false java.lang.String 默认值
escapeXml false java.lang.String 是否转换特殊字符,默认为 true

    字符转换规则如下:

字符 转换后的实体代码
< <
> >
' &#039;
" &#034;
& &amp;

    Demo :

<c:out value="2 &lt 5" escapeXml="false" default="默认值" />
//输出:2 < 5 
<c:out value="2 &lt 5" escapeXml="true" default="默认值" />
//输出: 2 &lt 5

   2、<c:catch>主要用来处理产生错误的异常状况,并且将异常信息储存起来。使用格式如下:

<c:catch [var="varName"] >
    … 欲抓取错误的部分
</c:catch>

    属性描述如下:

属性名 必须? 数据类型 描述
var false java.lang.String 用来储存异常信息的变量。

   Demo:

<c:catch var="error_Message">
    <%
    String eFormat = "not number";  
    int i = Integer.parseInt(eFormat);
    %>
    </c:catch>
<c:out value="${error_Message}" />



网友评论

登录后评论
0/500
评论
科技小能手
+ 关注