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

2.2 设置端口号
默认端口号是80,有可能被占用,通过VM argument可以设置新的port。
-Dorg.osgi.service.http.port=8080
此时浏览器访问localhost:8080,显示404错误,说明Jetty启动了,只是没有任何资源可以访问。

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

浏览器访问效果:

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

浏览器访问效果:

参考
Embedding Jetty Server in Eclipse RCP
Writing a bundle-based server application
EOD