帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
带你步入J2EE殿堂:最易懂的J2EE实例
作者:佚名 发布时间:2005-04-02 来源:不详
  CSDN - 技术频道 - 文档中心 - Java                           


  标题 带你步入J2EE殿
堂:最易懂的J2EE实例 CharlyO
nline(原作)



  关键字 J2EE Java J2E
E安装与下载 J2EE模型 J2EE构
建企业模型 Charly







  J2EE构建企业模型(一)                                                    



  Windows2000下安装J2EE和部署J2EE应用程序                    

  Charly(09/05/2001)                                          



  1. 安装                                                                    

  可以从以下网址下载一
p://java.sun.com/Downloa
win.exe&config-file=j2sd
cked=unknownhostname&DEB
可能是Sun的页面更新了的
com/j2ee/j2sdkee-beta/in
,特别是Sun将J2EE SDK升
新下载的J2EE SDK之前请先
按安装步骤安装好J2EE SDK
个J2EE SDK(j2sdkee-1_3-beta
d5?referer=&download-name=j2
kee-1_3-beta2.config&platfor
UG=&document=license&button=
缘故,不要紧,可从这里下载:
dex.html 。建议从后面那个地
级了的话。也许你已装了旧版的
卸载或删掉旧版的J2EE SDK。运
。这里假设你的J2EE SDK安装在
2-win.exe):htt
sdkee-1_3-beta2-
m=win&domain-che
ACCEPT 。如果这个地址不行,很
http://java.sun.
址下载,这样可有更多的选择余地
J2EE SDK 产品,如果是,在安装
行j2sdkee-1_3-beta2-win.exe,
:C:j2sdkee1.3 目录下。



  2. 设置环境变量                                                            

  在运行J2EE SDK之前,你必须设置以下环境变量:                          

  J2EE_HOME - 你的J2EE SDK所安装的
目录。如本例中的:C:j2sdkee1.3 。

  JAVA_HOME - 你的Java 2 SDK 所安装的目录。             

  PATH - 设置为你安装J2EE SDK目录
下的bin目录。如本例的的:C:j2sdkee1.3bin 。

  ClassPath - 增添%J2E
C:j2sdkee1.3libj2ee.j
E_HOME%libj2ee.jar到ClassP
ar
ath中。本例中也可写为:




  3. 运行J2EE                                                            

  Dos命令行敲入以下命令:                                                    

  %J2EE_HOME%binj2ee -verbose                    

  显示以下信息表示运行成功:(不同的版本显示可能不同)                          

  J2EE server listen port: 1050                    

  Naming service started:1050                        

  Binding DataSource, name = jdbc/
udscape:rmi:CloudscapeDB;create=true
EstoreDB, url = jdbc:clo


  Binding DataSource,
loudscapeDB;create=true
name = jdbc/DB2, url = jdbc:

cloudscape:rmi:C


  Binding DataSource,
e:rmi:CloudscapeDB;creat
name = jdbc/Cloudscape, url
e=true
= jdbc:cloudscap


  Binding DataSource,
pe:rmi:CloudscapeDB;crea
name = jdbc/InventoryDB, url
te=true
= jdbc:cloudsca


  Binding DataSource, name = jdbc/
pe:rmi:CloudscapeDB;create=true
DB1, url = jdbc:cloudsca


  Binding DataSource, name = jdbc/
XACloudscape, url = jdbc/XACloudscape__xa

  Binding DataSource,
OM.cloudscape.core.Remot
name = jdbc/XACloudscape__xa
eXaDataSource@330913
, dataSource = C


  Starting JMS service
... Initialization complete
- waiting for client requests

  Binding : < JMS Destination : jms/Queue , javax.jms.Queue >


  Binding : < JMS Destination : jms/Topic , javax.jms.Topic >


  Binding : < JMS Cnx Factory : jms/TopicConnectionFactory , Topic , No properties >


  Binding : < JMS Cnx Factory : TopicConnectionFactory , Topic , No properties >


  Binding : < JMS Cnx Factory : jms/QueueConnectionFactory , Queue , No properties >


  Binding : < JMS Cnx Factory : QueueConnectionFactory , Queue , No properties >


  Starting web service at port:8000            

  Starting secure web service at p
ort:7000

  Apache Tomcat/4.0-b4-dev                              

  Starting web service at port:9191            

  Apache Tomcat/4.0-b4-dev                              

  J2EE server startup complete.                    



  启动成功后,在IE浏
主 页 信 息 。
览 器 中 访 问 HTTP://localh

