三步学会用spring开发OSGI——(第三步:web篇)

接下来就是我们要创建的web工程了,为了简单,我们直接利用virgo所带的模板来新建工程,控制层使用的是spring mvc 3。

创建web工程

打开STS,新建工程,我们选择Sprinng Template Project

          图:新建spring template project

选择Spring MVC Project

        图:模板选择

向下,然后输入工程名和包名,就是我涂红的两部分

          图:输入工程名及包名

点击完成,中间可能需要下载文件,正常选择下载就可以了。

然后看我们的工程,工程结构的目录如下,其实就是一个标准的maven web工程

    图:工程结构

工程创建完成后,我们执行一下maven clean和maven install,如果没有问题,工程上的错误提示就会消失。

我们将工程加入到virgo中,其实跟其它应用服务器的处理方式是一样的,如下图:

    图:virgo部署应用

然后我们启动virgo。

当提示

                  图:virgo启动成功

说明应用已经成功启动了。

我们在浏览器中输入

http://localhost:8080/EchoSpringmvc/

就能看到可以使用的工程了。

      图:应用运行

再向下的开发其实和前边差不多,就是如何处理模块之间的关系,如何整合应用,如何划分模块。

遇到问题

1、maven中出现错误,有spring的jar包不能从远程下载。pom.xml中提示错误如下:

                图:maven中不能下载的错误

这个可能就得借助代理服务器或者FQ软件了,没什么好的办法,因为这个是无法访问远程的链接,去找一款FQ软件吧!

2、执行maven install的时候提示java的版本过低,出现的错误如下:

1 [ERROR] Unable to locate the Javac Compiler in:
2   D:\Program Files\Java\jre6\..\lib\tools.jar
3 Please ensure you are using JDK 1.4 or above and
4 not a JRE (the com.sun.tools.javac.Main class is required).
5 In most cases you can change the location of your Java
6 installation by setting the JAVA_HOME environment variable.

解决方法:

1、在eclipse.ini文件中设置

-vm
C:\Program Files\Java\jdk1.6.0_21\jre\bin\javaw.exe

注意

要在eclipse.ini文件中-startup之前设置这一行

2、window-->preferences-->java-->Installed JREs:将路径设置成jre的路径

              图:配置JDK

3、virgo中不能部署war工程,出现的错误如下:

 1 [2012-08-03 13:33:19.450] start-signalling-2           <DE0006E> Start failed for bundle 'EchoSpringmvc' version '0.0.0'. org.eclipse.virgo.kernel.deployer.core.DeploymentException: Web application failed to start
 2     at org.eclipse.virgo.web.core.internal.WebBundleLifecycleListener.onStarted(WebBundleLifecycleListener.java:132)
 3     at org.eclipse.virgo.kernel.install.artifact.internal.StandardArtifactStateMonitor.onStarted(StandardArtifactStateMonitor.java:247)
 4     at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact.asyncStartSucceeded(AbstractInstallArtifact.java:294)
 5     at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact.access$0(AbstractInstallArtifact.java:291)
 6     at org.eclipse.virgo.kernel.install.artifact.internal.AbstractInstallArtifact$StateMonitorSignal.signalSuccessfulCompletion(AbstractInstallArtifact.java:229)
 7     at org.eclipse.virgo.kernel.core.internal.BundleStartTracker$1.run(BundleStartTracker.java:143)
 8     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 9     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
10     at java.lang.Thread.run(Thread.java:662)
11 Caused by: org.eclipse.gemini.web.core.WebApplicationStartFailedException: org.eclipse.gemini.web.core.spi.ServletContainerException: Web application at '/EchoSpringmvc' failed to start. Check the logs for more details.
12     at org.eclipse.gemini.web.internal.StandardWebApplication.start(StandardWebApplication.java:108)
13     at org.eclipse.virgo.web.core.internal.WebBundleLifecycleListener.onStarted(WebBundleLifecycleListener.java:122)
14     ... 8 common frames omitted
15 Caused by: org.eclipse.gemini.web.core.spi.ServletContainerException: Web application at '/EchoSpringmvc' failed to start. Check the logs for more details.
16     at org.eclipse.gemini.web.tomcat.internal.TomcatServletContainer.startWebApplication(TomcatServletContainer.java:125)
17     at org.eclipse.gemini.web.internal.StandardWebApplication.start(StandardWebApplication.java:91)
18     ... 9 common frames omitted

这个需要修改virgo的配置文件,我们到virgo的安装目录的repository\ext下,找到配置文件 org.eclipse.virgo.web.properties

原来里边设定的值是WABHeaders=strict
我们将它改成WABHeaders=defaulted就应该可以部署成功了。

