在RCP程序中集成Jetty

jetty是个开源的serverlt容器,由于良好的设计,它非常容易被嵌入到其它程序中,作为一个内嵌服务器而存在。
那么我们如何在自己的RCP程序中使用Jetty呢?

方法一:使用扩展点

这种方法比较容易实现,但缺点是无法在运行时改变参数,因为它的参数基本上都是在plugin.xml里就写好的。使用扩展点去集成Jetty,只需要在Plugin dependences 页面中添加如下插件:

javax.servlet
org.mortbay.jetty.server
org.mortbay.jetty.util
org.eclipse.equinox.http.jetty
org.eclipse.equinox.http.registry
org.eclipse.equinox.http.servlet

这还不够,我们还得在项目的启动配置里,把上述插件设为auto-start(因为lazy load机制的存在,如果代码中没有显示调用,这些插件并不会被加载进来)。

然后要做的,只是对resource和servlet的配置了。用文本方式打开plugin.xml,插入如下代码

<extension point="org.eclipse.equinox.http.registry.resources"> 
 <resource alias="/files" base-name="/web_files"/>
</extension> 

<extension point="org.eclipse.equinox.http.registry.servlets">
 <servlet alias="/test"  class="com.example.servlet.MyServlet"/>
</extension>

其中resources扩展点处规定的是资源的位置(相当于当前工程目录),servlets扩展点负责做好别名到servlet类的映射。我目前还没有发现可以在运行时修改这里的配置的方法,所以说使用扩展点去集成jetty还是有一定的局限性的。

方法二:动态嵌入Jetty

动态的嵌入Jetty只需要引入

servlet-api-2.5-6.x.jar
jetty-util-6.x.jar
jetty-6.x.jar

这些jar包可以在jetty官方提供的下载包中找到。
在这种方式下要启动一个jetty服务器就要写点代码了,例如:

Server server = new Server(8080);
Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new HelloServlet("Ciao")), "/*");
server.start();

关于如何写这部分代码,更详细的,详见http://docs.codehaus.org/display/JETTY/Embedding+Jetty ,我就不多话了。如果只是引入上面提到的3个包的话,还无法支持JSP页面。如果此服务器必须解析JSP页面的话,还需要引入

ant-1.6.5.jar
core-3.1.1.jar
jsp-2.1.jar
jsp-api-2.1.jar

One thought on “在RCP程序中集成Jetty

发表评论

电子邮件地址不会被公开。 必填项已用*标注