ost:8000 可 以 看 到 默 认 的




  4. 编写和运行HelloWorld程序                                      

  J2EE应用程序一般使用
也少不了EJB的作用。本例
Hello,Remote Object”。
客户端收到此应答后打印它
RMI(远程方法调用)来完成客
为一个J2EE应用程序:客户端向
服务器收到该问候语后打印该问

户端与服务器的交互。当然,其间
服务器发送一个问候语:“
候语,并返回一字符串作为应答。




  RemoteInterface.java                                      



  /**                                                                        

  * 第一步:                                                                  

  * 定义一个新的接口继承javax.ejb.

EJBObject。新定义的接口中的每一个方法都必须抛


  * java.rmi.RemoteException异常。                    

  */                                                                          

  public interface Rem
oteInterface extends javax.e
jb.EJBObject

  {                                                                            

  public String message(String str
)throws java.rmi.RemoteException;

  }                                                                            



  RemoteObject.java                                            



  /**                                                                        

  * 第二步:                                                                  

  * 定义一个类来实现ja
口中所定义的方法。
vax.ejb.SessionBean接口。并

在该类中实现在第一步中编写的接


  */                                                                          

  public class RemoteO
bject implements javax.ejb.S
essionBean

  {                                                                            

  public String message(String str
)throws java.rmi.RemoteException

  {                                                                            

  System.out.println(
//打印(从客户端)接收到
"Remote Object Received From
的字符串。
Client: ""+str+""");


  return "Hello,I'm Remote Objec
//返回一应答字符串。
t,I received your message: '"+str+"'";


  }                                                                            



  public RemoteObject() {}                              

  public void ejbCreate() {}                          

  public void ejbRemove() {}                          

  public void ejbActivate() {}                      

  public void ejbPassivate() {}                    

  public void setSessionContext(ja
vax.ejb.SessionContext sc) {}

  }                                                                            



  RemoteHome.java                                                



  /**                                                                        

  * 第三步:                                                                  

  * 定义一个类继承javax.ejb.EJBHome 。                      

  */                                                                          

  public interface Rem
oteHome extends javax.ejb.EJ
BHome

  {                                                                            

  RemoteInterface crea
b.CreateException;
te()throws java.rmi.RemoteEx

ception,javax.ej


  }                                                                            



  Client.java                                                        



  /**                                                                        

  * 第四步:                                                                  

  * 定义客户端类。                                                            

  */                                                                          

  public class Client                                        

  {                                                                            

  public static void main(String[] args)  

  {                                                                            

  try                                                                        

  {                                                                            

  javax.naming.Context initContext
=new javax.naming.InitialContext();

  Object obj=initContext.lookup("
象。
HelloWorld"); //远程查找,由名字得到对应的对


  RemoteHome home=(Rem
w(obj,RemoteHome.class);
oteHome)javax.rmi.PortableRe

moteObject.narro


  RemoteInterface remote=home.create();    

  String receiveFromRe
调用
mote=remote.message("Hello,

Remote Object!"); //远程方法


  System.out.println(
eceiveFromRemote+"""
"Client Received From Remote
);
Object: ""+r


  }                                                                            

  catch(Exception e)                                          

  {                                                                            

  e.printStackTrace();                                      

  }                                                                            

  }                                                                            

  }                                                                            



  假设以上四个Java文件存于C:HelloWorld下,编译它们如:C:HelloWorld>javac *.java 。




  5. 部署应用程序                                                            

  启动Application Dopolyment Tool:新开一个Dos窗口,键入以下命令,%J2EE_HOME%bindeploytool 。该工具启动速度可能比较慢,要耐心等待。启动成功后会出现主界面(此时不要关闭Dos窗口)。在该界面中选 择 File菜 单 ,再选New Application项。在 Application File Name 输 入 :C:HelloWorldHelloWorld.ear 。在 Application Disply Name 输 入 你所喜欢的显示名如:HelloWorld。点 击 OK,在主界面的树形结构Files-->Applications下将增加新的一项:HelloWorld。这意味着产生了一个新的应用程序。接下来我们要做的就是部署该应用程序。在主界面的树形结构下选中HelloWorld,然后再在主界面的File菜单中选取New-->Enterprise Bean,在弹出的名为“New Enterprise Bean - Introduction”窗口中选取Next跳过第一步,在接下来的一步中,Create New EJB File in Application项中选HelloWorld,在EJB Display Name中填上你喜欢的名字如:Hello World EJB,点击Edit按钮,在弹出的窗口中,Start Directory中填:C:HelloWorld,在Available Files中展开树形结构C:HelloWorld,选取RemoteInterface.class、RemoteObject.class、RemoteHome.class、Client.class四项,点Add按钮添加,然后按OK确定。此时在Contents框中增加了该四个class。点Next进入下一步。Session项选Stateless,意为不保存session状态。Enterprise Bean Class选RemoteObject。Enterprise Bean Name中填上你喜欢的名字如:Hello World Bean。Remote Home Interface中选RemoteHome,Remote Interface中选RemoteInterface。选Next进入下一步。接下来的步骤可直接点Finish。这时主界面的树形结构中Files-->Application-->Hello World中将出现Hello World EJB-->Hello World Bean子项。在主界面的树形结构下选中Hello World,然后再在主界面的Tools菜单中选取Deploy,将弹出新的窗口名为“Deploy Hello World - Introduction”。Object to deploy中选Hello World,Target server中选localhost,选中Retuen Client Jar,在Client Jar File Name中填上:C:HelloWorldHelloWorldClient.jar。选Next进入下一步,在Application框的JNDI Name框中双击并填上HelloWorld,注意必须与Client.java中Object obj=initContext.lookup("HelloWorld")的“HelloWorld”保持一致。点Next进入下一步。点Finish完成。这时将出现Deployment Progress窗口。如果有误,该窗口将出现异常信息。如果一切正常,点OK便完成了部署工作。




  6. 运行应用程序                                                            

  新开一个Dos窗口。进入C:HelloWorldClasses目录下运行:C: HelloWorldClasses>java -classpath %J2EE_HOME%libj2ee.jar;.;HelloWorldClient.jar; Client 。运行成功则出现如下信息:Client Received From Remote Object: "Hello,I'm Remote Object,I received your message: 'Hello,Remote Object!'" 。而服务端Dos窗口(j2ee -verbose)中出现如下信息:Remote Object Received From Client: "Hello,Remote Object!" 。




  本程序很适J2EE的入门
