jstl配置和基本使用

JSTL使用入门

(2009-09-11 08:15:53)
转载
标签:

jstl

前台

小姝

分类:技术分享

 这几天ZOS登不上去,索性好好用这时间完善一下前台,框架还是选择了MVC,然后想想干脆用jstl标签输出吧,这样页面可以做得比较漂亮,代码也少。以前学的不深,正好借这个机会再学了一下jstl

 

JSP标准标记库(JSP Standard Tag Library,JSTL)是一个实现Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML操作以及数据库访问。

JSTL 1.0 有四个定制标记库:core、format、xml 和 sql.

1.core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。

2.format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。

3.xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据。

4.sql 库定义了用来查询关系数据库的操作。

 

 

一、表达式操作

 (一) 1 EL 表达式 :

用美元符号($)定界,内容包括在花括号({})中,eg:${value}

  EL的存取器:使用点运算符(.)和方括号运算符([]).

1)点运算符通常用于访问对象的特性。例如,在表达式 ${user.firstName} 中,使用点运算符来访问 user 标识符所引用对象的名为 firstName 的特性。

2)方括号运算符用来检索数组和集合的元素。在数组和有序集合的情况下,把要检索的元素的下标放在方括号中。对于实现 java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。在方括号中指定键,并将相应的值作为表达式的值返回。

3)点运算符和方括号运算符可能实现某种程度的互换

 

2.EL运算符

1)算术运算符: +、-、*、/(或 div)和 %(或 mod)

2)关系运算符: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)

3)逻辑运算符: &&(或 and)、||(或 or)和 !(或 not)

4)验证运算符: empty

<c:out>是写数据,<c:set>是保存数据到内存中,<c:remove>是删除数据,<c:catch>是抛出错误信息。

 

(二)

1.<c:out>

作用:用于显示数据的内容。

语法1:没有本体内容

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

语法2:有本体内容(但不会输出到客户端)

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

default value

</c:out>

属性说明:

value:需要显示出来的值。

default:如果value的值为null时,则显示default指定的值。

escapeXml:是否转换特殊字符,默认为true。即默认会将<、>、’、” 和 & 转换为 &lt;、&gt;、&#039;、&#034和&amp。如果设为      false,则不进行转换。

 

2.<c:set>

作用:用于将变量的值存储在JSP范围中或JavaBean的属性中。

语法1:将value的值存储在范围为scope的varName变量中

<c:set value="value" var="varName" [scope="{page|request|session|application}"] />

语法2:将本体内容的数据存储在范围为scope的varName变量中

<c:set var="varName" [scope="{page|request|session|application}"] >

...本体内容

</c:set>

语法3:将value的值存储在target对象的propertyName属性中

<c:set value="value" target="target" property="propertyName" />

语法4:将本体内容的数据存储在target对象的propertyName属性中

<c:set target="target" property="propertyName">

...本体内容

</c:set>

属性说明:

value:要被存储的值。

var:欲存入的变量名称。

scope:var变量的JSP范围。默认为page范围。

target:为一JavaBean或Map对象。

property:指定的target对象的属性。

 

3.<c:remove>

作用:移除变量。

语法:<c:remove var="varName" [scope="{page|request|session|application}"] />

属性说明:

var:要移除的变量。

scope:var变量所在的JSP范围,默认为page范围。

 

4.<c:catch>

作用:用于处理产生错误的异常情况,并将错误信息存储起来。

语法: <c:catch [var="varName"] >

...欲抓取错误的部分

</c:catch>

属性说明:

var:将错误信息存储在指定的变量中,可以通过该变量获取错误信息。

 

二、流程控制

1.<c:if>

作用:类似if判断语句,用于表达式判断。

语法1:没有本体内容

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />

语法2:有本体内容

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />

...本体内容

</c:if>

属性说明:

test:当该属性中的表达式运算结果为true,则会执行本体内容,为false则不执行,该标签必须要有test属性。

var:存储test的运算结果,为true或false。

scope:var变量的JSP范围。

 

2.<c:choose>、<c:when>、<c:otherwise>

作用:这三个标签必须组合使用,用于流程控制。

范例:

<c:choose>

<c:when test="${condition1}">

condition1为true

</c:when>

<c:when test="${ condition2}">

condition2为true

</c:when>

<c:otherwise>

condition1和condition2都为false

</c:otherwise>

</c:choose>

范例说明:当condition1为true时,会显示“condition1为true”;当condition1为false且condition2为true时,会显示“condition2为true”,如果两者都为false,则会显示“condition1和condition2都为false”。

注意:若condition1和condition2的运算结果都为true时,此时只会显示"condition1为true"。

限制说明:

a.<c:when>和<c:otherwise>标签必须在<c:choose>和</c:choose>之间使用。

b.在同一个<c:choose>中,<c:otherwise>必须是最后一个标签,且只能有一个<c:otherwise>标签。<c:when>可以有多个。

c.在同一个<c:choose>中,当所有<c:when>的test都为false时,才执行<c:otherwise>的本体内容。

 

三、迭代操作

1.<c:forEach>

作用:为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。

语法1:迭代一个集合对象中的所有成员

<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />

...本体内容

</c:forEach>

语法2:迭代指定次数

<c:forEach [var="varName"] [varS tatus="varStatusName"] begin="begin" end="end" [step="step"]>

...本体内容

</c:forEach>

属性说明:

items:被迭代的集合对象。

var:存放当前指到的集合对象中的成员。

varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员     是否为第一个成员;last:当前指到的成员是否为最后一个成员)。

begin:迭代开始的位置,默认为0。

end:迭代结束的位置,默认为最后。

step:每次迭代的间隔数,默认为1。

范例:

<%

int atts[] = {1,2,3,4,5,6,7,8,9,10};

