- 浏览: 103380 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Tom.X:
http://osgia.com
OSGI下的web应用开发(5) -
xiaohei520104:
楼组辛苦了,关于OSGi web的demo资料很少,非常感谢你 ...
OSGI下的web应用开发(5) -
shenwu33:
为什么我的server下面 没有eclipseRT
OSGI下的web应用开发(1) -
zhaoweisgz:
谢谢你的共享~
基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT) -
zrz_1989:
楼主我想请教您个问题,如果将项目移植到OSGi平台上,对于we ...
OSGI下的web应用开发(7)
现在我们要进入最后一个环节的开发,也就是开发Web Bundle。
我使用的是GWT来作为前端的展示,如果不熟悉这一块的童鞋可以无视它,因为你可以使用你自己熟悉的MVC框架来替换。
这里只需要了解web Bundle开发中的一些主要步骤就好了。
(1)创建一个Dynamic Web Project
通过菜单选择 File >> New >> Project,进入Project的选择,如图
选中Dynamic Web Project,点击Next,进入下图
添加项目名称,点击Next,进入下图
将Default output folder修改为war/WEB-INF/classes。并添加gwt和test的源码目录。点击Next
这里的context root在OSGI下其实可以不用理会,但是一般还是将它设置为自己需要的path。
content directory则需要改成war目录,因为我上面定义的class输出目录是在war/WEB-INF/classes下的。
所以war将作为整个web应用的根目录。点击Finish,完成对project的创建。
创建完的工程的结构如下所示
上图中我又建立了一个lib目录,用来存放需要的jar引用,即开发时的jar,但部署时不再需要,所以不在war/WEB-INF/lib下。
(2)对Porject添加Bundle Project的特性和Spring Project特性
我们需要加入Bundle Project的特性来帮助我们进行Bundle的开发。如图
选择图中的Add Spring Project Nature可以加入对spring开发的一些特性支持,比如对spring配置文件的编辑;选择另一个Add Osgi Bundle Project Nature,加入Bundle Project的特性,这样我们就可以和之前的Project一样编辑MANIFEST.MF文件了,只是在这个项目中编辑的位置有所改变,MANIFEST.MF存放于war/META-INF目录下。
这里还需要注意,还要重新通过右键再访问一次spring tools这个选项,然后选择一项叫做enable bundle classspath...的选项开启与其它bundle之间的联系。(默认如果新建一个bundle project是开启的,但是这里需要手动开启)
(3)对Project作出一些调整
(3.1)部署内容的调整
打开项目的Properties,选中下图中Deployment Assembly选项
由于设置了多个不同的源码目录,默认部署的时候是会将这么多个目录都部署到服务器中的,但是我们这里只需要部署src的内容,所以要手动去掉gwt和test这两个部署目录,选中后点选remove按钮,最终结果如下图
(3.2)Java build path调整
还是进入项目的Properties设置中,这次选择Java Build Path,我们需要将各个源码的输出类文件的路径进行分开管理,不要都放到war/WEB-INF/classes目录下。这是因为gwt和test的类文件是不需要出现在最终部署的web bundle中的,而且如果在开发的时候都输出到同一个目录下,那对gwt和test的修改将会影响到web的部署(因为服务器插件是将war目录下的内容整个进行部署的),这样会影响开发调试的过程。基于这两个原因我们需要将它们的输出目录分开,如下图所示
需要勾选Allow output folders for source folders选项,然后分别为每个源码目录配置输出路径。
例如gwt源码目录的Output folder设置为项目的bin/gwt目录。
(3.3)加入对GWT开发的支持
由于我使用了GWT,所以这里需要开启GWT的开发支持,还是在项目的Properteis中进行设置
(3.3.1)取消GWT的web 部署选项
这里不需要让GWT对项目做单独的web支持,因为默认是勾选的,取消This project has a war directory的选中。
(3.3.2)加入对web toolkit的支持
选中Use Goole Web Toolkit,然后选择自己需要的GWT版本进行开发。
(4)web.xml
web中最重要的配置就是web.xml的配置了。下面贴出配置的内容
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>net.georgezeng.test.web.core</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:conf/spring/*.xml </param-value> </context-param> <context-param> <param-name>contextClass</param-name> <param-value> org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>gwtfilter</filter-name> <filter-class>net.georgezeng.test.web.filter.GWTFilter</filter-class> </filter> <filter-mapping> <filter-name>gwtfilter</filter-name> <url-pattern>/rpc/*</url-pattern> </filter-mapping> <servlet> <servlet-name>springGwtRemoteServiceServlet</servlet-name> <servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springGwtRemoteServiceServlet</servlet-name> <url-pattern>/rpc/*</url-pattern> </servlet-mapping> </web-app>
我们可以看到跟一般的web.xml的配置没什么区别,只有一个地方不同,就是对Spring的WebApplicationContext的设置,我们需要对spring的contextClass重新定义
<context-param> <param-name>contextClass</param-name> <param-value> org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext </param-value> </context-param>
由于我们使用的是virgo server,所以这里使用了virgo server对spring在OSGI中的一个WebApplicationContext的实现。
(5)spring的配置
(5.1)osgi-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <osgi:reference id="contactService" interface="net.georgezeng.test.service.ContactService" /> </beans>
(5.2)applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="net.georgezeng.test.web" /> </beans>
(6)MANIFEST.MF
(6.1)import
(6.2)export
没有需要export的内容
(6.3)手动编辑MANIFEST
前面一直说到不要自己手动编辑MANIFEST.MF文件,但是这里比较特殊,需要在MANIFEST加上一个头信息,这个头信息是IDE的编辑器没有提供设置的,所以需要自己加入,如图
我们需要加上Web-ContextPath这个头信息,这个是用来告诉virgo server部署的web引用的访问上下文根路径。
所以我们不需要再在tomcat的核心文件中定义。
(7)关于GWT的开发
这里不具体描述GWT的开发过程了,有兴趣的朋友请下载源码自行研究。
至此整个应用的开发就完成了,下一节将会介绍如何在开发过程中部署应用和操作virgo server
(注:GWT的包太大,就不上传了,需要的童鞋自行下载GWT插件然后重新引入就好了)
- net.georgezeng.test.web.core.zip (313 KB)
- 下载次数: 1310
评论
1、java.lang.ClassNotFoundException: com.swz.portal.server.rpc.UserRpcImpl
2、org.eclipse.gemini.web.tomcat.internal.loading.BundleWebappClassLoader.loadClass(BundleWebappClassLoader.java:306)
希望指点一下,谢谢
回头我也自己动手做一做,顺便问下,GWT作为WEB层可以,GXT楼主应该可以吧
发表评论
-
手把手教会你开发动态web项目(4)
2016-03-12 10:50 689本文将会讲解如何使用IntelliJ来进行debug ... -
手把手教会你开发动态web项目(3)
2016-03-12 10:23 636本章讲述如何进行业务 ... -
手把手教会你开发动态web项目(2)
2016-03-12 09:45 578这一章主要讲项目的结构。 1. 项目使用gradle进行管 ... -
手把手教会你开发动态web项目(1)
2016-03-11 16:34 927框架终于搭建得差不多了,现在分享一下如何利用此框架进行动态 ... -
基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT)
2012-05-16 20:54 8956由于很多朋友在使用我的上一个版本的web开发遇到了非常多的问题 ... -
关于新版本的STS安装新virgo插件的问题
2012-02-28 21:30 6962新的sts已经没有spring dm server tool的 ... -
virgo server使用指南(2)
2011-10-22 15:47 6375这个章节来看看virgo server的目录结构,如有错漏请 ... -
virgo server使用指南(1)
2011-08-27 10:23 9776virgo server的前身是spring dm serve ... -
OSGI下的web应用开发(6)
2011-07-23 10:04 3623这一节进入Service Interface Bundle和S ... -
OSGI下的web应用开发(5)
2011-07-22 19:04 7697这一节将对Dao Interface Bundle 和 D ... -
OSGI下的web应用开发(4)
2011-07-22 17:28 3777接下来开发Domain Bundle这个模块。这个Bundle ... -
OSGI下的web应用开发(3)
2011-07-21 18:10 6890上节讲了如何对web应用 ... -
OSGI下的web应用开发(2)
2011-07-21 13:28 5303前面已经讲了开发环境 ... -
OSGI下的web应用开发(1)
2011-07-20 21:33 10078本文将详细的展示OSGI下如何开发一个基于spring的web ... -
OSGI心得体会
2011-07-14 16:13 15100l 什么是模块化 与 ... -
OSGI知识小计(3)- bundle的总结
2011-04-26 20:37 59(1)bundle的identifier 在 ... -
OSGI知识小计(2)
2011-04-24 17:15 32(1)OSGI framework的类搜索顺序: 如 ... -
OSGI知识小计(1)
2011-04-22 21:03 71今天学习了OSGI的一些入 ... -
如何安装OSGI的模块(How to install bundle into OSGI Container)
2011-04-20 00:16 64今天开始学习OSGI的知识 ...
相关推荐
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...
**基于OSGi的Web应用开发**是现代软件开发中的一种技术实践,它允许开发者构建模块化、可扩展和可维护的Web应用。OSGi(Open Service Gateway Initiative)是一种开放的标准,提供了一种服务导向的、模块化的Java...
综上所述,基于OSGi和Spring开发Web应用不仅能够充分利用OSGi的模块化优势和Spring的依赖注入机制,还能借助dmServer和SpringSource应用平台等工具,实现更加高效、灵活和可靠的企业级应用开发。
总的来说,基于OSGi和Spring的Web应用开发结合了两者的优点:OSGi提供了模块化和动态部署的能力,而Spring则带来了方便的依赖管理和服务注册。通过Spring-DM,开发者可以在OSGi环境中享受到Spring的便利,构建更灵活...
在基于OSGi的Web应用开发平台中,权限管理涉及到用户、角色和资源的控制。传统的权限管理通常采用固定的角色-权限模型,但在自适应设计中,系统需要根据用户的行为、环境或者业务需求动态调整权限分配。这通常通过...
将OSGi与Web容器整合,可以实现更加灵活和模块化的Web应用开发和部署。 **1. OSGi Bundle放入Web容器中运行** 这是通过像Equinox的Servlet Bridge这样的技术实现的,它充当了一个桥梁,让OSGi Bundle可以在传统的...
在基于OSGi和Spring的Web应用开发中,通常会将业务逻辑、服务接口和Web层分别封装在不同的模块中。根据压缩包子文件的文件名称,我们可以推测这些文件可能代表了这样的模块结构: 1. `...
本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署特性。 #### 二、项目背景及目标 **背景:** OSGi (Open ...
在OSGi环境下开发Web应用的好处在于,我们可以独立更新和管理各个组件,避免了传统的Web应用中常见的类加载冲突问题,同时也简化了依赖管理。通过使用Equinox这样的强大框架,我们可以更好地利用OSGi的优势,实现...
基于 OSGi 和 Spring 开发 Web 应用
在本文中,我们将深入探讨如何基于VirgoServer进行Spring Osgi Web开发,这是一个涉及OSGi容器、Spring框架和Web应用程序的集成技术。首先,我们需要确保拥有正确的开发环境和工具,包括Spring Tool Suite (STS),...
这些工具可以将OSGi环境集成到Tomcat中,允许OSGi bundles作为Web应用的一部分运行。 Apache Felix WebConsole是一个基于Web的管理界面,可以用来管理和控制OSGi环境。你可以将其作为一个OSGi bundle部署到Tomcat中...
1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。
7. **动态性与灵活性**: OSGI的动态特性使得开发者可以在不中断服务的情况下更新和扩展Web应用,只需更新或安装新的bundle即可。这对于持续集成和快速迭代的开发流程非常有利。 8. **依赖管理**: OSGI通过细粒度的...
Web示例工程是使用OSGi技术构建的一个具体应用,通常包括了如何在OSGi环境中部署和运行Web应用程序的实例。 在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端...