Eclipse RCP中启动Jetty Server

By | 2019年6月29日

Eclipse本身就有Jetty server的bundle。

1. 运行依赖的bundle

Eclipse 3.7

  • org.eclipse.osgi
  • org.eclipse.osgi.services
  • org.mortbay.jetty.util
  • org.eclipse.equinox.http.jetty
  • org.mortbay.jetty.server
  • org.apache.commons.logging
  • javax.servlet
  • org.eclipse.equinox.http.servlet

Eclipse 4.X

  • org.eclipse.osgi
  • org.apache.felix.gogo.runtime
  • org.apache.felix.gogo.command
  • org.eclipse.equinox.console
  • org.eclipse.equinox.http.jetty
  • org.apache.felix.gogo.shell
  • javax.servlet
  • org.eclipse.jetty.server
  • org.eclipse.osgi.services
  • org.apache.commons.logging
  • org.eclipse.equinox.http.servlet
  • org.eclipse.jetty.util
  • org.eclipse.jetty.io
  • org.eclipse.jetty.continuation
  • org.eclipse.jetty.servlet
  • org.eclipse.jetty.http
  • org.eclipse.jetty.security

2. 启动Jetty服务器

2.1 设置Auto-Start

我们加入了Jetty的相关依赖,但是这些bundle的Auto-Start值是default,也就是lazy-start。如果没有人使用这些bundle里的内容,他们是不会被active。

为了在RCP打开的时候,启动Jetty服务器,我们需要把下面三个bundle的Auto-Star设置为true。可以在RCP product文件里设置,也可以在eclipse Run configuration里面设置。

  • org.eclipse.equinox.http.jetty
  • org.eclipse.equinox.http.regstry
  • org.eclipse.equinox.http.servlet

NewImage

2.2 设置端口号

默认端口号是80,有可能被占用,通过VM argument可以设置新的port。

-Dorg.osgi.service.http.port=8080

此时浏览器访问localhost:8080,显示404错误,说明Jetty启动了,只是没有任何资源可以访问。

404

3. Register Servlet

我们可以有很多bundle,每个bundle都可以注册Servlet,Resource等,分散式的部署。

3.1 定义HelloWorld Servlet


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  private static final long serialVersionUID = 1L;

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    resp.setContentType("text/html");

    PrintWriter writer = resp.getWriter();
    writer.print("Hello servlet from Jetty!");
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    this.doGet(req, resp);
  }
}


3.2 发布HelloWorld Servlet

NewImage

浏览器访问效果:

NewImage

4. Register Resource

我们可以Register任何静态资源,通过URL进行访问。

NewImage

浏览器访问效果:

NewImage

参考

OSGI 中嵌入 Http 服务器的运行环境

Embedding Jetty Server in Eclipse RCP

Writing a bundle-based server application

 

EOD