保无误。如不能正常运行,
Copy到Dos窗口中运行,某
程序部署不成功,可以使用
个应用程序(如:Hello Wo
,简单而明了。本程序由Charly
请检查你的环境变量设置是否正
些字符可能受中文全角字符的影
Application Deployment Tool
rld)或其子项删掉。此工具的
设计编写,并由其本人多次运行确
确,最好不要直接将以上各命令
响而不被识别。另外如果某个应用
主界面的Edit菜单的Delete项将这
右键功能几乎没有,愦憾。





  7. 总结                                                                    



  J2EE模型:                                                                




  Client-Side Server-S
ide Server-Side Enterprise

  Presentation Presentation Busine
ss Logic Information System

  +-------------+ +---
-------+ +----------+ +-----
-----+

  | Browser | | Web | | EJB | | |                

  | | | Server | | Container| | |                


  | +-------+ | | +---
---+ | | +------+ | | |

  | |Pure | | | |JSP | | | |EJB | | | |    

  | |HTML | | | | | | | | | | | |                

  | +-------+ | | +------+ | | +--
----+ | | |

  | |<:::::>| |<:::::>| |<:::::>|+--------+|



  | +-------+ | | +---
---+ | | +------+ | || ||

  | |Java | | | |JSP | | | |EJB | | || ||

  | |Applet | | | | | | | | | | || ||        

  | +-------+ | | +------+ | | +--
----+ | || ||

  +-------------+ | | | | ||Database||      

  | |<::::::|::::::::::|::::::>|| & ||


  +-------------+ | | | | ||legacy ||       

  | Desktop | | | | | ||Systems ||              


  |+-----------+| |+--
------+| | +------+ | || ||

  ||Java ||<:::::>||Java ||<:::::>| |EJB | |<:::::>|| ||



  ||Application|| ||Se
rvlet || | | | | || ||

  |+-----------+| |+--------+| | +
------+ | |+--------+|

  +-------------+ | | | | | |                        

  | | | | | |                                                        

  +-------------+ | | | | | |                        

  |Other Device | | | | | | |                        


  | +-------+ | |+----
----+| |+--------+| | |

  | |J2EE | |<:::::>||J2EE ||<:::::>||J2EE ||<:::::>| |


  | |Client | | ||Platform|| ||Pla
tform|| | |

  | +-------+ | |+--------+| |+---
-----+| | |

  +-------------+ +---
-------+ +----------+ +-----
-----+



  Sun为rmi、Servlet(JSP)、JavaBean
