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