- 浏览: 1007778 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
1 概述
Equinox 提供了两种OSGi embedded HttpSerivce的实现,如下:
- org.eclipse.equinox.http。适合资源受限的环境。兼容Servlet 2.4,但是对Servlet 2.1以外的API提供了有限的支持。
- org.eclipse.equinox.http.jetty。使用Jetty 作为引擎,支持Servlet 2.4。
- Embed a server in Equinox。
- Embed Equinox in an existing servlet container。
首先在Eclipse中新建一个新工程,New->Project->Plug-in Development->Plug-in Project,单击Next按钮;输入工程名:HttpServiceExample。在Target Platform中选择an OSGi framework单选按钮,同时在右边的下拉框中选择standard,单击Next按钮;在Classpath中输入bin,在Activator 中输入com.example.http.service.Activator,单击Next按钮;单击Finish按钮。
用Plug-in Manifest Editor打开工程META-INF目录下的MANIFEST.MF文件。选择Dependencies标签,单击Required Plug-ins下的Add按钮。在弹出的对话框中选择以下plug-in:
- javax.servlet
- javax.servlet.jsp
- org.eclipse.osgi.services
- org.eclipse.equinox.http.jetty
- org.eclipse.equinox.http.servlet
- org.eclipse.equinox.http.registry
- org.eclipse.equinox.jsp.jasper
- org.eclipse.equinox.jsp.jasper.registry
- org.mortbay.jetty
- org.apache.jasper
- org.apache.commons.el
- org.apache.commons.logging
3 新建web资源
在工程的com.example.http.service包中应该已经生成了一个Activator类,为其添加两条控制台输出并注册资源。需要注意的是,BundleEntryHttpContext.java和ContextPathServletAdaptor.java是在名为org.eclipse.equinox.http.helper的bundle中,而这个bundle需要到eclipse cvs下载。为了方便读者,笔者将两个类的源码下载并保存到com.example.http.service.helper包中。
package com.example.http.service; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.eclipse.equinox.jsp.jasper.JspServlet; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.http.HttpContext; import org.osgi.service.http.HttpService; import com.example.http.service.helper.BundleEntryHttpContext; import com.example.http.service.helper.ContextPathServletAdaptor; import com.example.http.service.helper.FilterServletAdaptor; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("starting bundle..."); ServiceReference sr = context.getServiceReference(HttpService.class.getName()); HttpService hs = (HttpService) context.getService(sr); HttpContext hc = new BundleEntryHttpContext(context.getBundle(), "/web"); hs.registerResources("/jsp", "/", hc); Servlet jspServlet = new ContextPathServletAdaptor( new JspServlet(context.getBundle(), "/web/"), "/jsp"); hs.registerServlet("/jsp/*.jsp", jspServlet, null, hc); // Filter Filter filter = new Filter() { public void init(FilterConfig arg0) throws ServletException { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain fc) throws IOException, ServletException { System.out.println("in filter.doFilter()"); fc.doFilter(request, response); } }; hs.registerServlet("/jsp/hello.jsp", new FilterServletAdaptor(filter, null, jspServlet), null, null); } public void stop(BundleContext context) throws Exception { System.out.println("stoping bundle..."); ServiceReference sr = context.getServiceReference(HttpService.class.getName()); HttpService hs = (HttpService) context.getService(sr); hs.unregister("/web"); hs.unregister("/jsp"); } }
另外再新建一个LoginServlet,如下:
package com.example.http.service; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { /** * */ private static final long serialVersionUID = -1300648117298008054L; /** * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // String user = request.getParameter("user"); String password = request.getParameter("password"); if("user".equals(user) && "123456".equals(password)) { request.setAttribute("message", "hello " + user); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/jsp/hello.jsp"); dispatcher.forward(request, response); } else { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/web/login.html"); dispatcher.forward(request, response); } } }
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Login</title> </head> <body> <br> <form name="loginForm" method="post" action="/login"> <table> <tr> <td><div align="right">User Name:</div></td> <td><input type="text" name="user"></td> </tr> <tr> <td><div align="right">Password:</div></td> <td><input type="password" name="password"></td> </tr> <tr> <td></td> <td><input type="Submit" name="Submit" value="Submit"></td> </tr> </form> </body> </html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>hello</title> </head> <body> <h2><%=request.getAttribute("message") %></h2> </body> </html>
4 扩展点
在工程根目录下新建一个plugin.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point="org.eclipse.equinox.http.registry.resources"> <resource alias="/web" base-name="/web"/> </extension> <extension point="org.eclipse.equinox.http.registry.servlets"> <servlet alias="/login" class="com.example.http.service.LoginServlet"/> </extension> </plugin>
修改MANIFEST.MF文件,在Bundle-SymbolicName: HttpServiceExample后边加上;singleton:=true,如下
Bundle-SymbolicName: HttpServiceExample;singleton:=true
5 运行
Run->Open Run Dialog,首先在弹出对话框中,单击右侧的Deselect All。然后选择:
- HttpServiceExample
- javax.servlet
- org.eclipse.osgi.services
- org.eclipse.equinox.http.jetty
- org.eclipse.equinox.http.servlet
- org.eclipse.equinox.http.registry
- org.eclipse.equinox.jsp.jasper
- org.eclipse.equinox.jsp.jasper.registry
- org.mortbay.jetty.server
- org.mortbay.jetty.util
- org.apache.jasper
- org.apache.commons.el
- org.apache.commons.logging
再单击Validate Bundles按钮,这个是检查你所导入的Bunbles有没有还存在引用其它Bunble的检查器,如果提示还缺少bundles,也就是弹出bunble的列表,则说明还有所列举的bunbles还存在依赖关系,还缺失了一些bunbles,只要点击bunble就可以看到还缺哪些,你再一个个勾选加入即可,直到提示No problems were detected,单击Run。
控制台中除了其它bundles的输出外,还应该有HttpServiceExample的输出:starting bundle...。在控制台输入ss并回车,应该看到所有的state都是ACTIVE。打开浏览器访问http://localhost/web/login.html,输入用户名user,密码123456后会进入显示hello.jsp的内容,否则会提示重新输入用户名和密码。
- helper.src.zip (3.3 KB)
- 下载次数: 87
发表评论
-
Eclipse在创建Plug-in项目时的Target platform选项的说明(转)
2010-05-27 15:05 2043Target PlatForm 插件的运行平台. Eclip ... -
OSGI的认识(转)
2010-05-27 10:43 1402借助网上的一些资料,对OSGi有了一些了解,将到目前的一些粗浅 ... -
OSGi实战的问题(转)
2010-05-24 22:26 8337对osgi有了一个初步的了解之后,准备写段代码跑跑,一试身手, ... -
BundleContext的作用
2010-05-24 19:39 5046通过实现BundleActivator接口和start和sto ... -
你好,OSGi(第三部分):OSGi依赖性管理:Bundle访问域(转)
2010-05-21 08:51 1357本文是《你好,OSGi》系列的第三部分。之前介绍过OS ... -
MANIFEST.MF 中的 bundle 元数据信息描述(转)
2010-05-21 08:38 3234属性 属性描述 Bundle-Activator Bundle ... -
大牛OSGI博客
2010-05-18 09:36 1629http://www.blogjava.net/Phranco ... -
Spring与OSGi的整合(二)(转)
2010-05-17 20:24 61763. 开发一组计算器bundle实例 本节讲到的 ... -
Spring与OSGi的整合(一)(转)
2010-05-17 20:22 23101. 开发环境的准备 现在的eclipse都已经包含了Equ ... -
亲历基本OSGI实例,进入另番思维领域(转)----包括打包发布为可执行文件
2010-05-17 14:52 2685软件的模块越来越插件化发展了,连硬件都处处热插拔,软件更当如此 ... -
你好,OSGi (第一部分): Bundles入门(续,翻译)(转)
2010-05-10 17:13 24994. 依赖性管理 OSGi允 ... -
你好,OSGi (第一部分): Bundles入门(翻译)(转)
2010-05-10 17:06 2326新建、执行和管理OSGi ... -
OSGI学习笔记
2010-05-10 16:40 1616Equinox OSGi 主要的控制台命令表 类别 ...
相关推荐
博文链接:https://whitesock.iteye.com/blog/166919
OSGi定义了一个HttpService,用于支持Web应用。Web Application Bundle (WAB) 是一种特殊的OSGi Bundle,它可以作为一个Web应用运行。WAB包含传统的Web项目元素,如Web-INF目录和web.xml,同时还包含OSGi元数据,如...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...
标题中的“Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar”表明我们将探讨如何将Spring框架与OSGi(Open Services Gateway Initiative)模块化系统进行集成,并通过一个计算器的例子来说明这个...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...
OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...
OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员将应用程序分解为一组可独立更新和管理的小型服务组件。在OSGi环境中嵌入Servlet,可以实现更加灵活和动态的Web应用部署。...
标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...
OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...
这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...
在OSGi环境中,Servlet的注册与传统的Web应用程序有所不同,因为OSGi容器(例如Equinox)提供了HttpService,用于处理HTTP请求。 在《你好,OSGi》的这篇文章中,作者探讨了如何在OSGi中开发一个简单的Web应用程序...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...
Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...
OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...