颇为阿娇978 发表于 2017-2-27 11:41:57

搭建equinox+内嵌jetty+jsp环境

  *概述
  基于equinox+内嵌jetty+jsp的组合,开发web程序,并且支持jsp特性(如jstl等),通过这种组合就可以将osgi服务,web技术和eclipse插件开发等的优点结合在一起,主要的优点在于天然的osgi支持,功能的复用,最后的应用程序具有整体性.
  以下将说明如何在eclipse搭建环境,以支持前述开发框架.(注,我的环境Eclipse3.7+wtp)
  *第一步,添加需要的插件,
  这里要分成2步骤:
  1)配置jsp应用插件依赖的插件,如下面我的plugin.xml截图

  2)添加独立的插件,如jetty插件等
  可以通过在debug配置中->osgi framework->新建一个配置页,来方便查找和测试.
  以下2张是我的配置(IDE_SRV)的截图,供参考.


  注,
  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,来修改默认的设置.
  如图,

  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.
  如图,

  注,这里就体现出独立部署的war和在插件开发中的不同:独立部署的war在"/WEB-INF/lib/"是默认的查找路径,而插件开发中需要把库添加到"Bundle-ClassPath".
  为了分离web需要的库和插件的库,所以按照一般的约定将其放在"/WEB-INF/"下,其实不必如此.
  ---在"/WEB-INF/"下建立web.xml,若没有这个文件,启动时会报错给你
  ---最后,别忘了在"Build"页选中需要的资源
  *最后,参看下我的MANIFEST.MF



MANIFEST.MFManifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Servlets
Bundle-SymbolicName: galaxy.ide.service.auth.servlets;singleton:=true
Bundle-Version: 1.0.0.qualifier
Import-Package: galaxy.ide.service.auth,
javax.servlet;version="2.5.0",
javax.servlet.http;version="2.5.0",
org.osgi.framework;version="1.3.0",
org.osgi.service.http;version="1.2.1"
Service-Component: OSGI-INF/component.xml
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Require-Bundle: galaxy.ide.auth;bundle-version="1.0.0",      //依赖的插件
org.eclipse.equinox.jsp.jasper;bundle-version="1.0.300",
org.eclipse.equinox.http.registry,
org.eclipse.equinox.jsp.jasper.registry;bundle-version="1.0.200",
javax.servlet.jsp;bundle-version="2.0.0"
Bundle-ClassPath: .,
WEB-INF/lib/jstl.jar, //添加jstl库
WEB-INF/lib/standard.jar,
WEB-INF/classes/
  *总结
  ---equinox已经提供了内嵌jetty和jsp的插件支持,包括提供了扩展点,所以构建环境的基本要素已经有了,需要的是自己合理的配置
  ---本文结合我的工程示例,给出了eclipse插件方式开发jsp的环境搭建过程和注意事项,其核心思想是2点:
  1)添加需要的插件,包括jetty,jsp插件,注意除了应用插件外,要加上需要的独立的插件
  2)通过扩展点的方式定义jsp资源路径.注意的地方是,将内嵌jetty处理jsp时,需要的库和WEB-INF等的配置资源,以插件的方式组织好.
页: [1]
查看完整版本: 搭建equinox+内嵌jetty+jsp环境