J2EE1.4新特性之JSP 2.0的新特性

 SUN 的新版J2EE1.4提
的增强,在应用程序部署和
强,提升了J2EE开发Web应
简化的标记库等;EJB 2.1
API把通常的Jdbc API与扩
供了对双向通信的支持。下
Jdbc3.0以及EJB2.1方面的
供了在J2EE中开发Web Service
服务器管理方面也提供了新的标
用程序的能力;在编程模型方面
中提供了新的timer服务,查询
充API结合起来;J2EE Connecto
面给大家重点介绍J2EE1.4中包
新特性。
的基础,对开发工具做了一些重要
准,在集成性和安全性方面有所增
的重要变化包括JSP表达式语言、
语言(QL)也有所增强;Jdbc3.0
rs规范和独立于消息类型的EJB提
含的JSP2.0、Servlet2.4、


  一、JSP 2.0的新特性


  JSP 2.0属于J2EE 1.4
,原先使用的JSP技术在JSP
平台,它在JSP 1.2基础之上增
2.0中都可以支持。JSP 2.0的
加了新的功能。它保证了向下兼容
新功能主要包括下面几部分:

  (一)运行环境变化                                                           

  1、web.xml格式变化


  我们知道JSP 1.2可以
1.4或更新版本,JSP 2.0使
在Java 2标准版1.3版本运行,
用由Servlet 2.4规定的Web程序
而JSP 2.0要求使用Java 2标准版
部署描述格式。

  在Web程序描述文件web.xml中需要使
是所有有关JSP的设置信息要放在标记中
用xml schema打头的格式。在web.xml中主要的变化
。下面程序例1显示了一个web.xml大致的样子。

  例1:                                                                       

  <?xml version="1.0" encoding="IS0-8859-1"?>

    <web-app xmlns="http://ja
va.sun.com/xml/ns/j2ee"
    xmlns:xsi="http:
//www.w3.org/2001/XMLSchema-
instance"
    xsi:schemaLocation="http://j
ava.sun.com/xml/ns/j2ee web-app_2_4.xsd"
    version="2.4">

    .......                                                            
    <jsp-config>

    <taglib>  

    <taglib-uri>


    http://www.iccon
cept.com/ics/sample-taglib
    </taglib-uri>

    <taglib-location>

    /WEB-INF/jsp/sample-taglib.tld              
    </taglib-location>

    </taglib>

    ........                                                          
    <jsp-property-group>

    <description>

    For config the ICW sample application
    </description>

    <display-name>JSPConfiguration</display-name>

    <url-pattern>/jsp/datareset.jsp</url-pattern>

    <el-ignored>true</el-ignored>

    <page-encoding>ISO-8859-1</page-encoding>

    <scripting-invalid>true</scripting-invalid>

    <include-prelude>/jsp/prelude.jspf</include-prelude>

    <include-coda>/jsp/coda.jspf</include-coda>

    </jsp-property-group>

    </jsp-config>

    </web-app>

                                                                               
  2、JSP设置


  在标记提供了Web程序
custom tag,它的用法和以
上对应JSP的page directiv
统一定义。
中JSP程序的设置信息。包括和
前JSP 1.2中的用法相同。定义
e定义的特性。通过只不过可以

两类元素。定义了Web程序使用的
了一组JSP的特性。这些特性实际
方便地对多个具有相同属性的JSP


  定义一个或多个URL样
中的属性可以定义以下设置
式,在中定义的属性会适用于匹

配这些URL样式的所有JSP文件。在


  (1)允许或禁止使用表达式语言(EL)                                       

  在中可以设定是否允许对应的JSP使
false,JSP中的EL表达式会被处理;如果
用JSTL表达式语言(EL)。如果属性标记被设定为
是true,Web容器会在转换JSP时忽略EL表达式。

  (2)允许或禁止使用scripting                                       

  属性可以允许或禁止使用JSP的脚本
即scripting元素被禁止,则JSP中不能使
则会有转换错误。当这个属性标记为fals
语言(scripting)。如果这个属性标记对应为true,
用scriptlet,scripting表达式和declaration,否
e时,JSP可以像在1.2版本之前那样使用脚本语言。

  (3)声明JSP编码                                                         

  通过标记可以设置对应
,Web容器将根据这个属性
的JSP网页的编码。这个属性对
对JSP内容进行编码。
应每个JSP中的pageEncoding属性


  (4)对应隐含包括(Implicit Includes)                     

  在中可以在对应JSP中
页中包括的preludes和coda
超过一个preludes或coda元
加入抬头(preludes)和结尾(cod
的jspf文件。这些文件的位置相
素在中时,JSP会按照其顺序加
a),使用和属性可以设定在JSP网
对于当前Web程序的context。当有
入到内容中。

  (二)引入表达式语言(EL)


  JSP 2.0的一个主要特点是它支持表