时间: 2024-09-28 15:49:14

三步学会用spring开发OSGI——(第三步:web篇)的相关文章

基于OSGi和Spring开发Web应用

作为一个新的事实上的工业标准,OSGi 已经受到了广泛的关注, 其面向服 务(接口)的基本思想和动态模块部署的能力, 是企业级应用长期以来一直追 求的目标.Spring 是一个著名的 轻量级 J2EE 开发框架,其特点是面向接口编 程和非侵入式的依赖注入.将 OSGi 和 Spring 结合能充分发挥二者各自的特长 ,更好地满足企业级应用开发的需求.Spring 开发组织在 2008 年发布了将 OSGi 和 Spring 结合的第一个版本:Spring-DM.本文通过一个简单实例,介绍 如何利

【Spring开发】—— Spring Core

前言 最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring.正好整理了一下相关的知识,弥补了之前对spring的一些错误认知.这一次学习,更加深入的理解了Ioc和AOP的思想,并对其架构模块有了更深一步的理解. 刚开始翻看spring技术内幕,虽然有了一点看源码的经验,但是直接看如此深的源码,还是很头疼.spring由于业务的扩展,以及用户群的增加,对于某些模块的类封装的很深!因此追溯源码是个很头疼的问题,而直接看这本书,也是压力山大. 于是回去复习一下spring的基本知识,先学会走

可配置语法分析器开发纪事(三点五) 生成下推自动机的具体步骤

刚刚发了上一篇文章之后就发现状态机画错了.虽然LiveWriter有打开博客并修改文章的功能,不过为了让我留下一个教训,我还是决定发一篇勘误.这个教训就是,作分析的时候不要随便"跳步",该一步一步来就一步一步来.其实人呢,就是很容易忘掉以前的教训的了.第一个告诉我不能这么干的人其实是小学三年级的数学老师.当时我因为懒得写字,所以计算应用题的时候省了几步,被批评了. 故事就从状态机开始.文法我就不重复了,见上一篇文章.现在我们从状态机开始.第一个状态机是直接从文法变过来的: 开发纪事(三

可配置语法分析器开发纪事(三) 生成下推自动机

上一篇博客讲到了构造符号表的事情.构造完符号表之后,就要进入语义分析的后一个阶段了:构造状态机.跟我以前写的如何实现正则表达式引擎的两篇文章讲的一样,自动机先从Epsilon Nondeterministic Automaton开始,然后一步一步构造成Deterministic Automaton.但是语法分析和正则表达式有很大不同,那么这个自动机是什么样子的呢? (对学术感兴趣的人可以去wiki一下"下推自动机") 下推自动机和有限自动机的区别是,下推自动机扩展成普通的自动机的时候,

仅5步搞定Android开发环境部署 Android开发环境搭建教程_Android

在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对准备进入Android开发的朋友有帮助. 本教程将分为五个步骤来完成Android开发环境的部署. 第一步:安装JDK. 第二步:配置Windows上JDK的变量环境 . 第三步: 下载安装Eclipse . 第四步:下载安装Android SDK . 第五步:为Eclips

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证     要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现"高级功能"菜单.     使用"高级功能">"开发模式"之前,必须有一个已经部署在Internet

仅5步搞定Android开发环境部署 Android开发环境搭建教程

在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对准备进入Android开发的朋友有帮助. 本教程将分为五个步骤来完成Android开发环境的部署. 第一步:安装JDK. 第二步:配置Windows上JDK的变量环境 . 第三步: 下载安装Eclipse . 第四步:下载安装Android SDK . 第五步:为Eclips

Android艺术开发探索第三章——View的事件体系(上)

Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 MotionEvent和TouchSlop VelocityTracker,GestureDetector和Scroller View的滑动 使用scrollTo/scrollBy 使用动画 改变布局参数 各种滑动方式的对比 弹性滑动 使用Scroller 通过动画' 使用延时策略 这章的概念偏自定义View方

【Spring开发】—— AOP之方法级拦截

前言: 前面介绍了Spring的核心模块以及相关的依赖注入等概念.这篇讲解一下spring的另一个重点,AOP面向切面编程. 说道AOP不得不提到几个概念: 切面:也就是我们自己的一些业务方法. 通知:用于拦截时出发的操作. 切点:具体拦截的某个业务点. 这样说可能还是有点抽象,举个例子,下面是一个纸糊的多面体. 每个面都是一个业务方法,我们通过刺穿每一个面,都可以进入到内部,这个面就是一个切面. 刺穿的时候会发出声响,这就是一种通知. 而具体从哪个面刺入,这就是一个切入点的选择了. 这样说,应