站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题Java使用技巧两则---J2EE 1.4简介,JSTL

Java使用技巧两则---J2EE 1.4简介,JSTL

摘要:

J2EE 1.4简介
2003年11月24日,J2EE的JCP(Java Community Process)委员会投票一致通过了J2EE 1.4,这是过去两年内发布的第一个主要版本。这个最新版的企业Java标准开放平台增加了许多新的服务,J2EE 1.4 SDK支持这些服务,现在可以下载这个SDK了。这个SDK包括J2EE 1.4 应用服务器、J2SE 1.4.2和J2EE 1.4示例代码。你可以下载整个SDK或单独下载应用服务器或示例代码。
下面的技巧介绍了J2EE 1.4的一些新特点。也包括如何在Solaris、 Windows、 Linux、和 Mac OS X上安装J2EE 1.4 SDK。但是没有完全覆盖这个平台的所有新内容。关于J2EE 1.4新内容的更全面的介绍,请看J2EE v1.4 Application Server Release Notes。
对Web Service的支持
J2EE 1.4最重要、最受争议的特点是对标准的Web Service的端对端的支持。有了J2EE 1.4,现在可以用HTTP之上的SOAP(Simple Object Access Protocol)使得J2EE组件(例如企业Bean和servlet)成为Web Service。
J2EE 1.4要求应用服务器必须遵守WS-I Basic Profile 1.0,这个规范定义了Web service的传输和协议。这使得Web service是可以互操作的。
与J2EE中Web service有关的关键技术如下:
· Web Services for J2EE 1.1。结合单个J2EE技术创建Web service的主要是Web Services for J2EE。它定义了客户端、service端以及容器之间的部署协议。新的部署描述符文件,webservices.xml,为每一种组件定义了部署模式。Web Services for J2EE 还定义了编程模型(JAX-RPC)、 使用JNDI查找提供service的对象、和安全。最后,它还提供了一个新的Handler对象,开发者可以用这种对象阻止和操作SOAP消息。
· JAX-RPC 1.1 (Java API for XML-Remote Procedure Calls)。JAX-RPC是一个标准的远程过程调用接口,它使用XML作为方法调用和返回值的序列化协议。JAX-RPC 把servlet和无状态会话Beans定义为在SOAP和 WSDL (Web Services Description Language)的基础上的XML Web service的service端。Service端是实现了Web service逻辑的软件组件。JAX-RPC 的client接口定义了对Web service的远程调用是如何发生的,以及参数和返回值(包括collection)是如何序列化的。JAX-RPC 1.1 还支持对安全Web services的基于SSL的验证。
· JAXR 1.0 (Java API for XML Registries)。 JAXR 把不同的XML注册表统一到单个模型。程序员可以利用XML注册表发现和查找service,访问它们的内容和元数据。例如,你可以用应用创建工具访问指定服务器上的注册表,找出服务器提供了哪些service,设计SOAP客户端使用其中的一个service。JARX还使得外部Web service客户端可以访问J2EE Web service。
· SAAJ 1.2 (SOAP with Attachments API for Java)。SAAJ用具有MIME附件的SOAP消息处理客户端和Web service之间的SOAP消息传递。MIME附件既可以用来发送文档(对基于文档的Web service而言)又可以用来发送传递大量数据的参数(对 RPC式的Web service)。 SAAJ还为带附件的SOAP消息定义了DOM(Document Object model,文档对象模型)。它允许用户对如何编码SOAP消息进行控制, 为重复或复杂的任务提供了automation hook。
· JAXP 1.2 (Java API for XML Parsing)。这个包统一了解析和处理XML的各种方法。负责解析的类可以在部署时与运行时之间切换。JAXP 1.2包含了SAX 2.0、 DOM Level 2、和XSLT。
Web层增强
不是所有的J2EE 1.4中的Web层增强都与Web service有关。现有的核心技术也得到了更新。
J2EE 1.4中的Web层最大的增强在于JSP 2.0。JSTL(JavaServer Pages Standard Tag Library)提供了范围广泛的通用tag,这些tag极大地方便了Web层的开发。JSTL还定义了新的表达式语言,这种语言可以用来编写存储在任何范围内的Web层JavaBean组件的表达式。下一个技巧说明了如何使用几种这样的tag。
JSP另一个主要的增强是方便地定义定制tag的能力。在JSP 2.0以前的版本中,定义定制tag要求编写实现Tag接口的类。JSP 2.0仍然支持这种方法,但是它还允许用JSP代码片断定义定制tag(在JSP文件中定义),然后在多个地方使用所定义的定制tag。
EJB 2.1
J2EE 1.4的另一个重要特点是EJB 2.1,EJB 2.1提供了几个新的增强。这些包括:
l 无状态会话Bean可以用作Web service端。
l 新的Timer service可以设置成定时调用企业Bean的ejbTimeout()方法。可以用这个service定时调用商业逻辑。
l EJB-QL增加了对结果集排序的ORDER BY子句和新的合计函数(AVG、MAX、MIN、SUM和COUNT)。
l 现在消息驱动的Bean可以接受任何类型的消息,而不只是JMS消息(以前的版本只接受JMS消息)。现在连接器可以直接与MDB通讯,通过适配器把从外部系统传来的消息翻译成对MDB的调用。
企业Java BluePrint for J2EE 1.4
Java BluePrint示例应用是J2EE平台的必要部分。示例应用展示了应用设计和开发的最佳实践,提供了如何使用J2EE技术的例子。J2EE 1.4 SDK开发版本包含了AdventureBuilder,这是新增的J2EE的Web service示例应用。它也包含了原有的Java Pet Store和无线游戏示例应用。
其他变化
J2EE平台其他的一些重要变化包括:
l JACC 1.0(Java Authorization Contract for Containers ):允许自由选择安全和基于角色的授权提供者。
l Java Deployment API 1.1: 独立于服务器的部署工具。
l Java Message Service (1.1) 增强
l J2EE Connectors 1.5:包括了对异步、双向、多线程连接器的完全支持。
l J2EE Deployment 1.1:包括了可代替DTD的用XML模式定义的部署描述符,为了向后兼容保留了DTD.
l J2EE Management 1.0:用Java工具或非Java工具管理企业资源。
l 新版JavaMail (1.3),Java Transaction API (JTA 版本1.01B), 和JDBC 3.0
安装服务器
用J2EE 1.4新的GUI安装程序安装服务器很简单。所支持的操作系统如下:
l Solaris SPARC 8
l Solaris SPARC 9
l Windows 2000 Pro SP3+
l Windows XP Pro SP1+
l Windows 2000 Server SP3+
l Windows Server 2003
l Linux RedHat 8
除了对Linux RedHat的支持以外,只需作很少的修改,甚至不需修改,服务器就能在许多其他的Linux版本环境运行。在Linux上安装的主要要求是J2RE 1.4.1以上的版本。
在所支持的任意一个操作系统上安装服务器的步骤是:
1. 下载适当的软件包(http://java.sun.com/j2ee/1.4/download-dr.html)。
2. 运行下载的可执行程序。
在Macintosh OS X 或Darwin上安装J2EE 1.4 SDK是可能的,尽管没有宣称对它们的支持。要在OS X 或Darwin上安装J2EE 1.4 SDK,你必须有root访问权限,J2RE必须是1.4.1以上的版本。
在OS X 或Darwin上安装J2EE 1.4 SDK的步骤如下:
1. 下载SDK的Linux版本(http://java.sun.com/j2ee/1.4/download-dr.html)。下载的文件将是ELF二进制文件。
2. 用unzip命令行实用程序将压缩文件解压到一个空目录。必须用unzip,用象StuffIt这样的程序是不行的。在提示符(‘$’)后输入:
$ unzip j2eesdk-1_4-dr-linux-eval
3. 开始安装,输入:
$ java -cp package/PackageFormat.jar:. appserv
安装程序会开始安装SDK。如果偶尔不能看到安装时显示的提示,这时可以调整窗口的大小。
4. 安装程序要求输入Java路径时,输入:
/Library/Java/Home
安装程序会给出一个提示信息“server requires JDK 1.4.2. Java 2 version 1.4.1 will work properly”,选择
5. 安装程序完成后,还必须做些工作。第一件要做的工作是改变安装目录img/bin的访问权限。输入:
$ chmod a+x /Users/yourname/SUNWappserver/imq/bin
这里yourname是你的用户名。(这假定服务器安装在/Users/yourname。)
6. 最后一步要求root访问权限。服务器在/Library/Java/Home/jre/bin内查找java和javac,这个目录还不存在。你必须创建这个目录,创建这些程序的二进制代码的符号连接。输入:
$ sudo mkdir -p /Library/Java/Home/jre/bin
$ cd /Library/Java/Home/jre/bin
$ sudo ln -s /Library/Java/Home/bin/java java
$ sudo ln -s /Library/Java/Home/bin/javac javac
sudo命令在第一次运行时会要求你输入口令。如果你不是系统管理员,你必须以root身份登录或su到root才能完成这些工作。
7. 安装到此已经完成。启动应用服务器,输入:
$ cd /Users/yourname/SUNWappserver/bin
$ asadmin start-domain

JSTL(THE JAVA STANDARD TAG LIBRARY)
过去几年,我们一直自己编写定制tag实现JSP页面的显示逻辑。已经建立了几个流行的tag库,用来执行迭代、处理XML、调用辅助函数和访问Web层JavaBean。这些库的功能有许多重叠,更主要的是它们互不兼容。
为了解决这个不兼容问题,JCP就一个共用逻辑和现实tag集达成了一致。这些tag通常在创建Web应用的视图时非常有用。这个新的tag集被称之为JSTL(JavaServer Pages Standard Tag Library)。
JSTL不是J2EE 1.4必需的部分,因此,不要求应用服务器供应商对它的支持。然而,Sun的J2EE 1.4 SDK还是包含了JSTL,其他的供应商也很可能支持它。JSTL并不都是新的---J2EE 1.3容器早就有了JSTL 1.0。JSTL 1.1对JSTL进行了升级,以便利用JSP 2.0和J2EE 1.4的新特点。
这个技巧说明了如何使用几个新的JSTL tag。为了使用这些tag,必须了解新的JSP表达式语言(JSP Expression Language,JSP EL)。
JSP表达式语言
JSTL的基本思想是,JSP页面格式化的大多数数据都是JSP Page状态的。这些状态包括:
l page、request、session或application范围的对象。
l Request参数
l JSP隐含对象(例如,pageContext)
l HTTP header、cookie、和request 参数
l Servlet上下文初始化参数
关于JSP页面可以使用的数据的完整列表,请看J2EE 1.4教程(http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html)。
用户定义的JavaBean(包括JavaBean和对企业Bean的引用)可以绑定到任何范围的状态变量。如果你在一个页面上用代码片断创建了一个新的Bean,你只需使用tag。否则,只能在EL表达式中用名称访问Bean。JSP 2.0表达式语言使用JavaBean的命名机制操纵所连接的Bean。这个语言也为JSP tag中所用的表达式定义了语法。JSP页面编译器把分隔符${和}之间的JSP语句看成表达式。
解释JSP表达式是如何工作的最容易的方法是用例子,下面我们就看一看这个技巧的示例代码。
示例代码
示例代码是一个使用了两个JavaBean的Web应用。JavaBean ColorScheme是一个映照,这个映照的键名是颜色名称,键值是ColorBean对象。ColorBean有名称(用这个名称注册到ColorScheme),red、green和blue颜色组件。ColorScheme继承了javax.util.TreeMap。对ColorScheme迭代按名称顺序取得它的所有ColorBean对象。ColorBean继承了java.awt.Color,因此,在JSP EL中可以使用它继承的所有方法(包括JavaBean属性)。
应用的欢迎页面,index.jsp,操作有几百个ColorBean对象的ColorScheme对象。这些对象的数据来源于Web归档文件中的文本文件(rgb.txt)。文件中的数据有下面的格式:
R G B Name
240 248 255 AliceBlue
index.jsp前面的一段代码初始化ColorScheme Bean,以名称“scheme”用session状态存储这个Bean,如下所示:
class="com.elucify.tips.dec2003.ColorScheme"
scope="session">