jsp 教程(五) — jstl

简介:
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}" />


 
 
相关文章
|
7月前
|
Java
JSP 教程 之 JSP 国际化 2
**JSP教程:国际化(i18n)与本地化(l10n)**涉及根据用户语言和地区展示内容。关键概念包括区域标识(如&quot;en_US&quot;),`Locale`对象用于检测语言和国家,如`getCountry()`返回地区码,`getDisplayCountry()`显示用户友好的国家名,`getLanguage()`获取语言码,`getDisplayLanguage()`显示语言名,以及`getISO3Country()`和`getISO3Language()`提供3字母缩写。这些方法帮助创建适应不同文化的网站。
63 4
|
7月前
|
Java
JSP 教程 之 JSP 国际化 3
**JSP教程:国际化简述** 了解i18n(国际化)和l10n(本地化),涉及根据用户语言和地区展示内容。区域用如&quot;en_US&quot;标识。`Locale`对象关键方法包括:`getCountry()`显示国家代码,`getDisplayCountry()`显示国家名称,`getLanguage()`和`getDisplayLanguage()`分别用于语言。
52 1
|
7月前
|
自然语言处理 Java 容器
JSP 教程 之 JSP 国际化 1
**JSP教程:国际化简述** 了解关键概念:i18n(国际化)为用户提供多语言版本,l10n(本地化)适应区域文化差异,如印度语版网站。区域标识如&quot;en_US&quot;。JSP利用request的locale属性显示相应版本。通过`request.getLocale()`获取用户区域。教程深入探讨全球化网站的实现。
71 0
|
5月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
6月前
|
安全 Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+jsp实现的健身房管理系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术实现的健身房管理系统。随着健康生活观念的普及,健身房成为日常锻炼的重要场所,高效管理会员信息、课程安排等变得尤为重要。该系统旨在通过简洁的操作界面帮助管理者轻松处理日常运营挑战。技术栈包括:JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Shiro、Spring Boot 2.0等。系统功能覆盖登录、会员管理(如会员列表、充值管理)、教练管理、课程管理、器材管理、物品遗失管理、商品管理及信息统计等多方面。
|
7月前
|
Java
JSP 教程 之 JSP 国际化 6
**JSP教程-JSP国际化**涉及i18n(页面按访客语言显示不同版本)和l10n(适应不同地区文化)。区域如&quot;en_US&quot;代表美国英语。使用`NumberFormat`进行区域特定货币格式化,
65 4
|
7月前
|
Java
JSP 教程 之 JSP 国际化 7
JSP教程讲解了国际化(i18n)和本地化(l10n),涉及根据用户语言和国家显示内容。区域如&quot;en_US&quot;定义文化与语言。示例代码演示了如何用`NumberFormat`和`getLocale()`格式化区域特定的百分比,展示标题和格式化后的百分比值。
85 3
|
7月前
|
自然语言处理 Java
JSP 教程 之 JSP 国际化 4
JSP 国际化涉及i18n(根据不同用户语言显示内容)和l10n(适应不同地区文化)。区域标识如&quot;en_US&quot;指美国英语。设置`Content-Language`响应头(如`es`为西班牙语)和使用HTML字符实体(如`ñ`、`¡`)确保正确显示多语言内容。示例代码展示如何设置响应内容类型为西班牙语并输出带特殊字符的标题。
63 3
|
7月前
|
Java
JSP 教程 之 JSP 国际化 5
JSP教程讲解了国际化(i18n)和本地化(l10n),涉及根据用户语言和国家展示内容。区域如&quot;en_US&quot;定义文化与语言。示例代码演示了如何利用`java.text.DateFormat`按用户区域(通过`request.getLocale()`获取)格式化日期和时间,展示本地化日期。
53 2
|
7月前
|
缓存 Java
JSP 教程 之 JSP 调试 10
**JSP调试技巧:**利用JDB日志记录服务跟踪问题;查看HTTP头解决客户端/服务器交互异常;浏览器查看原始页面内容排查格式错误;使用Shift-Reload/Shift-Refresh强制刷新,防止缓存影响调试。
41 3