zoukankan      html  css  js  c++  java
  • JSTL详解1

    概述
    在JSP页面中,使用标签库代替传统的Java片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现。鉴于此,出现了JSTL(JSP Standard Tag Library)。大多数JSP页面逻辑提供了实现的JSTL技术,该技术本身就是一个标签库。
    Sun公司Java规范标准的JSTL由apache jakarta组织负责维护。作为开源的标准技术,它一直在不断地完善。JSTL的发布包有两个版本:Standard-1.0 Taglib、Standard-1.1 Taglib,它们在使用时是不同的。
    Standard-1.0 Taglib(JSTL1.0)支持Servlet2.3和JSP1.2规范,Web应用服务器Tomcat4支持这些规范,而它的发布也在Tomcat 4.1.24测试通过了。 
    Standard-1.1 Taglib(JSTL1.1)支持Servlet2.4和JSP2.0规范,Web应用服务器Tomcat5支持这些规范,它的发布在Tomcat 5.0.3测试通过了。
    在本章的介绍中,将以由Sun发布的Standard-1.1 Taglib标签库为主,而apache jakarta组织发布的开源标签库,可以从http://jakarta.apache.org/taglibs/找到所需要的帮助。Sun发布的标准JSTL1.1标签库有以下几个标签:
    q         核心标签库:包含Web应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
    q         国际化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
    q         数据库标签库:可以做访问数据库的工作。
    q         XML标签库:用来访问XML文件的工作,这是JSTL标签库的一个特点。
    q         函数标签库:用来读取已经定义的某个函数。
    此外,JSTL还提供了EL表达式语言(Expression Language)来进行辅助的工作。
    JSTL标签库由标签库和EL表达式语言两个部分组成。EL在JSTL 1.0规范中被引入,当时用来作为Java表达式来工作,而该表达式必须配合JSTL的标签库才能得到需要的结果。
    说明:在JSTL 1.1规范中,JSP2.0容器已经能够独立的理解任何EL表达式。EL可以独立出现在JSP页面的任何角落。本文随后的内容将以JSTL 1.1规范作为介绍的重点。
    9.2.1 JSTL EL 表达式语言简介
    EL是从JavaScript脚本语言得到启发的一种表达式语言,它借鉴了JavaScript多类型转换无关性的特点。在使用EL从scope中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。Web服务器对于request请求参数通常会以String类型来发送,在得到时使用的Java语言脚本就应该是request.getParameter(“XXX”),这样的话,对于实际应用还必须进行强制类型转换。而EL就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用EL表达式取得的值,而不用关心它是什么类型。
    下面的示例就是一个EL表达式,见例9.1。
    例9.1:简单EL表达式
    <%@ page contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
        ${sampleValue + 1} <br>
    </body>
    </html>
    这个示例将在JSP页面显示为“1”,EL表达式必须以“${XXX}”来表示,其中“XXX”部分就是具体表达式内容,“${}”将这个表达式内容包含在其中作为EL表达式的定义。本示例可以在满足JSP2.0规范的任何Web应用服务器中使用。
    9.2.2 EL 表达式的默认变量
    一个EL表达式包含变量和操作符两个内容。任何存在于JSP作用范围的JavaBean都可以被转化成EL表达式来使用,它所包含的默认变量如下:
    1.默认变量pageScope、requestScope、sessionScope、applicationScope
    这4个默认变量包含Scope作用范围的参数集合,相当于被保存在java.util.Map中的某个参数。下面看简单的示例9.2:
    例9.2:使用sessionScope变量的EL表达式
    <%request.getSession().setAttribute("sampleValue", new Integer(10));%>
    ${sessionScope.sampleValue}
    取得保存在Session中参数的sessionScope变量的EL表达式,“.”是property访问操作符,在这里表示从Session中取得“键”为“sampleValue”的参数,并显示出来。显示结果为“10”。
    2.默认变量param、paramValues
    这两个默认变量包含请求参数的集合,param表明请求包含的参数为单一控件,paramValues表明请求包含的参数为控件数组。下面看一个简单示例9.3:
    例9.3:提交请求的页面和接受的页面
    <%@ page contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
            <form action="SampleJsp.jsp">
        <input type="text" name="sampleValue" value="10">
        <input type="text" name="sampleValue" value="11">
        <input type="text" name="sampleValue" value="12">
        <input type="text" name="sampleSingleValue" value="SingleValue">
        <input type="submit" value="Submit">
        </form>
    </body>
    </html>
    在这个页面中定义了两组控件,控件名为“sampleValue”的是一套控件数组,控件名为“sampleSingleValue”的是单一控件,通过递交将请求参数传送到SampleJsp.jsp。
    <%@ page contentType="text/html; charset=UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
        ${paramValues.sampleValue[2]} <br>
        ${param.sampleSingleValue} <br>
    </body>
    </html>
    这是请求转发到的页面,通过EL表达式的paramValues变量得到控件数组中最后一个控件的递交参数,通过EL表达式的param变量得到单一控件的递交参数。控件数组参数的EL表达式使用“[]”来指定数组下标。本示例将显示控件数组中最后一个控件的值“12”和单一控件的值“SingleValue”。
    3.默认变量header、headerValues
    这两个默认变量包含请求参数头部信息的集合,header变量表示单一头部信息,headerValues则表示数组型的头部信息。
    4.默认变量cookie
    包含所有请求的cookie集合,集合中的每个对象对应javax.servlet.http.Cookie。
    5.默认变量initParam
    包含所有应用程序初始化参数的集合。
    6.默认变量pageContext
    等价于page环境类javax.servlet.jsp.PageContext的实例,用来提供访问不同的请求参数。
    11个默认变量几乎包含了Web应用的所有基本操作,若一个表达式不使用这些变量而直接使用参数名,那么就采用就近原则。该表达式将使用最近取得的参数值。
  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/zhenmingliu/p/2392132.html
Copyright © 2011-2022 走看看