是一个大的综合和封装。它的出现应该说
年(2000年)在大中华范围的书店中都少
成明日黄花,不过Microsoft C#的推出是
,Sun自然对J2EE寄予厚望。应该说,Sun
没有其它哪门语言能与之匹敌。J2EE的设
结构。客户端可包括浏览器,桌面应用程
和应用(Application)服务,这分别是S
向服务端提出请求(Web服务或应用服务
支持,服务端则直接或在EJB支持下来操
客户端;如果不需要后台企业信息系统(
请求,并将结果返回至客户端。当然其间
存 取 控 制 规 则 。应该说,J2EE的We
有数不尽的优势:速度快(比ASP、PHP可
Java的规格和严谨)、成熟(实际应用已
也算不错,只是其使用的标准界面Swing
的程序哪个不存在以下情形:程序启动时
有些夸张,但不过分);界面刷新慢,明
这与软件生产者有关,但Swing要负一部
Oracle的Jdeveloper、IBM的Websphere都
升硬件来迷补其不足(虽然至今还是不足
或其中的某一环节,用起来有如此顽症,
,所以很慢?对不起,人家不会关心你用
外,J2EE的应用服务应该说是很不错的,
等Java技术摇旗呐喊已有多年。J2EE的出现不可谓不
是这些技术走向成熟的结果。举个例子,JSP技术去
有介绍,几近没有。现在业已铺天盖地。ASP似乎已
否会让它有所改变?有待观察。面对竞争对手的压力
的Java设计一直都很规格和严谨。在这方面,当今还
计自然也是大手笔。J2EE被设计成多层次的分布式的
序,甚至其它设备如PDA程序。服务端可以为Web服务
ervlet(JSP)和rmi技术的体现。客户端通过网络协议
),该请求如果需要后台企业信息系统(如数据库)
作后台企业信息系统(如数据库),并将结果返回至
数据库)支持,服务端则直接或在EJB支持下处理该
各环节都少不了安全控制:J2EE的标 准 的 公 开
b应用会取得很大成功,因为Servlet(JSP)在Web方面
能快好几倍)、跨平台、稳定(这不能不说是得益于
久且应用广泛)、功能强大。而J2EE的应用服务应该
实在是太耗资源且效率低。君不见,当今用Swing写
象国产拖拉机,轰隆轰隆地响--那是读硬盘的声音(
显的延时;操作不方便,快捷键和右键功能少(当然
分责任)。此如说Sun的Forte4Java、J2EE SDK、
有此症。作为程序员,我们也许还能接受,以不断提
)。但作为客户企业,你用Swing给人家做了一个ERP
怎么向人家解释?向他(她)说,这是用Swing写的
什么写的,人家给你的也许只有抱怨。除了界面部分
如分布式计算。







  本文结束,别忘了给投一票。有时间
(CharlyOnline):http://www.csdn.net/
也请参加Java 在中国----行情大调查
expert/TopicView.asp?id=200301













  对该文的评论                                                                 

  weaponofpower (2001-11-23 15:26:30)       



  为什么会出现错误: java.rmi.Acce
exception is: org.omg.CORBA.NO_PERMI
org.omg.CORBA.NO_PERMISSION: minor c
java.lang.Class.newInstance0(Native
ss.newInstance(Unknown Source) at co
iiop.messages.ReplyMessage_1_2.getSy
com.sun.corba.ee.internal.iiop.Clien
ClientResponseImpl.java:108) at com.
A.GenericPOAClientSC.invoke(GenericP
org.omg.CORBA.portable.ObjectImpl._i
_RemoteHome_Stub.create(Unknown Sour
ssException: CORBA NO_PERMISSION 0 No; nested
SSION: minor code: 0 completed: No
ode: 0 completed: No at
Method) at java.lang.Cla
m.sun.corba.ee.internal.
stemExc eption(ReplyMessage_1_2.java:93) at
tResponseImpl.getSystemException(
sun.corba.ee.internal.PO
OACli entSC.java:136) at
nvoke(Unknown Source) at
ce) at Client.main(Client.java:10)



  jzp1974 (2001-10-23 22:51:10)                   



  不错,不过我最后有如下错误: C:HelloWorld>java -classpath %J2EE_HOME%libj2ee.jar;.;HelloWorldClient.jar C ient java.rmi.AccessException: CORBA NO_PERMISSION 0 No; nested exception is: org.omg.CORBA.NO_PERMISSION: minor code: 0 completed: No org.omg.CORBA.NO_PERMISSION: minor code: 0 completed: No at java.lang.Class.newInstance0(Native Method) at java.lang.Class.newInstance(Class.java:237) at com.sun.corba.ee.internal.iiop.messages.ReplyMessage_1_2.getSystemEx eption(ReplyMessage_1_2.java:93) at com.sun.corba.ee.internal.iiop.ClientResponseImpl.getSystemException ClientResponseImpl.java:108) at com.sun.corba.ee.internal.POA.GenericPOAClientSC.invoke(GenericPOACl entSC.java:136) at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:459) at _RemoteHome_Stub.create(Unknown Source) at Client.main(Client.java:10)




  chch1979 (2001-10-10 17:52:06)                 



  very good. But I want to ask a question as follows: j2ee的服务和配置已完成,能正常浏览j2ee的首页。但 when compile the four java files,occur errors. D:MyTestj2ee>javac *.java RemoteHome.java:1: 不能解析符号符号:类 EJBHome 位置:包 in ejb public interface RemoteHome extends javax.ejb.EJBHome ^ RemoteInterface.java:1: 不能解析符号符号:类 EJBObject 位置:包 in ejb public interface RemoteInterface extends javax.ejb.EJBObject ^ RemoteHome.java:3: 不能解析符号符号:类 CreateException 位置:包 in ejb RemoteInterface create()throws java.rmi.RemoteException,javax.ejb.Creat ion; ^ RemoteObject.java:1: 不能解析符号符号:类 SessionBean 位置:包 in ejb public class RemoteObject implements javax.ejb.SessionBean ^ RemoteObject.java:14: 不能解析符号符号:类 SessionContext 位置:包 in ejb public void setSessionContext(javax.ejb.SessionContext sc) {} ^ 5 个错误 Why? Please help me,thanks!




  CharlyOnline (2001-9-10 18:48:53)           



  to SirBean 你先下载一个j2sdk1.3
