一.简介:
JSTL(Java Standard Tag Library) –Java标准标签库。SUN公司制定的一套标准标签库的规范。JSTL标签库,是由一些Java类组成的。
二.JSTL组成:
三、JSTL核心标签库:c标签JSTL –Core 核心标签库。 - 这是本部分的重点JSTL – I18N - 国际化标签库。Internationalization- I18NJSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。JSTL -Functions – 函数库。lJSTL- XML ,对XML的操作(同SQL标签)。
l 使用 JSTL 核心标签:• 如果你的 Web 项目是基于 JavaEE2.5 或以上的。可以在你项目的任意页面上通过 <%@ taglib 指令使用 JSTL 的核心标签库。• <%@ taglib uri = "http://java.sun.com/ jsp / jstl /core" prefix= "c" %>• uri 是引用标签库的资源定位符,并不代表一个实际的地址。• Prefix 是自定义的前缀。• 如果你的项目是 JavaEE2.5 以下的项目,必须在在你项目中的 lib 目录下,存在以下两个 jar 文件为:• Jstl.jar 、 standard.jar• 在上面的包中,存在着 jstl 的 tld 文件,用于描述 jstl 标签的属性、名称、资源等信息。程序就是通过这个 tld 文件找到相关 java 类以供运行的。• 然后再在任意的 JSP 页面通过指令导入 jstl .
<c:out> ${name} | 输出标签 |
<c:set> pageContext.setAttirbute(key,value,scope); | 声明标签 |
C:remove | 删除某个范畴内的数据 |
<c:if> | 判断c:else,c:elsfif |
<c:choose><c:when><c:otherwise> | 判断分枝c:if,c:else if c: |
<c:forEach> | 遍历 |
<c:forTokens> | 分隔 |
<c:import> | 导入其他资源,相当于动态包含共享同一个request |
<c:url> - | 重写url |
<c:redirect> | 重定向 response.sendRedirect(‘’..) |
1.JSTL标签-out:
<c:out value=…/>用于在页面上输出结果。
2. < c:set />- 声明一个变量< c:out value=“${requestScope. name }”/> - 将 request 中的 name 值输出< c:out value=“${ param .username }”/> - 用于将参数输出到页面上。< c:out value=“${name}” default=“hello”/> 从 page 到 application 开始查找,如果没有找到,就显示默认值 hello.另一种设置默认值的方式:• < c:out value=“${name}”>• Default-value- 默认值。• </ c:out >• 只有当要求的信息为 null 或不存在 时才会输出默认值。excapeXml 属性:默认值为 true , 用于将 html 等标签转换成 & lt ; 等转换元素,示例:<%String name="<font color='red'>Red</font>";pageContext.setAttribute (" name",name );%>< c:out value=“${name}” escapeXml = “ false ” ></ c:out > 不对 xml 或 html 进行转换,直接输出,这样就会在页面上看到红色的 Red 字符,因为浏览器会解析 html 数据。
3.JSTL if 标签
l < c:set /> 标签的作用如下:• 为 String 类型的命名变量设置值。• < c:set var =“ 变量名” value=“ 变量的值” scope=“ page|request|session|application ”/>• < c:set var =“name”value=“${param.name}”/> 直接从参数中取出数据给 name 赋值。• 如果变量为 JavaBean 则为这个 JavaBean 的属性设置值。• < c:set target=“JavaBean 的变量名” property=“ 设置的属性” value=“ 值” />• 示例:• < jsp:useBean id= "person" class= " cn.itcast.Person " ></ jsp:useBean >• < c:set target= " ${ pageScope.person }" property= "name" value= "Jack" />• < c:set target= " ${ pageScope.person } " property= "age" value= "99" />• 如果变量为 Map 则,给 Map 中的 key 设置值。• < c:set target=“ 代表 Map 的变量” property=“key”value=“value”/>, 示例:• < jsp:useBean id= "map" class= " java.util.HashMap " scope= "request" ></ jsp:useBean >• < c:set target="${ requestScope.map }"property= "name" value= "Jack" />• < c:out value="${requestScope.map.name}"/>
4. choose,when,otherwise :< c:if /> 用于实现 Java 语言中的 if 语句。它的语法如下:< c:if test=“ 逻辑表达式” var =“ 代表逻辑表达式值的命名变量” scope=../>示例:< c:if test=“${name !=‘ Jack’}”>当 name 的值为 Jack 时输出此行信息l </ c:if >上面的判断等价于下面的代码片段:if( pageContext.getAttribute (“name”)!=null &&!..equals(“Jack”)){• out.println (“…..”);}此标签经常使用,要掌握。
5. forEach :
这几个标签共同使用可以实现 Java 中的 if…else 语句的功能。< c:choose >< c:when test="${ empty param.name}">用户没有输入 name 参数</ c:when >< c:when test="${param.name=='Admin'}">${param.name} 是管理员</ c:when >< c:otherwise >用户是: ${param.name}</ c:otherwise ></ c:choose >使用 c:when 必须遵循以下语法规则:< c:when /> 和 < c:otherwise /> 不能单独使用,它必须位于 < c:choose 内。< c:otherwise /> 必须位于 c:when 之后。
forEach 用于遍历集合中的对像。基本语法:< c:forEach var =“ 迭代变量” item=“${ 集合名称 }” varStatus =“ 迭代下标变量” >迭代部分</ c:forEach >forEach 的 begin( 开始索引 ) 、 end( 结束索引 ) 、 step( 步长 ) 属性:< c:forEach begin=0 end=10 step=“2”>…</ c:forEach > 将输出 0,2,4,6,810
varStatus 属性,用于设置一个 javax.servlet.jsp.jstl.core.LoopTagStatus 类型的命名变量:它包含以下信息:count– 当前元素在集合中的序号,从 1 开始。index - 记录当前元素的下标,从 0 开始。first - 判断是否是第一个元素。Last -判断是否是最后一个元素。
6.
forTokens
遍历一个字符串:
下面通过jsp页面来演示JSTL核心标签库
< c:forTokens var = "v" items= " a,b,c,d,e,f " delims = "," >7. URL 相关的标签:< c:out value="${v}"></ c:out >< br /></ c:forTokens >按 ,( 逗号 ) 对字符串 ” a,b,c,d,e,f ” 进行分隔。
< c:import /> 包含其他 web 资源,功能类似与 < jsp:include /> (动态包含)。< c:import url =“web 资源 ”/>< c:url /> 按特定的方式重写 URL 。< c:url value=“ / aaa.jsp ”/> 总是以 / 开头,如果只使用 value 属性为直接使用或输出。< c:url value=“/…” var =“ someVar ”scope=“…”/> 也可以通过这样的方式将重写的 url 放到某个范围中,然后再取出来使用。< c:redirect /> 负责重定向。< c:redirect url =“ 重定向到的资源 ”/>在使用 < c:redirect 时可以带更多的参数:< c:redirect url =“/…”>< c:param name=“ someName ” value=“ someValue ”/></ c:redirect >
属性
类型
说明
value
Striing
资源地址信息
var
String
变量名
context
String
可以指定上下文根,默认为本项目的上下方根,也可以指定为其他项目的项目名。
scope
同上
…
使用c:url时,如果只使用value属性,则是直接将信息输出。如果声明了var属性,将不会输出结果而是将url地址信息的结果保存到此变量中。
四、I18N标签:
- 简介:
l 18N 是 Internationalization 的简称,因为 I 到 N 之间有 18 个字符所以叫 i18n 。在 java 的核心库当中,提供了对 i18n 的支持, java.util.Locale 类是最重要的 i18n 相关类。首先介绍一下 Locale 类:获取 Locale 类的实例,有以下几种方式:Locale ch = new Locale(“ zh ”,”CN”);Locale ch = Locale.CHINA ;或获取默认值:Locale zh = Locale.getDefault ();然后可以通过以下方法输出语言和国家:getLanguagegetCountry
- I18N-ResourceBundle类:
Java.util.ResourceBundle 类,用于管理和 Locale 相关的资源的功能。ResourceBundle 类提供了两个方法,用于创建 ResourceBundle 对像的静态工厂方法:getBundle (String baseName )— 通过此方法获取资源文件的名称getBundle (String baseName,Locale locale);参数中的 baseName 是资源文件的名称,资源文件通常以 properties 为扩展名。资源文件的命名规则如下:默认资源文件: resources.properties英文资源文件: resources_ en_US .properties中文资源文件: resources_ zh_CN .properties
-
ResourceBundle示例:
在网页上的使用(要导入<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>标签)步骤如下:1 、在 classpath 目录下建立一个资源文件为 message.properties 。2 、内容如下: name=Jack3 、书写一个 main 方法的类,并输入以下代码:4 、 ResourceBundle b = ResourceBundle. getBundle ("message");Stringname = b.getString ("name");System. err .println (name);此时你看到的输出是 Jack.5 、在 classpath 目录下,再建立一个文件 message_zh_CN.properties并输入以下内容: name= 杰克(注意转码)6 、重新执行第 4 步的代码 , 你将会看到输出的结果变成了:杰克。7 、这是因为它使用本地语言查找相关的资源文件,如果找不到就使用默认的,如果找到就使用本地的资源文件。