京山游侠

专注技术,拒绝扯淡
posts - 50, comments - 868, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

SpringSide 复活

Posted on 2008-12-02 15:10 京山游侠 阅读(10292) 评论(17)  编辑  收藏 所属分类: SpringSide开发实战
江南白衣启动SpringSide 3.0项目已经很长时间了,但是我一直没有关注,直到他发布了All in One版。对于我这样的懒人来说,All in One版是个不错的选择。当然,SpringSide 3.0.4 All in One版并不是完美无缺,加上白衣时间紧,没办法写很详细的文档,所以使用起来还是有一定的障碍。再加上SpringSide 3.0太依赖于Maven,而很多人不喜欢Maven,包括我,又进一步影响了它的推广。

在我的这篇文章里,向大家展示了不用Maven,只需要五个步骤,就轻松上路的过程,配合十二张截图,让不想自己动手的朋友们也能感受SpringSide 3的魅力。当然,因为有很多截图在,所以要看我的文章,必须得22英寸的显示器才够爽。

第一步、下载SpringSide 3.04 All in One版和Eclipse 3.4 For JavaEE Developer,下载地址我就不截图了,分别为www.springside.org.cn和www.eclipse.org,Eclipse 3.4 For JavaEE Developer的功能非常强大,可以给Web开发者带来非常大的方便。关于Eclipse的魅力,在以后的截图中大家可以领略得到。

第二步、解压缩SpringSide 3.0.4的压缩文件后,进入SpringSide的目录,运行bin/quickstart-all-in-one.bat,快速安装SpringSide 3,并启动几个示例项目。So Easy,这一步就不用多废话了。

第三步、创建新项目,并导入到Eclipse中,先设置环境变量,将Maven工具的bin目录加入到PATH环境变量中,如下图:
002.png

然后运行tools\generator\new-project.bat即可,按照提示输入,如下图:
003.png

这里有几个地方需要说明一下,首先就是选择项目的类型,其中1代表WebService项目,2代表普通的WEB项目,这个没什么难度。比较迷惑人的就是后面groupId和artifactId,什么意思呢?groupId代表的是你组织的名字,如org.springside,而artifactId就是项目的名称。至于最后设置package,就更加没有难度了,懂Java的人都懂什么是package。

启动Eclipse,可以将刚才创建的项目导入到Eclipse中,如下图:
004.png

可以看到项目中存在很多红色的叉叉,这就说明项目还需要进一步的设置。怎么样解决掉这些红叉呢?请看下一步。

第四步、解决掉项目中的红叉

项目中的红叉主要是因为没有设置好依赖的库文件引起的,为什么说是主要而不是全部呢,后面可以看到,还有一部份红叉是因为字符编码引起的。从上面的步骤可以看到,我用的Eclipse就是直接下载下来的干净的Eclipse,没有安装Maven插件,按照白衣的本意,SpringSide 3的项目应该是从创建到编译到部署都是可以由Maven解决的,但是我依然习惯于不用Maven,让Eclipse(指不带Maven插件的Eclipse)为我解决所有问题。

事实上,下载All in One版后,里面自带了Maven的命令行工具,而在前面的步骤中,我们其实也适用到了Maven,分别是安装SpringSide 3和创建项目的时候,但是Maven对我们是透明的,我们要做的只是运行白衣写好的bat文件,当然,还需要设置PATH环境变量。下面我们进行的把依赖库复制到项目中的操作,本质上也是基于Maven的。

运行我们创建的项目中的bin/copy-jar.bat,将依赖的jar文件复制到项目中,如下图:
005.png

006.png

刷新项目,可以看到该脚本主要是把jar文件复制到项目的/lib目录和/webapp/WEB-INF/lib目录,其中复制到/webapp/WEB-INF/lib目录中的最后会随项目部署到Tomcat服务器中,而复制到/lib目录的jar文件主要是在开发阶段使用。我们需要将/lib目录中的jar文件手动添加到Build Path中,如下图:
007.png