错时请给出更详细的描述,如操作执行到
的解决.正常情况下应该是不会有错的.待
吧,都什么年代了,对吧.下载和安装都很快的.另外出
了哪一步,在执行什么操作时出错.这样才有助于问题
续...



  SirBean (2001-9-8 23:11:51)                       



  兄弟,我这里有状况! 代码如下: RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.narrow(obj,RemoteHome.class); 错误提示: ------------------------------------------- javax.naming.CommunicationException: Can't find SerialContextProvider at com.sun.enterprise.naming.SerialContext.getProvider(SerialContext.java:60) at com.sun.enterprise.naming.SerialContext.(SerialContext.java:79) at com.sun.enterprise.naming.SerialInitContextFactory.getInitialContext(SerialInitContextFactory.java:54) at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.(Unknown Source) at Client.main(Client.java:11) 我得环境:j2sdkee1.2.1,jdk1.3 如何解决?




  CharlyOnline (2001-9-7 16:19:04)             



  帮忙顶一点它:(Java 在中国----行
http://www.csdn.net/expert/TopicView
情大调查(CharlyOnline))
.asp?id=200301



  CharlyOnline (2001-9-7 16:12:00)             



  to panan 就是设置完
? 你的Win2000真有问题!!
系统path,classpath什么的之后

得重启(可能是我的2000有问题)




  panan (2001-9-7 14:59:33)                           



  不错,安装配置并测试
能是我的2000有问题),de
,都ok了,就是设置完系统path
ploy的时候得连着服务器。
,classpath什么的之后得重启(可




  AmpyShccl (2001-9-7 14:39:58)                   



  i like it very good                                       



  duker (2001-9-7 9:35:39)                             



  不错,补充几点。。 ejb和java bea
delphi中的vcl的技术,主要是用来构建
算法)的服务器端的组件。 rmi是java平
单独使用,在ejb之前也有一些对象系统
。ejb1.1的规范中要求实现支持rmi,但
是最著名的open source application se
倡corba主要是为了互操作性的考虑---不
的基于 corba的系统,但是实践当中,co
corba,完全是rmi。在jboss 中,client
client----ejb之间的通讯都是rmi的调用
n是两种不同用途的组件技术,java bean是类似
用户界面的 ejb是封装商业逻辑(也就是处理数据的
台上面实现分布式对象系统的基础,rmi可以脱离ejb
是构建在 rmi基础上,但ejb出来之后就销声匿迹了
是现在sun倾向于corba,所以有了rmi-iiop技术,但
rver jboss完全是rmi,没有corba。实际上 sun 提
仅是各个产商的application server,而且是和以前
rba的互操作性是一个问题,所以jboss才不理会
--jndi provider,ejb---jndi provider,

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·带你走进ASP.NET(3)  (2005-03-12)
 ·带你走进ASP.NET(2)  (2005-03-12)
 ·带你走进ASP.NET(1)  (2005-03-12)
 ·带你走进ASP.NET(4)  (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实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统