JSP JSTL入门

1、安装JSTL(标准标签库)

1)下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下,下载链接:

http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip

2)将需要引入的tld文件(标签库描述文件)复制到拷贝到 /WEB-INF/tld/ 下

(tld文件中将写好的类映射成jsp标签,然后可以在jsp页面中使用定义好的标签)

3)在web.xml文件中添加配置:

以下列出了常用的tld文件的uri和文件名

  <jsp-config>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
    <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri>
    <taglib-location>/WEB-INF/tld/fmt-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri>
    <taglib-location>/WEB-INF/tld/c-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
    <taglib-location>/WEB-INF/tld/sql.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri>
    <taglib-location>/WEB-INF/tld/sql-rt.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
    <taglib-location>/WEB-INF/tld/x.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri>
    <taglib-location>/WEB-INF/tld/x-rt.tld</taglib-location>
    </taglib>
    </jsp-config>

4)在使用该库的每个JSP的顶部包含一个 <taglib> 指令定义应用的标签库和访问前缀,例如:

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


2、核心标签库

1)定义:用于完成JSP页面的常用功能,包括JSTL的表达式标签(<c:out>、<c:set>、<c:remove>、<c:catch>)、URL标签(<c:import>、<c:redirect>、<c:url>、<c:param>)、流程控制标签(<c:if>、<c:choose>、<c:when>、<c:otherwise>)、循环标签(<c:foreach>、<c:forTokens>),他们的基本作用如下所示:

<c:out>

将表达式的值输出到JSP页面中,相当于JSP表达式<%=表达式%>

<c:set>

在指定范围中定义变量或为指定的对象设置属性值

<c:remove>

从指定的JSP范围中移除指定的变量

<c:catch>

捕获程序中出现的异常,并且将错误信息储存起来

<c:if>

与Java语言中用的if语句类似,仅当对表达式求出的值为true时,才处理标记的主体内容

<c:choose>

本身只当做<c:when>和<c:otherwise>的父标签,与Java预言中的switch语句类似

<c:when>

<c:choose>的子标签,用来判断条件是否成立

<c:otherwise>

<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行

<c:import>

导入站内或其他网站的静态和动态文件到Web页面中

<c:forEach>

根据循环条件遍历数组和集合类中的所有或部分数据

<c:forTokens>

根据指定的分隔符来分隔字符串并迭代输出

<c:param>

为其它标签提供参数信息,通常与其它标签结合使用,比如给重定向的页面传递参数

<c:redirect>

重定向至一个新的URL

<c:url>

使用正确的URL重写规则构造一个URL

2)<c:out>标签

①属性:

属性

描述

是否必要

默认值

value

要输出的内容

default

输出的默认值

主体中的内容

escapeXml

指定是否转换特殊字符

true

②注意:

escape的值为true时不转换特殊字符,例如&lt转换后为<

只有value属性可以使用EL表达式

③使用示例:

<c:out value="${null}" default="hello" escapeXml="false"></c:out>

3)<c:set>标签

①属性:

属性

描述

是否必要

默认值

value

要存储的值

主体的内容

target

要修改的属性所属的对象

property

要修改的属性

var

存储信息的变量

scope

var属性的作用域

Page

②说明:用于在某个范围(page、request、session、application等)中为某个名称设定特定的值,或者设定某个已经存在的JavaBean对象的属性。使用改标签可以在页面中定义变量。

③语法:

用法1:

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

或:

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

用法2:

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

或:

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

④使用示例:

设置变量:

<c:set var="str" value="hello JSTL" scope="page" ></c:set>

设置JavaBean对象的属性:

<jsp:useBean id="msg" class="cn.qi.JavaBean.MyMessage" scope="page" ></jsp:useBean>
<c:set target="${msg}" property="message" value="hello JSTL" ></c:set>
<c:out value="${msg.message}" ></c:out>

⑤注意:

只有value、target属性可以使用EL表达式

4)<c:if>标签:

①属性:

属性

描述

是否必要

默认值

test

条件表达式

var

用于存储条件判断结果的变量

scope

var属性的作用域(存在范围)

page

②说明:将test属性的判断结果保存在指定范围scope的变量var中,还可以根据条件的判断结果执行标签主体。标签主体是JSP页面能够使用的任何元素,如HTML标记、Java代码或者其它的JSP标签。

③语法:

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

标签主体部分

</c:if>

④使用示例:

<c:if test="${'1'.equals('1')}" var="res" scope="page">
    <c:out value="${res}" ></c:out>
  </c:if>

⑤注意:

只有test属性可以使用EL表达式

5)<c:forEach>标签:

①属性:

属性

描述

是否必要

默认值

items

指定被循环遍历的对象,多用于数组与集合类

begin

循环变量的初始位置(0=第一个元素,1=第二个元素)

0

end

循环的终止位置(0=第一个元素,1=第二个元素)

Last element

step

每一次迭代的步长

1

var

代表当前条目的变量名称,例如items当前迭代到的对象成员

varStatus

代表循环状态的变量名称

②说明:

可以根据循环条件遍历数组和集合类中的所有或部分数据。

③语法:

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

标签体部分

</c:forEach>

④使用示例:

<%
    ArrayList<String> arr = new ArrayList<>();
    arr.add("Linux入门");
    arr.add("windows入门");
    arr.add("系统平台入门");
    arr.add("Web应用程序入门");
    arr.add("安卓开发入门");
    request.setAttribute("book_arr", arr);
  %>
  <c:forEach items="${book_arr}" var="index" begin="1" end="3" step="2">
    <c:out value="${index}"/>
  </c:forEach>

⑤注意:

var属性不可以使用EL表达式

6)<c:forTokens>标签:

①属性:

属性

描述

是否必要

默认值

items

指定要迭代的String对象

begin

迭代的开始位置(0=第一个元素,1=第二个元素)

0

end

迭代的结束位置(0=第一个元素,1=第二个元素)

Last element

step

每一次迭代的步长

1

var

保存分隔后的字符串

varStatus

代表循环状态的变量名称

②说明:用指定的分隔符分割一个字符串,根据分隔的数量确定循环的次数。

③语法:

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

标签主体部分

</c:forTokens>

④使用示例:

<c:set value="Java入门经典、Oracle学习手册、C#编程基础、轻松学Linux、ASP.NET实践" var="params" ></c:set>
  <b>分隔后的字符串:</b><br />
  <c:forTokens items="${params}" delims="、" var="cl" >
    <c:out value="${cl}"></c:out>
  </c:forTokens>
原文地址:https://www.cnblogs.com/GjqDream/p/11650478.html