以使用标记格式方便地访问JSP的隐含对
循环控制功能。自制标记也有自定义函数
可以由JSP替代。在JSP 2.0中,建议尽量
达语言(expression language)。JSTL表达式语言可
象和JavaBeans组件,JSTL的核心标记提供了流程和
的功能,因此基本上所有seriptlet能实现的功能都
使用EL而使JSP的格式更一致。

  在web.xml的中可以控
。在page directive中的is
制一组JSP是否使用EL,在每个J
ELIgnored属性用来指定是否忽
SP中也可以指定是否该JSP使用EL
略。格式为:

  <%@ page isELIgnored="true|false"%>

                                                                               
  如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式        
  ${2000 % 20}                                                      

  在isELIgnored="true
Web容器默认isELIgnored=
"时输出为${2000 % 20},而isE
"false"。
LIgnored="false"时输出为100。


  虽然JSP 2.0可以使JSP中完全使用表
程序的功能要求和编程人员的自身条件选
但是由于需要将标记进行转换,在第一次
解,因而更习惯JSP 1.2之前的编程方式

达语言而避免scriptlet,在实际编程中,应该根据
择合适的方式。使用表达语言的JSP比较方便规整,
被调用时会比较慢;有些编程人员由于对Java比较了
,因此,在使用中应因地制宜地选择适用的编程方法


  (三)SimpleTag


  JSP 2.0中加入了新的
了用来实现简单标记的接口
doStartTag()和doEndTag()
时只被使用一次。而需要在
在这个方法中实现。从这个
SimpleTag的方法和处理周
seUspBody()和getJspBody(
JspFragment对象。实现Sim
getJspBody().invoke()方
创建自制标记的API,javax.ser
。和JSP 1.2中的已有接口不同
方法,而提供了一个简单的doTa
一个自制标记中实现的所有逻辑
方面来讲,SimpleTag和Iterati
期要简单得多。在SimpleTag中
)方法。Web容器会使用setJspBo
pleTag标记的程序可以在doTag
法以处理JSP内容。
vlet.jsp.tagext.SimpleTag定义
的是,SimpleTag接口不使用
g()方法。这个方法在调用该标记
过程、循环和对标记体的评估等都
onTag可以达到同等的作用。但
还有用来设置JSP内容的
dy()方法定义一个代表JSP内容的
方法中根据需要多次调用


  例如,程序例2 SimpleTag根据指定
。程序的结构比较简单,所有逻辑都在do
的次数(times)进行循环并输出当前序号(sequence)
Tag方法中实现。

  例2:                                                                       

  package ICW.taglib;                                        
   import javax.servlet.jsp.JspException;
   import javax.servl
et.jsp.tagext.SimpleTagSuppo
rt;
   import java.util.HashMap;                          
   import java.io.IOException;                      
   public class Itera
