J2EE的另一张面孔:基于SWT和Java Web Start的应用程序解决方案

J2EE的另一张面孔:

基于SWT和Java Web Start的应用程序解决方案

1部分

 

李凤桐

(河北财华信息技术有限公司,河北石家庄 050000)

 

摘要:作为一种优秀的程序设计语言,Java在许多方面具有突出的优越性。特别是在企业级应用领域,J2EE的地位至今尚无人能够替代。在实际开发过程中,构建于J2EE体系之上的应用系统常常采用基于浏览器的B/S结构来实现前台表现。这种结构不但免去了繁琐的程序分发工作,而且使得应用系统易于维护和升级。但是,在获得上述优点的同时,它也带来了诸如界面控制过于复杂、人机交互方式不够友好等缺点。本文从解决现有J2EE开发模式缺点的角度入手,探讨了如何利用Eclipse项目的SWT类库和Sun公司的Java Web Start技术来实现集C/S与B/S两种结构的优点于一身的应用程序解决方案。

关键词:J2EE、SWT、Java Web Start、C/S、B/S

 

从诞生至今短短几年时间,Java凭借其特有的魅力,受到了越来越多的青睐。无论是大型企业应用系统,还是移动信息设备开发,到处都可以见到Java的身影。在企业应用领域中,J2EE作为一种成熟的系统架构,已经成为众多大企业进行应用开发的首选。

选择J2EE进行实际开发时,通常采用的是三层或多层架构,后端由EJB负责同数据库交互,而前端面向终端用户的表现则由Java应用程序或基于浏览器的Web页面来实现。但是经过实践检验,发现这两种表现方式都不是令人十分满意。首先,使用J2SE中标准的GUI(图形用户界面)开发包AWT和SWING编写出的Java应用程序,无论外观还是速度,都难以让人接受。它们的外观总是和同一操作系统平台下的其它软件显得格格不入,对机器配置的需求也似乎永无止境。其次,基于浏览器的Web方式虽然免去了繁琐的程序分发工作并且使得应用系统易于维护和升级,但是html页面对复杂应用逻辑的薄弱的表现方式,又使得编写操作性良好的界面成为一项极为繁重的工作。为此,我们需要另外寻找一种更好的解决方案。

 

1:J2EE中的容器、组件与服务

 

鱼,我所欲也

2001年11月,IBM宣布将价值4千万美元的软件捐给开放源码的Eclipse项目。Eclipse是替代IBM的Visual Age for Java的下一代IDE(集成开发环境),但它的目标似乎不仅仅是成为专门开发Java应用的IDE环境。根据Eclipse的体系结构,通过扩展插件,它将能够应用到任何语言的开发。要想更多地了解Eclipse,可以访问Eclipse的官方网站http://www.eclipse.org/

使用过Eclipse的程序员多数都会惊叹于它的界面表现。的确,无论是外观风格还是运行速度,几乎没有人会认为这是用Java写出来的:一样熟悉的菜单,一样熟悉的工具条,一样熟悉的按钮和对话框……而这都要归功于SWT!

 

 

2:Eclipse集成开发环境

 

SWT(Standard Widget Toolkit,标准窗口小部件工具箱)本身仅仅是Eclipse组织为了开发Eclipse的IDE环境所编写的一组底层图形界面API,原本并不提供单独的SWT包下载。但是随着时间的推移,越来越多的开发人员发现SWT无论是在外观上还是在性能上,都已经超越了Sun公司提供的AWT和SWING。根据Eclipse官方描述,SWT组件的设计初衷是为开发人员提供一种高效的、可移植的、并且能够利用操作系统UI特性的实现方式。通过JNI(Java Native Interface,Java本地化接口)技术,SWT将操作系统所提供的各种GUI组件取来“为我所用”。只有那些操作系统中不提供的组件,SWT才自己去做一个模拟的实现。这种设计理念不但使应用程序在外观上能够同本地操作系统融为一体,同时也极大地提高了图形化程序的运行速度,从而很好地克服了AWT和SWING的先天缺陷,受到了广大Java程序员的青睐。

在使用上,SWT同其他第三方类库没有什么区别。从http://download.eclipse.org/downloads/index.php我们可以下载到最新的SWT包,解压缩后就能够得到swt.jar,至于具体的环境配置及类导入这里就不赘述了。唯一需要注意的一点就是JNI本地化库文件。因为SWT使用了JNI技术,所以同时也要找到相对应的JNI本地化库文件。由于版本和操作系统的不同,本地化库文件的名称会略有差异。以Windows平台为例,最新的SWT包所对应的动态链接库为swt-win32-3034.dll。

 

熊掌,亦我所欲也

无论采用何种语言,基于C/S(客户机/服务器)模式开发的应用程序总是会有一些令人很不愉快的特性。与B/S(浏览器/服务器)模式相比,C/S模式虽然具有人机界面友好、交互能力强等优点,但是其繁琐的发布方式却使得程序的部署、维护与升级成为一项让人头疼的工作。当用户数量超过两位数时,那简直就是一场噩梦。Java Web Start或许就是这一噩梦的终结者。

 

 

3:Java Web Start应用程序管理器

 

