帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
Java使用技巧两则---J2EE 1.4简介
作者:佚名 发布时间:2005-04-02 来源:不详
 
  J2EE 1.4简介

  2003年11月24日,J2EE
,这是过去两年内发布的第
的服务,J2EE 1.4 SDK支持
服务器、J2SE 1.4.2和J2EE
代码。
的JCP(Java Community Process
一个主要版本。这个最新版的企
这些服务,现在可以下载这个SD
1.4示例代码。你可以下载整个

)委员会投票一致通过了J2EE 1.4
业Java标准开放平台增加了许多新
K了。这个SDK包括J2EE 1.4 应用
SDK或单独下载应用服务器或示例


  下面的技巧介绍了J2EE
Mac OS X上安装J2EE 1.4 S
容的更全面的介绍,请看J2
1.4的一些新特点。也包括如何
DK。但是没有完全覆盖这个平台
EE v1.4 Appication Server Re
在Soaris、 Windows、 inux、和
的所有新内容。关于J2EE 1.4新内
ease Notes。
  对Web Service的支持                                                

  J2EE 1.4最重要、最受
1.4,现在可以用HTTP之上
Bean和servet)成为Web Se
争议的特点是对标准的Web Serv
的SOAP(Simpe Object Access P
rvice。
ice的端对端的支持。有了J2EE
rotoco)使得J2EE组件(例如企业


  J2EE 1.4要求应用服务器必须遵守WS
的传输和协议。这使得Web service是可
-I Basic Profie 1.0,这个规范定义了Web service
以互操作的。

  与J2EE中Web service有关的关键技术如下:                        
  • Web Services for J2EE 1
Web Services for J2EE。它定义了客户
描述符文件,webservices.xm,为每一种
义了编程模型(JAX-RPC)、 使用JNDI查
一个新的Hander对象,开发者可以用这种
.1。结合单个J2EE技术创建Web service的主要是
端、service端以及容器之间的部署协议。新的部署
组件定义了部署模式。Web Services for J2EE 还定
找提供service的对象、和安全。最后,它还提供了
对象阻止和操作SOAP消息。

  • JAX-RPC 1.1
的远程过程调用接口,它使
状态会话Beans定义为在SOA
Web service的service端。
cient接口定义了对Web ser
)是如何序列化的。JAX-RP
(Java API for XM-Remote Pro
用XM作为方法调用和返回值的序
P和 WSD (Web Services Descr
Service端是实现了Web service
vice的远程调用是如何发生的,
C 1.1 还支持对安全Web servic
cedure Cas)。JAX-RPC是一个标准
列化协议。JAX-RPC 把servet和无
iption anguage)的基础上的XM
逻辑的软件组件。JAX-RPC 的
以及参数和返回值(包括coection
es的基于SS的验证。

  • JAXR 1.0 (Java API for
单个模型。程序员可以利用XM注册表发现
你可以用应用创建工具访问指定服务器上
SOAP客户端使用其中的一个service。JAR
service。
XM Registries)。 JAXR 把不同的XM注册表统一到
和查找service,访问它们的内容和元数据。例如,
的注册表,找出服务器提供了哪些service,设计
X还使得外部Web service客户端可以访问J2EE Web


  • SAAJ 1.2 (S
SOAP消息处理客户端和Web
基于文档的Web service而
service)。 SAAJ还为带附
模型)。它允许用户对如何
automation hook。
OAP with Attachments API for
service之间的SOAP消息传递。M
言)又可以用来发送传递大量数
件的SOAP消息定义了DOM(docum
编码SOAP消息进行控制, 为重

Java)。SAAJ用具有MIME附件的
IME附件既可以用来发送文档(对
据的参数(对 RPC式的Web
ent.nbspObject mode,文档对象
复或复杂的任务提供了


  • JAXP 1.2 (
方法。负责解析的类可以在
、和XST。
Java API for XM Parsing)。
部署时与运行时之间切换。JAXP

这个包统一了解析和处理XM的各种
1.2包含了SAX 2.0、 DOM eve 2


  Web层增强

  不是所有的J2EE 1.4中

的Web层增强都与Web service有

关。现有的核心技术也得到了更新

  J2EE 1.4中的Web层最大的增强在于J
ibrary)提供了范围广泛的通用tag,这
表达式语言,这种语言可以用来编写存储
个技巧说明了如何使用几种这样的tag。
SP 2.0。JST(JavaServer Pages Standard Tag
些tag极大地方便了Web层的开发。JST还定义了新的
在任何范围内的Web层JavaBean组件的表达式。下一


  JSP另一个主要的增强是方便地定义
tag要求编写实现Tag接口的类。JSP 2.0
义定制tag(在JSP文件中定义),然后在
定制tag的能力。在JSP 2.0以前的版本中,定义定制
仍然支持这种方法,但是它还允许用JSP代码片断定
多个地方使用所定义的定制tag。

  EJB 2.1

  J2EE 1.4的另一个重要
特点是EJB 2.1,EJB 2.1提供了
几个新的增强。这些包括:
   无状态会话Bean可以用作Web service端。                        
   新的Timer service
service定时调用商业逻辑
可以设置成定时调用企业Bean的

ejbTimeout()方法。可以用这个

   EJB-Q增加了对结果集排序的ORDER
COUNT)。
BY子句和新的合计函数(AVG、MAX、MIN、SUM和

   现在消息驱动的Bean
JMS消息)。现在连接器可
MDB的调用。
可以接受任何类型的消息,而不
以直接与MDB通讯,通过适配器

只是JMS消息(以前的版本只接受
把从外部系统传来的消息翻译成对


  企业Java BuePrint for J2EE 1.4                      
  Java BuePrint示例应
实践,提供了如何使用J2EE
是新增的J2EE的Web servic
用。
用是J2EE平台的必要部分。示例
技术的例子。J2EE 1.4 SDK开发
e示例应用。它也包含了原有的J

应用展示了应用设计和开发的最佳
版本包含了AdventureBuider,这
ava Pet Store和无线游戏示例应


  其他变化

  J2EE平台其他的一些重要变化包括:                                          
   JACC 1.0(Java Authorization C
基于角色的授权提供者。
ontract for Containers ):允许自由选择安全和

   Java Depoyment API 1.1: 独立于服务器的部署工具。    
   Java Message Service (1.1) 增强                  
   J2EE Connectors 1.
5:包括了对异步、双向、多线
程连接器的完全支持。
   J2EE Depoyment 1.1:包括了可代
保留了DTD.
替DTD的用XM模式定义的部署描述符,为了向后兼容

   J2EE Management 1.
0:用Java工具或非Java工具管
理企业资源。
   新版JavaMai (1.3
),Java Transaction API (JT
A 版本1.01B), 和JDBC 3.0
  安装服务器                                                                    

  用J2EE 1.4新的GUI安装程序安装服务器很简单。所支持的操作系统如下:  
   Soaris SPARC 8                                                
   Soaris SPARC 9                                                
   Windows 2000 Pro SP3+                                  
   Windows XP Pro SP1+                                      
   Windows 2000 Server SP3+                            
   Windows Server 2003                                      
   inux RedHat 8                                                  

  除了对inux RedHat的支持以外,只
其他的inux版本环境运行。在inux上安装
需作很少的修改,甚至不需修改,服务器就能在许多
的主要要求是J2RE 1.4.1以上的版本。
  在所支持的任意一个操作系统上安装服务器的步骤是:                              
  1. 下载适当的软件包
(http://java.sun.com/j2ee/1
.4/downoad-dr.htm)。
  2. 运行下载的可执行程序。                                                  
  在Macintosh OS X 或Darwin上安装J
。要在OS X 或Darwin上安装J2EE 1.4 SD
版本。
2EE 1.4 SDK是可能的,尽管没有宣称对它们的支持
K,你必须有root访问权限,J2RE必须是1.4.1以上的

  在OS X 或Darwin上安装J2EE 1.4 SDK的步骤如下:          
  1. 下载SDK的inux版本(http://ja
件将是EF二进制文件。
va.sun.com/j2ee/1.4/downoad-dr.htm)。下载的文

  2. 用unzip命令行实
这样的程序是不行的。在提
用程序将压缩文件解压到一个空
示符(‘$’)后输入:
目录。必须用unzip,用象StuffIt

  $ unzip j2eesdk-1_4-dr-inux-eva                
  3. 开始安装,输入:                                                        

  $ java -cp package/P
ackageFormat.jar:. appserv
  安装程序会开始安装SDK。如果偶尔
小。
不能看到安装时显示的提示,这时可以调整窗口的大

  4. 安装程序要求输入Java路径时,输入:                                  
  /ibrary/Java/Home                                            
  安装程序会给出一个提示信息“server requires JDK 1.4.2. Java 2 version 1.4.1 wi work propery”,选择&t;continue>。

  5. 安装程序完成后,还必须做些工
问权限。输入:
作。第一件要做的工作是改变安装目录img/bin的访

  $ chmod a+x /Users/y
ourname/SUNWappserver/imq/bi
n
  这里yourname是你的用
户名。(这假定服务器安装在/U
sers/yourname。)
  6. 最后一步要求root
javac,这个目录还不存在
输入:
访问权限。服务器在/ibrary/Ja
。你必须创建这个目录,创建这

va/Home/jre/bin内查找java和
些程序的二进制代码的符号连接。


  $ sudo mkdir -p /ibr
ary/Java/Home/jre/bin
  $ cd /ibrary/Java/Home/jre/bin                  

  $ sudo n -s /ibrary/
Java/Home/bin/java java
  $ sudo n -s /ibrary/Java/Home/bi
n/javac javac
  sudo命令在第一次运行
登录或su到root才能完成这
时会要求你输入口令。如果你不
些工作。
是系统管理员,你必须以root身份

  7. 安装到此已经完成。启动应用服务器,输入:                                
  $ cd /Users/yourname/SUNWappserver/bin  
  $ asadmin start-domain                                  

  JST(THE JAVA STANDARD TAG IBRARY)            
  过去几年,我们一直自
tag库,用来执行迭代、处
重叠,更主要的是它们互不
己编写定制tag实现JSP页面的显
理XM、调用辅助函数和访问Web
兼容。
示逻辑。已经建立了几个流行的
层JavaBean。这些库的功能有许多


  为了解决这个不兼容问题,JCP就一
创建Web应用的视图时非常有用。这个新
Tag ibrary)。
个共用逻辑和现实tag集达成了一致。这些tag通常在
的tag集被称之为JST(JavaServer Pages Standard


  JST不是J2EE 1.4必需
的J2EE 1.4 SDK还是包含了
1.3容器早就有了JST 1.0。

的部分,因此,不要求应用服务
JST,其他的供应商也很可能支
JST 1.1对JST进行了升级,以便

器供应商对它的支持。然而,Sun
持它。JST并不都是新的---J2EE
利用JSP 2.0和J2EE 1.4的新特点


  这个技巧说明了如何使用几个新的JS
语言(JSP Expression anguage,JSP E
T tag。为了使用这些tag,必须了解新的JSP表达式
)。

   JSP表达式语言

  JST的基本思想是,JSP
页面格式化的大多数数据都是JS
P Page状态的。这些状态包括:
   page、request、session或appication范围的对象。  
   Request参数                                                          
   JSP隐含对象(例如,pageContext)                              
   HTTP header、cookie、和request 参数                
   Servet上下文初始化参数                                                
  关于JSP页面可以使用
ava.sun.com/j2ee/1.4/doc
的数据的完整列表,请看J2EE 1
s/tutoria/doc/JSPIntro7.htm
.4教程(http://j
)。
  用户定义的JavaBean(包括JavaBean和对企业Bean的引用)可以绑定到任何范围的状态变量。如果你在一个页面上用代码片断创建了一个新的Bean,你只需使用&t;jsp:useBean>tag。否则,只能在E表达式中用名称访问Bean。JSP 2.0表达式语言使用JavaBean的命名机制操纵所连接的Bean。这个语言也为JSP tag中所用的表达式定义了语法。JSP页面编译器把分隔符${和}之间的JSP语句看成表达式。

  解释JSP表达式是如何工作的最容易
代码。
的方法是用例子,下面我们就看一看这个技巧的示例


  示例代码

  示例代码是一个使用了
映照的键名是颜色名称,键
CoorScheme),red、green
CoorScheme迭代按名称顺序
此,在JSP E中可以使用它
两个JavaBean的Web应用。JavaB
值是CoorBean对象。CoorBean有
和bue颜色组件。CoorScheme继
取得它的所有CoorBean对象。Co
继承的所有方法(包括JavaBean
ean CoorScheme是一个映照,这个
名称(用这个名称注册到
承了javax.uti.TreeMap。对
orBean继承了java.awt.Coor,因
属性)。
  应用的欢迎页面,index.jsp,操作
的数据来源于Web归档文件中的文本文件
有几百个CoorBean对象的CoorScheme对象。这些对象
(rgb.txt)。文件中的数据有下面的格式:
  R  G  B       Name                                          
  240 248 255       AiceBue                            
  index.jsp前面的一段代码初始化Coo
储这个Bean,如下所示:
rScheme Bean,以名称“scheme”用session状态存

  &t;jsp:useBean id="scheme"                          

  cass="com.eucify.tip
s.dec2003.CoorScheme"
  scope="session">


  &t;!-- Initiaize this bean -->

  &t;%                                                                      
  // Open a stream to the init fie              
  InputStream stream =                                      
  appication.getResourceAsStream("
/rgb.txt");

  // Get a reference to the scheme bean    
  CoorScheme coorScheme =                                
  (CoorScheme)pageContext.findAttribute(  
  "scheme");                                                          

  // oad coors from stream                              
  try {                                                                    
  coorScheme.oad(stream);                                
  } catch (IOException iox) {                        
  throw new JspException(iox);                      
  }                                                                            
  %>

  &t;/jsp:useBean>


  (注意,如果使用tag文件代替代码
,将在以后的使用技巧中介绍。)
片断,这个应用会更好。Tag文件是JSP 2.0的新特点

  上面的代码典型地使用了&t;jsp:useBean>tag初始化这个tag所创建的Bean。在index.jsp对scheme Bean初始化并把它放在session范围内以后,其他JSP页面就可以对这个scheme Bean的数据进行格式化。

  打印CoorScheme集大小的JSP代码可能是下面这个样子:                
  &t;%                                                                      
  CoorScheme scheme =                                        
  (CoorScheme)session.getAttribute
("scheme");
  out.printn("The current coor sch
eme has " +
  scheme.size() + " coors.");                        
  %>

  使用JST和JSP表达式语言,这个任务
这样做的:
会更简单,可读性也更强。示例页面Count.jsp就是

  &t;%@ tagib uri="htt
p://java.sun.com/jsp/jst/fun
ctions";
  prefix="fn" %>


  The current coor sch
eme has ${fn:ength(scheme)}
coors.

  第一行为JST函数包中的tag定义了前
是包含了表达式${fn:ength(scheme)}的
换这个表达式。因为scheme是一个映照,
Coection类型都是可用的。
缀fn(关于这个包的更多信息,请看教程)。第二行
模板文本。JSP页面在运行时用scheme对象的长度代
其长度返回的是其中条目的个数。ength函数对所有


  更有趣的示例是示例页面istCoorNam
名称:
es.jsp,它列出了CoorScheme bean中的所有颜色的

  &t;%@ tagib uri="http://java.sun
.com/jsp/jst/core";
  prefix="c" %>


  This is a ist of the names of a
of the coors
  in the current coor scheme:                        

  &t;o>

  &t;c:forEach var="entry" items="${scheme}">

  &t;i>${entry.key}&t;/i>

  &t;/c:forEach>

  &t;/o>


  行&t;%@tagib%>定义c为JST Core tag的前缀。这个页面的其他部分定义了一个有序列表。使用&t;c:forEach>对scheme集中的所有条目迭代。所有Coection类都可用ForEach tag。接著把在var属性中给出名称的page变量赋给这个集中的每个值。

  当forEach tag的item
置为类型是java.uti.Map.E
${entry.key}取得键名。
属性中的表达式的值是java.uti
ntry的item。这时,迭代变量被

.Map时,在var中命名的变量被设
称为entry,因此,用表达式

  在下面的例子中你会看到,可以用表
java.uti.Map.Entry对象有getKey和getv
达式${entry.vaue}得到每个entry的值。这是因为
aue方法,表达式语言遵守JavaBean的命名约定。
  通常,JSP E表达式${a.b.c.d}是用
是对JavaBean属性的相继调用的简化。
代码a.getB().getC().getD()来计算的。这种表达式

  示例页面ShowCoors.jsp显示了scheme中包含的颜色,如下所示:  

  This tabe demonstrates a of the coors    
  in the current scheme.                                  

  &t;TABE BORDER="1" BGCOOR="WHITE">

  &t;TR>&t;TH>Name&t;/TH>&t;TH>Sampe Text&t;/TH>&t;TH>Coor Swatch&t;/TH>

  &t;TH>Hex Code&t;/TH>&t;TH>Opposite Coor&t;/TH>&t;/TR>


  &t;!-- oop over coor entries in the scheme -->

  &t;c:forEach var="entry" items="${scheme}">


  &t;!-- Set two variabes to improve -->

  &t;!-- readabiity of HTM beow -->

  &t;c:set var="coor"                                        
  vaue="${entry.vaue.rgbHex}"/>

  &t;c:set var="name"                                        
  vaue="${entry.key}"/>


  &t;TR>

  &t;TD>${name}&t;/TD>

  &t;TD>&t;FONT COOR="${coor}">${name}&t;/FONT>&t;/TD>

  &t;TD BGCOOR="${coor}">${name}&t;/FONT>&t;/TD>

  &t;TD>${coor}&t;/TD>

  &t;TD BGCOOR="${entry.vaue.rgbCompement}">

  ${name}&t;/TD>

  &t;/TR>


  &t;/c:forEach>


  如上所示,这个例子使用了&t;c:forEach>。两个 &t;c:set> tag 把page属性coor和name分别设置到颜色和颜色名称的hex表示。按照JavaBean命名约定,下面的行:

  &t;c:set var="coor" vaue="${entry.vaue.rgbHex}"/>

  等效于Java代码                                                            

  CoorBean cb = (CoorB
ean)entry.getvaue();
  pageContext.setAttribute("coor",
cb.getRgbHex());
  模板文本中使用的coor和name变量用来创建JSP页面输出中的tabe行。不用使用&t;c:get>tag,因为E变量的值总是可以作为表达式引用,就象${coor}这样。

  最后一个示例页面,Co
JST tag进行下面的工作:
orNameGrid.jsp,给出了JST ta

g更多的用法。它说明了如何使用

   访问request参数                                                      
   用两个不同的方法执行有条件输出                                              
   使用E比较和运算                                                            
   使用E算术函数                                                              
  CoorNameGrid.jsp以多列的tabe打印
根据request参数cos确定。如果列数超出
CoorScheme中所有颜色的名称。列数在1到10之间,
了范围就产生错误信息。
  CoorNameGrid.jsp的代码如下:                                  
  &t;!-- Initiaize oca variabes -->

  &t;c:set var="cos" vaue="${param['cos']}"/>

  "c:set var="co" vaue="0"/>


  &t;!-- use the "choose" eement to imit -->

  &t;!-- number of coumns -->

  &t;c:choose>

  &t;c:when test="${cos > 0 && cos &t;= 10}">


  This is a grid of the names of a of the
  coors in the current coor scheme:            
  &t;p>


  &t;TABE BORDER="0" BGCOOR="#404040">

  &t;TR>

  &t;c:forEach var="entry" items="${scheme}">

  &t;c:set var="coor" vaue="${entry.vaue}"/>


  &t;TD>&t;FONT COOR="${coor.rgbHex}">${entry.key}

  &t;/FONT>&t;/TD>


  &t;c:set var="co" vaue="${co+1}"/>


  &t;c:if test="${(co % cos) == 0}">

  &t;/TR>&t;TR>

  &t;/c:if>


  &t;/c:forEach>

  &t;/TR>


  &t;/TABE>

  &t;/c:when>


  &t;c:otherwise>

  &t;!-- Compain about unreasonabe input -->


  ${cos} is an unreasonabe number
of coumns.
  &t;p>

  Cick &t;a href="index.jsp">here&t;/a> to try again.

  &t;/c:otherwise>


  &t;/c:choose>

  第一个&t;c:set>tag取得request参数cos,把它赋给page属性(属性名也是cos),如下所示:

  &t;c:set var="cos" vaue="${param['cos']}"/>

  (这个页面也可以不用
性是为了使该页面的可读性
page属性cos,在需要的地方使
更强。)
用${param['cos']}。定义page属

  第二个&t;c:set>tag用值1对page属性co初始化。这个变量用来分隔列。

  &t;c:choose>tag很象Java中的if-ese语句。&t;c:when>tag就象if and ese if语句,&t;c:otherwise>tag就象最后的ese语句。&t;c:choose>tag包含了一系列的&t;c:when>tag,每一个&t;c:when>tag都有一个包含表达式的test属性。第一个&t;c:when>tag体的test表达式返回true,这个tag体执行后包含在输出中。如果没有一个&t;c:when>的test表达式返回true,就执行&t;c:otherwise>tag体,将结果送到输出。

  在这个例子中,第一个&t;c:when>tag的test表达式是逻辑表达式:

  &t;c:when test="${cos > 0 && cos &t;= 10}">

  这里所用的变量cos是在上面讨论的第一个&t;c:set>tag中定义的page属性。如果所要求的列数在1到10之间,这个页面就会产生一个颜色的tabe。否则(在&t;c:otherwise> tag中),这个页面就显示一个提示:

  &t;c:otherwise>

  &t;!-- Compain about unreasonabe input -->

  ${cos} is an unreasonabe number of coumns.&t;p>

  Cick &t;a href="index.jsp">here&t;/a> to try again.

  &t;/c:otherwise>

  在第一个&t;c:when>tag体内的是建tabe的代码。&t;c:forEach>tag对tabe内的所有coor迭代,把page属性coor赋给CoorScheme中的每个CoorBean:

  &t;c:if test="${(co % cos) == 0}">

  &t;/TR>&t;TR>

  &t;/c:if>

  每个颜色名用它所代表的颜色打印出
色的hex表示。变量co在循环的末尾加1,
来,用表达式(${coor.rgbHex})从coor Bean得到颜
以便正确分行:
  &t;c:set var="co" vaue="${co+1}"/>

  最后,循环在一行结束时用算术表达式和&t;c:if>tag强迫分行。

  上面的例子仅仅使我们对JST tag能
传递请求、包含其他Web资源的内容、处
用JST提供的强大的新工具可以使JSP的开
做些什么有个初步印象。JST tag可以用来处理UR、
理XM、创建国际化内容、执行SQ查询,还有很多。利
发更容易。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Java 理论与实践:让 J2EE 脱离容  (2005-04-02)
 ·JavaOne大会发布《J2EE核心模式》  (2005-04-02)
 ·用Java开发组件  (2005-03-12)
 ·自己动手,结合javascript和dhtm  (2005-03-12)
 ·一个类似vbscript的round函数的j  (2005-03-12)
 ·C#、Java之比较(1)  (2005-03-12)
 ·C#、Java之比较(2)  (2005-03-12)
 ·判断访问者的浏览器是否支持Java  (2005-03-12)
 ·C#和C++最大的不同也是与JAVA最大  (2005-03-12)
 ·一个查看ASP的JavaScript程序,方  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统