刷新项目,可以单到剩下的红叉集中在jsp文件中,如下图:
008.png

刚才已经说过,这些红叉是因为字符编码的设置引起的,把这些jsp文件的编码全部设置为UTF-8,如下图:
009.png

刷新项目,可以看到红叉全部消失,清爽极了,如下图:
010.png

第五步、部署和运行项目

刚才我已经说过了,白衣的本意是使用Maven来管理整个项目的生命周期,但是没有Maven,Eclipse 3.4 For JavaEE Developers做得也很好,只需要在项目上点鼠标右键,选择Run On Server,即可,如下图:
011.png

按照向导一步一步进行,设置好Tomcat的目录,项目就可以自动部署和运行了,如下图:
012.png

Eclipse自带Server的管理器和浏览器,我们以后再也不用手动去启动Tomcat了,是不是很爽?这个项目的运行时需要数据库支持的,所以,需要运行SpringSide 3.04目录下的tools/database/start-db.bat以启动Derby数据库。要把它改成MySQL数据库也很容易,只需要修改项目中的src/main/resources/applicationContext.xml中的相关配置即可。

最后补充一句,如果想浏览SpringSide自己的源代码和示例项目的源代码,只需要把这些项目都导入到Eclipse就行了,连红叉问题都不用解决,毕竟我们只需要看看就行了。如下图:
001.png

评论

# re: SpringSide 复活  回复  更多评论   

2008-12-02 17:05 by 虎啸龙吟
好东西啊,请继续写完啊

# re: SpringSide 复活  回复  更多评论   

2008-12-02 18:24 by esoft
写的挺好的啊。在写点具体的分析好吗?

# re: SpringSide 复活  回复  更多评论   

2008-12-02 20:29 by 海边沫沫
@esoft
当然了,请期待我的下一篇

# re: SpringSide 复活[未登录]  回复  更多评论   

2008-12-02 21:49 by hi
有一个类似的东东jlue,基于struts1+spring1.2+hibernate3。
并且为struts1提供aop支持,对新技术不感冒的朋友可以看看,不过文档不全。

http://www.jlue.org

# re: SpringSide 复活  回复  更多评论   

2008-12-09 14:28 by playingfly
数据库的脚本放在了
springside3.0.4.all.in.one\examples\showcase\src\main\sql\derby下面。

感谢 沫沫 提供这么详细的文档,赞一个!!!

# re: SpringSide 复活  回复  更多评论   

2008-12-09 16:11 by playingfly
@playingfly
数据库的脚本放在了
.\springside3.0.4.all.in.one\examples\mini-web\src\main\sql\derby下面。
刚才发错了。 呵呵 这个应该是对的,跑过了的。

# re: SpringSide 复活  回复  更多评论   

2008-12-26 10:32 by appig
为什么我的taglibs.jsp 会有红叉叉呢?就这一个了。郁闷

# re: SpringSide 复活  回复  更多评论   

2008-12-29 11:08 by xx
springside根本就没有死掉,何以复活。
不要用吸引人的题目和粗糙的内容毒害菜鸟们了。

# re: SpringSide 复活  回复  更多评论   

2009-01-12 19:15 by 江南白衣
万分谢谢京都游侠的文章,图文并茂比SS3自带的文档清晰多了。

SS3之前的确有一段时间没什么动作了,最近才刚刚出宫,说是复活毫不为过啊

# re: SpringSide 复活  回复  更多评论   

2009-01-17 18:52 by te
在做copy-jar.bat时报错,mvn install:install-file -DgroupId=org.springside -DartifactId=springside3 -core -Dversion=3.0.4 -Dpackaging=jar -Dfile=/path/to/file

# re: SpringSide 复活  回复  更多评论   

2009-02-28 13:33 by anthony
为什么我的taglibs.jsp 会有红叉叉呢?就这一个了。郁闷

# re: SpringSide 复活  回复  更多评论   