tionSimpleTag extends Simple
TagSupport{
   private int times;                                        
  public void setTimes(int_times){              
    this.times=_times;                                      
      }                                                                    
    public void doTag() throws J
spException,IOException{
    HashMap params=new HashMap();                
    for(int i=0; i<times;i++){                

    params.put("sequ
ence",String.valueOf(i+1));
    getJspBody().invoke(null,params);        
     }                                                                      
     }                                                                      
    }                                                                        

  这个标记的TLD文件内容如下,它使
用了XML schcma定义标记的使用方法。

  程序例3如下:                                                               

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

    <taglib xmlns="http://jav
a.sun.com/xml/ns/i2ee"
    xmlns:xsi="http:
//WWW.w3.org/2001/XMLSchema-
instance"
    xsl:schemaLocati
aglihrary_2_0.xsd"
on="http://java.sun.com/xml/

ns/j2ee web-jspt

    version="2.0">

   <taglib>

    <tiib-version>1.0</tlib-version>

    <short-name>Jwad book simple tag</short-name>

    <uri>/JwadSimpleTag</uri>

    <description>Simple Tag Handler</description>

    <tag>

    <name>iteration</name>

    <tag-class>ICW.taglib.IterationSimpleTag</tag-class>

    <body-content>scriptless</body-content>

    <description>Iteration Tag</description>

    <variable>

    <description>Current iterationnumber</description>

    <name-given>sequence</name—given>

    </variable>

    <attribute>

    <name>times</name>

    <required>true</required>

    <rtexprvalue>true</rtexprvalue>

    </attribute>

    </tag>

    </taglib>

                                                                               
  程序例4中的JSP使用上面例3中定义
的“times”的值进行一定次数的循环。
的IterationSimpleTag,它根据Web请求参数中给定
在每次循环中将输出"sequence"的值。

  例4:                                                                       

  <%@ taglib prefix="ictag" uri="/WEB-INF/ics-jsp2.tld" %>

    <HTML><HEAD><TITLE>Simple Tag Sample</TITLE></HEAD>

    <BODY>

    <CENTER>

    <FONT COLOR='#009999' SIZE='4' face='Arial'>

    <STRONG>Interation Simple Tag</STRONG>

    </FONT>

    </CENTER>

    <HR>

    <c:set var="time" value="${param.times}"/>

    <p><B>Reminder:</B></p><br>

    <ictag:iteration times="${times}">

    This is the ${sequence} Of ${times} times of reminder<br>

    </ictag:iteration>

    </body>

    </html>

                                                                               
  (四)使用JSP fragment


  JSP 2.0中的一个主要功能是JSP fra
估JSP标记属性。我们知道一般JSP是首先
属性,而JSP fragment提供了动态的属性
被改变的。JSP需要将这样的属性定义为j
标记设置成这种形式时,这种标记属性实
,标记属性可以被反复评估多次。这种用
个SimpleTag处理程序中使用的自制标记
JspFragment对象并可以在doTag方法中多
能有一般的文本和JSP action,不能有sc
gment,它的基本特点是可以使处理JSP的容器推迟评
评估JSP标记的属性,然后在处理JSP标记时使用这些
。也就是说,这些属性在JSP处理其标记体时是可以
avax.servlet.jsp.tagext.JspFragment类型。当JSP
际上的处理方法类似于标记体。在实现标记的程序中
法称为JSP fragment。JSP fragment还可以定义在一
动作。像前面例子说明的,getJspBody返回一个
次使用。需要注意的是,使用JSP fragment的JSP只
riptlet和scriptlet表达式。

  我们可以简单地认为JS
传递到另一个JSP中并被使
小简单而且重复使用率高。
P fragment是一段可以重复使用
用。与JSP include概念不同的

的JSP。一段JSP fragment可以被
是,JSP fragment一般功能比较短


  JSP fragment一般在标
,Web容器生成一个JspFrag
个JspFragment对象和包含
用Java编写的标记处理程序
用JSP fragment。 JSP标记
现的。JSP标记文件是用文
新功能。一个标记文件可以
编程人员不熟悉Java,也可
放在Web程序的/WEB-INF目
记体内或标记体内定义。每次当
ment对象,这个对象和当前JSP
它的父标记建立联系。JspFragm
,或者使用标记文件(tag file)
文件可以和JSP fragment共同工
本文件格式(JSP语法)实现自制
对应一个标记,可以不需tld文
以使用JSP语法定义自己的标记
录下。
含有JSP fragment的标记被使用时
的page scope联系起来。同时,这
ent对象可以有两种调用方式:使
。标记文件可以使用,或者动作使
作。CustomTag都是以编程方式实
标记,这也是JSP 2.0的一个主要
件定义该标记的方法。这样,即使
。标记文件一般使用.tag为后缀并


  程序例5中的taskstatu
的名称和完成日期,它通过
的JSP就是JSPfragment,而
它的定义文件在/WEB-INF/t
。这个标记会使用到前面定
s.jsp使用了两个JSP fragment
定义了两段JSPfragment(名称为
标记被一个包围。这个标记是一
ags目录下。标记文件的名称和
义的两个JSP fragment。
。这个JSP的功能是显示一组Task
onSehedule和delayed)。在标记内
个通过标记文件定义的自制标记,
标记名称一致为“listTasks.tag"


  例5:                                                                       

  <%@ taglib prefix="ictag" tagdir="/WEB-INF/tags" %>

   <HTML><HEAD><TITLE>JSP Fragment Sample</TITLE></HEAD>

   <BODY>

    <CENTER>

    <FONT COLOR='#009999' SIZE='4' face='Arial'>

    <STRONG>JSP Fragment Sample Using Tag Files</STRONG>

    </FONT>

    </CENTER>

    <HR>

    <h2>Tasks</h2>

    <ietag:listTasks>

    <jsp:attribute name="onSchedule">

    <td>

    Name:${name}<br/>

    </td><td>

    Date:${date}                                                  
    </td>

    </jsp:attribute>

    <jsp:attribute name="delayed">

    <td>

    Name:${name}<br/>

    </td><td>

    <font color="red">Plan:<strike> ${pianDate}</strike></font><br/>

    <b>Actural:${actDate}</b>

    </td>

    </jsp:attribute>

    </ictag:listTasks>

    </BODY>

    </HTML>

                                                                               
  (五)其他特性


  JSP2.0还有一些其他特
而允许使用namespaces等。
功能的细节,这里就不再阐
性变化,比如严格修正了I18N的
这些并不是核心功能,大家可以
述。 
语法规则,改进JSP对应XML语法从
参照java.sun.com的有关资料了解

posted on 2007-08-22 17:12  JEEF WANG  阅读(269)  评论(0编辑  收藏  举报

导航