三步学会用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就应该可以部署成功了。