带你步入J2EE殿堂:最易懂的J2EE实例 |
时间:2014-05-04 10:04:50 来源:不详 作者:佚名 |
CSDN - 技术频道 - 文档中心 - Java
标题 带你步入J2EE殿
| 堂:最易懂的J2EE实例 CharlyO
| nline(原作)
|
关键字 J2EE Java J2E
| E安装与下载 J2EE模型 J2EE构
| 建企业模型 Charly
|
Windows2000下安装J2EE和部署J2EE应用程序 |
可以从以下网址下载一 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 目录下。
|
在运行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中。本例中也可写为:
|
%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
|
Starting web service at port:9191 |
J2EE server startup complete. |
启动成功后,在IE浏 主 页 信 息 。
| 览 器 中 访 问 HTTP://localh
| ost:8000 可 以 看 到 默 认 的
|
J2EE应用程序一般使用 也少不了EJB的作用。本例 Hello,Remote Object”。 客户端收到此应答后打印它
| RMI(远程方法调用)来完成客 为一个J2EE应用程序:客户端向 服务器收到该问候语后打印该问 。
| 户端与服务器的交互。当然,其间 服务器发送一个问候语:“ 候语,并返回一字符串作为应答。
|
* 定义一个新的接口继承javax.ejb. 出
| EJBObject。新定义的接口中的每一个方法都必须抛
|
* java.rmi.RemoteException异常。 |
public interface Rem
| oteInterface extends javax.e
| jb.EJBObject
|
public String message(String str
| )throws java.rmi.RemoteException;
|
* 定义一个类来实现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 void ejbCreate() {} |
public void ejbRemove() {} |
public void ejbActivate() {} |
public void ejbPassivate() {} |
public void setSessionContext(ja
| vax.ejb.SessionContext sc) {}
|
* 定义一个类继承javax.ejb.EJBHome 。 |
public interface Rem
| oteHome extends javax.ejb.EJ
| BHome
|
RemoteInterface crea b.CreateException;
| te()throws java.rmi.RemoteEx
| ception,javax.ej
|
public static void main(String[] args) |
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
|
假设以上四个Java文件存于C:HelloWorld下,编译它们如:C:HelloWorld>javac *.java 。 |
启动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便完成了部署工作。 |
新开一个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项将这 右键功能几乎没有,愦憾。
|
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) |
不错,补充几点。。 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, 。
|
|
|
|
|