request.setAttribute("atts", atts);

%>

<c:forEach items="${atts}" var="item" begin="0" end="9" step="1" >

${item}</br>

</c:forEach>

此标签也可以用于普通的循环控制,与for循环一样。如:

<c:forEach begin="1" end="10" var="item" >

${item}</br>

</c:forEach> 

 

2.<c:forTokens>

作用:用指定分隔符分隔一字符串,并迭代分隔后的数组。

语法: <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"]    [end="end"] [step="step"] >

本体内容

</c:forTokens>

属性说明:

items:被分隔并迭代的字符串。

delims:用来分隔字符串的字符。

var:存放当前指到的成员。

varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员     是否为第一个成员;last:当前指到的成员是否为最后一个成员)。

begin:迭代开始的位置,默认为0。

end:迭代结束的位置,默认为最后。

step:每次迭代的间隔数,默认为1。

范例1:

<c:forTokens items="A,B,C,D,E" delims="," var="item" >

${item}

</c:forTokens>

用“,”号分隔字符串,并迭代输出分隔后的字符串数组,输出结果为“ABCDE”。

范例2:

<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >

${item}

</c:forTokens>  

delims中指定了三个分隔符“,”、“;”和“-”,可见我们一次可以设定所有想当做分隔字符串用的字符。输出结果依然为“ABCDE”。

 

四、URL操作

1.<c:import>

作用:将其他静态或动态文件包含到本身JSP网页中。不但可以包含同一个web application下的文件,还可以包含其他web application或其他网站的文件。

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

[<c:param name="paramName" value="paramValue"/>]

</c:import>

属性说明:

url:要包含至本身JSP网页的其他文件的URL。必选

var:将包含进来的其他文件以字符串的形式存放到指定的变量中。可选

scope:var变量的作用范围。可选

<c:param>:可选子标签,用于向包含进来的其他网页文件传递参数。

范例:

<c:import url="http://java.sun.com" >

<c:param name="test" value="1234" />                         

</c:import>

说明:当<c:import>标签中未指定var变量时,会直接将包含进来的其他网页文件内容显示出来,如果指定了var变量,则会将内容存放到var变量中,不显示。

 

2.<c:url>

作用:生成一个URL。

语法: <c:url value="url" [context="expression_r_r"] [var="name"] [scope="scope"]>

[<c:param name="expression_r_r" value="expression_r_r"/>]

</c:url>

范例1:

<a href="<c:url value=index.jsp'/>">index page</a>

在<a>超链接标签中生成一个URL,指向index.jsp。

范例2:

<c:url value="index.jsp">

<c:param name="keyword" value="${searchTerm}"/>

<c:param name="month" value="02/2003"/>

</c:url>

生成一个URL,并传递参数,生成的结果为index.jsp?keyword=*&month=02/2003,*代表传递的searchTerm的值。

 

3.<c:redirect>

作用:可以将客户端的请求从一个JSP网页导向到其他文件。

语法: <c:redirect url="url">

[<param name="paramName" value="paramValue">]

</c:redirect>

将请求导向URl指向的其他文件。

 

 

五、开始使用JSTL

1.必需的文件:

1)jar档:jstl.jar,standard.jar.一般是放置在lib目录下

2)tld文件:c.tld,一般会是在WEB-INF目录下,依tld文件的位置修改web.xml文档

3)一个web.xml的例子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

   <taglib>

    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>

    <taglib-location>/WEB-INF/c.tld</taglib-location>

   </taglib>   

</web-app>

2.在JSP页面中声明标记库:

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

 

六、综合使用Core Tag的例子:

 1,<c:choose>

 <c:when test="${role!='admin'}"></c:when>

 <c:otherwise></c:otherwise>

  </c:choose>

2,格式化日期

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

<fmt:formatDate value="${obj.jhdate}" type="both" pattern="yyyy-MM-dd"/>

说明见http://freeman983.javaeye.com/blog/96900

3,遍历

 <c:forEach var="dept" items="${list}">

        <c:out value="${dept.deptid}"/>

 </c:forEach>

 4,<c:out value="${sessionScope.user.name}"/>

5,数组

<c:forEach items="${sessionScope.department_array}" var="department" varStatus="status">  department: ${department}_${sessionScope.name_array[status.index]}</c:forEach>

 

【输出标签】c:out

例子:

<c:out value="hello" />

 

【赋值】c:set【移除】 c:remove

例子:

<c:set var="temp" value="1000n" />

<c:remove var="temp"/>

 

【if条件句】c:if

例子:

<c:if test="${v1 lt v2}" var="r">

   v1小于v2,${r }<br>

</c:if>

 

【相当于if...else if...else语句】c:choose,c:when,c:otherwise

例子:

<c:choose>

<c:when test="${v1 gt v2}">

   v1大于v2<br>

</c:when>

<c:otherwise>

   v1小于v2<br>

</c:otherwise>

</c:choose>

 

【遍历1】c:forEach

例子:

<c:forEach begin="1" end="5" step="1">

a<br>  

</c:forEach>

 

【遍历2】c:fortokens

例子:

<c:forTokens items="a,b,c" delims="," var="f">

${f }<br>

</c:forTokens>

 

【处理异常】c:catch

例子:

<c:catch var="e">

   <%

   Integer.parseInt("sss");

   %>

</c:catch>

 

【引入相应的页面】c:import

例子:<c:import url="http://localhost:8080/struts-taglib/index.jsp"/>

 

【指定url】c:url 【如有参数,指定传递的参数】c:param

例子:

<c:url value="http://localhost:8080/struts-taglib/index.jsp" var="turl">

<c:param name="id" value="01" />

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

</c:url>

你可能感兴趣的:(jstl配置和基本使用)