由于项目的需要,写了一个简单的开发基于OSGi的Web模块开发示例用于项目组交流,最初发布在自己的个人博客上(http://www.tofacto.org/2012/02/189.html),在优快云上同时发布出来期望能够抛砖引玉,或者能给大家带来一点启发。
一、生成项目:
1、 Eclipse菜单:File -> new -> project -> Plug-in Project,如图:1.1
图 1.1
2、 填写项目名称,并在“Target Platform”部分选择使用“equinox”框架,如图: 1.2
图 1.2
3、 选择“Finish”生成项目。
二、开发准备:
1、 打开“META-INF”下的文件“MANIFEST.MF”,在代码区选择“Dependencies”标签。
2、 在Dependencies中添加开发Web所需依赖的bundle,完成后如图2.1:
-
javax.servlet;bundle-version="2.5.0",
-
org.eclipse.equinox.http.jetty;bundle-version="2.0.100",
-
org.eclipse.equinox.http.registry;bundle-version="1.1.100",
-
org.eclipse.equinox.http.servlet;bundle-version="1.1.200",
-
org.eclipse.equinox.jsp.jasper;bundle-version="1.0.300",
-
org.eclipse.equinox.jsp.jasper.registry;bundle-version="1.0.200",
-
org.apache.commons.logging;bundle-version="1.0.4",
-
org.apache.commons.el;bundle-version="1.0.0"
图 2.1
3、 选择“Overview”标签,单击“Extension/Extension Point Content”中的“Extensions”,在弹出窗口中选择“Yes”以显示被隐藏的“Extensions”、“Extensions Points”和“Plugin。xml”标签。4、 在“Extensions”标签单击“Add”按钮,在弹出窗口中选择“org.eclipse.equinox.http.registry.servlets”,完成后的“Extensions”标签如图2.2,保存可打开plugin.xml如图2.3:图 2.2
图2.3
三、 配置运行/调试环境:
1、 菜单栏选择“run”->“Run Configuration”打开运行环境配置窗口,右键单击“OSGi Framework”并在弹出菜单中选择“new”。
2、 取消所有“Target Platform”中bundle的选中,然后添加如下bundle:
-
org.eclipse.osgi_3.7.1.R37x_v20110808-1106
-
org.eclipse.osgi.services_3.3.0.v20110513
-
javax.servlet_2.5.0.v201103041518
-
javax.servlet.jsp_2.0.0.v201101211617
-
org.mortbay.jetty.util_6.1.23.v201012071420
-
org.mortbay.jetty.server_6.1.23.v201012071420
-
org.eclipse.equinox.common_3.6.0.v20110523
-
org.eclipse.equinox.http.jetty_2.0.100.v20110502
-
org.eclipse.equinox.http.servlet_1.1.200.v20110502
-
org.eclipse.equinox.http.registry_1.1.100.v20110502
-
org.eclipse.equinox.jsp.jasper.registry_1.0.200.v20100503
-
org.eclipse.equinox.jsp.jasper_1.0.300.v20110502
-
org.eclipse.equinox.registry_3.5.101.R37x_v20110810-1611
-
org.apache.jasper_5.5.17.v201101211617
-
org.apache.commons.el_1.0.0.v201101211617
-
org.apache.commons.logging_1.0.4.v201101211617
3、 此时web服务的默认端口为80,如此端口已被占用可以在配置窗口中“Arguments”标签下,在VM arguments部分填上“-Dorg.osgi.service.http.port=(端口号)”,如需在8080端口启动服务则为:-Dorg.osgi.service.http.port=8080
4、 运行此配置环境,打开浏览器,在地址栏中填入:http://localhost:(端口号)/,如浏览器报404错误,则说明配置成功。
四、 编码及运行:
1、 在src下建包,包内创建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;
/**
* @author GAO Ming (http://www.tofacto.org)
*/
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.println("Hello World!");
out.flush();
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
2、 打开“MANIFEST.MF”文件,选择“Extensions”标签,编辑默认生成的Servlet映射,在class处填入刚完成的servlet的包名与类名,如:org.tofacto.demo.web.FirstServlet,在alias处填写欲映射的url位置,如:/first3、 保存后运行在第三部分配置的运行环境,然后打开浏览器,在地址栏中输入http://localhost:8080/first,如无异常便看看到运行结果。
五、 加入动态页面-JSP
1、 在bundle的根下新建文件夹“WebRoot”,用于存放相应的jsp文件。
2、 在WebRoot下新建并编辑jsp文件
3、 打开“MANIFEST.MF”文件,选择“Extensions”标签,添加servlet映射,在class处填写:org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebRoot/,在alias处填入:/*.jsp
4、启动服务后便可在浏览器里面直接访问jsp页面了。