基于OSGi bundle的Web工程

来源:互联网 发布:怎么在淘宝开充值店 编辑:程序博客网 时间:2024/05/22 15:58

搭建equinox+内嵌jetty+jsp环境

*概述

      基于equinox+内嵌jetty+jsp的组合,开发web程序,并且支持jsp特性(如jstl等),通过这种组合就可以将osgi服务,web技术和eclipse插件开发等的优点结合在一起,主要的优点在于天然的osgi支持,功能的复用,最后的应用程序具有整体性.

 

以下将说明如何在eclipse搭建环境,以支持前述开发框架.(注,我的环境Eclipse3.7+wtp)

*第一步,添加需要的插件,

这里要分成2步骤:

1)配置jsp应用插件依赖的插件,如下面我的plugin.xml截图

jetty_jsp_plugin

2)添加独立的插件,如jetty插件等

可以通过在debug配置中->osgi framework->新建一个配置页,来方便查找和测试.

以下2张是我的配置(IDE_SRV)的截图,供参考.

debug_jetty

debug_jsp

注,

1)其他的一些插件,可以通过右侧按钮"Add Required Bundles"添加;

2)debug时,若80端口被占用,就需要自定义http的端口,如我的VM arguments是:"-Declipse.ignoreApp=true -Dosgi.noShutdown=true  -Dorg.osgi.service.http.port=10000".

 

*第二步,配置开发jsp的插件,支持完整的jsp特性,其实就是如何让内嵌的jetty找到需要的资源

1)以我的插件为例,先建立2个目录:"/WebContent/",存放jsp内容,这个名字可以随便取."/WEB-INF/",存放web应用的配置,如web.xml,tld,lib库等,这个就是固定的名称.

注,a)这里的"/"表示插件的根目录.b)我使用默认的httpContent,即org.eclipse.equinox.http.servlet.internal.DefaultHttpContext,所以像"/WEB-INF/"就需要放在插件根目录,可是试试配置扩展点org.eclipse.equinox.http.registry.httpcontexts,来修改默认的设置.

如图,

jetty_structure

 

2)通过扩展点配置http资源目录

---以我的配置为例

<?xml version="1.0" encoding="UTF-8"?><?eclipse version="3.0"?><plugin>   <extension         point="org.eclipse.equinox.http.registry.resources"> <!--定义资源路径-->      <resource            alias="/auth/images"            base-name="/WebContent/auth/images">  <!--图片目录-->      </resource>      <resource            alias="/auth/css"            base-name="/WebContent/auth/css">    <!--css目录-->      </resource>      <resource            alias="/auth/js"            base-name="/WebContent/auth/js">    <!--js目录-->      </resource>   </extension>   <extension         point="org.eclipse.equinox.http.registry.servlets"> <!--定义servlet-->       <servlet               alias="/auth/*.jsp"            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebContent/auth/">  <!--注意,jsp定义方式,比较特别-->      </servlet>   </extension></plugin>

---org.eclipse.equinox.http.registry.resources

配置web资源路径,如images,js,css目录等,这样jetty就知道如何找到资源了,

如代码:  <img src="/auth/images/sys.gif" />

---org.eclipse.equinox.http.registry.servlets

定义jsp的目录,如我的测试文件test.jsp放在/WebContent/auth/test.jsp,那么在浏览器中应输入"http:localhost:10000/auth/test.jsp"

3)添加jstl库等

---把jstl库放入classpath,我使用的是apache的实现,有2个jar包:jstl.jar和standard.jar.

如图,

jetty_jstl 

注,这里就体现出独立部署的war和在插件开发中的不同:独立部署的war在"/WEB-INF/lib/"是默认的查找路径,而插件开发中需要把库添加到"Bundle-ClassPath".

为了分离web需要的库和插件的库,所以按照一般的约定将其放在"/WEB-INF/"下,其实不必如此.

---在"/WEB-INF/"下建立web.xml,若没有这个文件,启动时会报错给你

---最后,别忘了在"Build"页选中需要的资源

 

*最后,参看下我的MANIFEST.MF

MANIFEST.MF

 

 

*总结

---equinox已经提供了内嵌jetty和jsp的插件支持,包括提供了扩展点,所以构建环境的基本要素已经有了,需要的是自己合理的配置

---本文结合我的工程示例,给出了eclipse插件方式开发jsp的环境搭建过程和注意事项,其核心思想是2点:

1)添加需要的插件,包括jetty,jsp插件,注意除了应用插件外,要加上需要的独立的插件

2)通过扩展点的方式定义jsp资源路径.注意的地方是,将内嵌jetty处理jsp时,需要的库和WEB-INF等的配置资源,以插件的方式组织好.

原创粉丝点击