Java Web Start是Sun公司推出的应用部署技术,它能够使用户不必经过复杂的安装过程就可以下载并运行所需的应用程序。通过Java Web Start,应用程序的安装运行被简化成了在Web页面上对一个超级链接的点击。Java Web Start将程序运行所需的所有文件下载到本地计算机并缓存,这样就可以在任何时候通过桌面上的快捷方式或浏览器中的超级链接再次启动应用程序。同时,它还负责程序版本的自动检测。无论使用哪种方式启动应用程序,Java Web Start都能确保将最新版本呈现给用户,而整个过程不需要与用户进行任何交互。要想更多地了解Java Web Start,可以访问http://java.sun.com/products/javawebstart/

最新的Java Web Start的版本号为1.4.2。它是同Java 2 SDK和JRE(Java Runtime Environment,Java运行时环境)捆绑发布的。从http://java.sun.com/j2se/1.4.2/download.html我们可以下载到Java 2 SDK和JRE的安装包。关于Java Web Start技术的具体应用,我们将在后面结合演示工程进行详细介绍。

 

鱼与熊掌不可得兼?

到现在为止,我们已经介绍了用于解决现有J2EE开发模式缺点的两项关键性技术:一是SWT,主要用作客户端程序的界面表现;二是Java Web Start,主要用作客户端程序的网络发布。接下来的问题便是如何将其融合到J2EE的架构之中去使之成为一个完整的解决方案。

J2EE体系结构中,后端由EJB组件负责同数据库交互,前台的客户端则通过JNDI(Java Naming and Directory Interface,Java命名与目录接口)在中间层(应用服务器)上查找并调用所需的功能部件。对于B/S模式的应用来说,上述过程发生在Servlet中:

Context ctx = new InitialContext();

Object objRef = ctx.lookup("MySessionBeanHome");

MySessionBeanHome home = (MySessionBeanHome)

PortableRemoteObject.narrow(objRef, MySessionBeanHome.class);

MySessionBean bean = home.create();

通常情况下,Web容器与JNDI服务是整合在同一个应用服务器中的。因此,上面的代码在创建InitialContext时,并没有显式提供Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL。但是,如果应用程序采用C/S模式来实现,那么就必须要由开发人员为待分发的客户端程序明确提供必要的信息:

Properties properties = new Properties();

properties.put(Context.INITIAL_CONTEXT_FACTORY,

"com.ibm.websphere.naming.WsnInitialContextFactory");

properties.put(Context.PROVIDER_URL, "iiop://localhost:9001");

Context ctx = new InitialContext(properties);

Object objRef = ctx.lookup("MySessionBeanHome");

MySessionBeanHome home = (MySessionBeanHome)

PortableRemoteObject.narrow(objRef, MySessionBeanHome.class);

MySessionBean bean = home.create();

对于不同的JNDI服务,其初始化参数不尽相同。下面给出了一些常见的JNDI服务初始化参数:

·文件系统JNDI服务

java.naming.provider.url=file://c:/temp

java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory

·IBM WebSphere JNDI服务

java.naming.provider.url=iiop://localhost:9001

java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory

·BEA WebLogic JNDI服务

java.naming.provider.url=t3://localhost:7001

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory

·iPlanet目录服务器(LDAP)

java.naming.provider.url=ldap://localhost:389

java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory

需要注意的是,虽然初始化工厂类在程序代码中可能并没有被直接引用,但是实际运行时JVM也会按照名称将其动态装入。因此,开发人员在分发应用的同时,也应确保初始化工厂类对客户端程序来说是可见的。

至此,我们的解决方案已经有了一个比较清晰的框架:后端采用EJB组件同数据库交互,前台客户端采用SWT类库开发并使用Java Web Start进行部署和发布,中间的应用服务器则通过JNDI将此二者联系起来成为一个整体。

 

结束语

本文中,我们对基于SWT和Java Web Start的应用程序解决方案给出了一个大致的实现思路。在下一篇文章里,我们将以Windows平台为例,结合IBM的WSAD 5.0,详细讲述此方案的具体实现细节。

 

参考资料:

·http://java.sun.com/ Java的官方网站

·http://www.eclipse.org/ Eclipse的官方网站

·Eclipse入门 -- Eclipse的使用简介及插件开发,倪大鹏

http://www-900.ibm.com/developerWorks/cn/java/l-eclipse/index.shtml

·SWT:AWT和SWING的强大竞争者,倪大鹏,2003年2月

http://www-900.ibm.com/developerWorks/cn/java/l-swt/index.shtml

 

 

关于作者:

    李凤桐,河北财华信息技术有限公司软件开发人员,热衷与Java有关的一切技术,现主要从事基于J2EE架构的电子政务相关应用的开发工作。

 

联系方式:

    E-mail: phoenixtrees@hotmail.com

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率爬虫,如何写出灵活性高可扩展爬虫都是一项技术活。外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业开发者,比如app开发,web开发,学习爬虫能让你加强对技术认知,能够开发出更加安全软件网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整爬虫程序,无论大小,总体来说可以分成三个步骤,分别是 </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求模拟浏览器行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析将请求下来数据进行过滤,提取我们想要数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储将提取到数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进进行讲解,带领学生完整掌握每个步骤技术。外,因为爬虫多样性,在爬取过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序灵活性,分别是 </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy分布式爬虫Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶知识点我们能应付大量反爬网站,而Scrapy框架作为一个专业爬虫框架,使用他可以快速提高我们编写爬虫程序效率速度。外如果一台机器不能满足你需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值