前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用。对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servlet、JSP、静态资源等,其中静态资源包括HTML页面、CSS、图片等等。当然还有Portlet、Filter、Listener等,由于不太常用,本文就不涉及这方面的内容了。
一、OSGI Web应用两种开发模式介绍
看过OSGI相关书籍的朋友应该都知道,OSGI Web应用开发有两种模式,第一种模式是在MANIFEST.MF文件中,通过一些元数据头,例如Web-ContextPath、Bundle-ClassPath等將Bundle定义为Web Application Bundle,简称WAB,然后在WAB中,可以像普通Java EE应用一样,在web.xml文件中配置Web应用的信息,然后將项目中所有的Bundle部署到应用服务器即可。由于这种方式依赖于外部的应用服务器,开发调试需要重新部署,和传统的Java EE项目相比,并没有什么特别的优势,这种开发模式本文就不做过多介绍,读者可以在网上找一些相关的资料,笔者后续如果有时间,会专门写篇文章详细介绍。
OSGI Web应用的另外一种开发模式是將Web应用服务器以Bundle的形式集成到OSGI容器(例如Equinox、Felix等)中。这种方式是笔者比较推崇的,下面会有一个小节介绍如何將Jetty服务器集成到Equinox容器中。传统的Java EE应用,除了Servlet需要在web.xml文件中声明外,JSP与静态资源只需要放在war包中,然后部署到应用服务器中,就可以在浏览器中访问(WEB-INF目录除外)。但是使用这种方式搭建Web应用环境,Servlet、JSP、静态资源统统都需要注册,相对来讲还是比较麻烦的,下面就来介绍如何將Jetty应用服务器整合到Equinox容器中。
二、將Jetty应用服务器整合到Equinox容器中
笔者选择Jetty应用服务器其实是有原因的,如果选择Tomcat或者Jboss,我们还需要另外从网上下载应用服务器的Bundle,但是Equinox框架本身就支持Jetty,下载Equinox框架,解压后如下图,它们即为Jetty应用服务器相关的Bundle。
將Jetty应用服务器整合到Equinox容器中非常简单,单击Run=>Debug Configurations菜单,进入Bundle管理工具界面,如下图: 勾选Jetty相关的Bundle,然后单击面板上的Validate Bundle按钮,如果发现有依赖问题,单击Add Required Bundles按钮即可。接下来还需要配置应用服务器监听的端口,单击面板上的Arguments选项卡,在VM arguments输入框中增加如下参数:
-Dorg.osgi.service.http.port=8080
如下图所示:
然后单击Debug按钮,启动Equinox容器,这样Jetty应用服务器就整合到Equinox容器中了,很简单吧,我们可以打开浏览器访问,如下图所示:
报404错误,表示找不到服务器端资源,纯属正常,本篇文章暂时介绍这么多,下篇文章继续介绍如何注册Servlet、JSP、静态资源等等。
转载请注明原文地址:
注意:本文环境在上篇文章基础上搭建,前面部分文章提供了博文源码下载。