2009-03-05 18:32 by gaozh
非常感谢楼主的经验分享!
按照楼主所说的步骤一步一步去做,成功的了安装SpringSide 3,也成功启动几个示例项目;但在运行tools\generator\new-project.bat时,却出现了问题,生成项目不成功!信息如下:

[INFO] 请保证已安装springside archetypes.
'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件。
[INFO] 已在E:\me\j2ee\springSide3 \springside3.0.4.all.in.one\tools\generator\gen
erated-project\generated-project下生成项目.
请按任意键继续. . .

Maven 的环境变量也设置好了且成功了,这是我运行"mvn -v" 所得的信息:

Maven version: 2.0.9
Java version: 1.5.0_06
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"

此问题已困扰很久,都没有解决,恳请楼主赐教,小弟感激不尽!

# re: SpringSide 复活  回复  更多评论   

2009-03-06 22:47 by super2
同目录下有个install.bat,先运行这个,然后运行new-project.bat

# re: SpringSide 复活  回复  更多评论   

2009-03-26 11:08 by yaoqiang
真尴尬了,
我使用的ss3版本是从svn check的
我改了applicationContext数据源配置,也把jar包添加在程序中。
可是一直不能加载mysql驱动。
这是啥为啥啊?
这东西搞得好眩晕啊!

# re: SpringSide 复活[未登录]  回复  更多评论   

2009-04-27 17:51 by 小强
为什么还是有红叉叉,在taglib上面,我运行了copy-all-jar.bat文件成功了,请问是什么地方设置错了么

# re: SpringSide 复活[未登录]  回复  更多评论   

2009-05-04 18:06 by 海边沫沫
那是因为在taglib.jsp中没有导入PageContext类,自己在该文件的头部添加一个import指令就可以去掉红叉了

# re: SpringSide 复活  回复  更多评论   

2011-02-26 21:10 by
刚开始接触SS3,按WIKI上的步骤,下载springside-3.3.4-src.zip运行quick-start.bat后仅mini-web正常运行起来,mini-service和showcase都出现下面这个错误,望指教下到底是什么原因引起的

2011-02-26 18:26:33,351 [main] WARN ory.config.PropertyPlaceholderConfigurer -Could not load properties from URL [file:/var/showcase/application.server.properties]: \var\showcase\application.server.properties (系统找不到指定的路径。)
2011-02-26 18:26:53,674 [JdkExecutorJob-1] INFO xamples.showcase.schedule.JdkExecutorJob -There are 6 user in database.
2011-02-26 18:26:54,041 [main] ERROR pringframework.web.context.ContextLoader -Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.wsdl.WSDLManager' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.wsdl11.WSDLManagerImpl]: Constructor threw exception; nested exception is java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/Users/peng/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.1/jaxb-impl-2.2.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:965)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1272)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383)
at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.wsdl11.WSDLManagerImpl]: Constructor threw exception; nested exception is java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/Users/peng/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.1/jaxb-impl-2.2.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958)
... 52 more
Caused by: java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/Users/peng/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.1/jaxb-impl-2.2.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.<clinit>(ModelBuilder.java:173)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:456)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:202)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:132)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:286)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)
at org.apache.cxf.wsdl.JAXBExtensionHelper.createJAXBContext(JAXBExtensionHelper.java:196)
at org.apache.cxf.wsdl.JAXBExtensionHelper.getJAXBContext(JAXBExtensionHelper.java:183)
at org.apache.cxf.wsdl.JAXBExtensionHelper.addExtensions(JAXBExtensionHelper.java:168)
at org.apache.cxf.wsdl.JAXBExtensionHelper.addExtensions(JAXBExtensionHelper.java:88)
at org.apache.cxf.wsdl11.WSDLManagerImpl.registerInitialExtensions(WSDLManagerImpl.java:263)
at org.apache.cxf.wsdl11.WSDLManagerImpl.registerInitialExtensions(WSDLManagerImpl.java:243)
at org.apache.cxf.wsdl11.WSDLManagerImpl.<init>(WSDLManagerImpl.java:113)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
... 54 more

只有注册用户登录后才能发表评论。


网站导航: