京山游俠

          專注技術,拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          SpringSide 復活

          Posted on 2008-12-02 15:10 京山游俠 閱讀(10304) 評論(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
          主站蜘蛛池模板: 静海县| 沂南县| 克山县| 岢岚县| 漾濞| 平乐县| 和平区| 湘阴县| 乐都县| 铁力市| 梓潼县| 万盛区| 江孜县| 温宿县| 玛曲县| 礼泉县| 桃源县| 鄂伦春自治旗| 台北县| 武邑县| 富蕴县| 祥云县| 南川市| 平度市| 阿合奇县| 铜梁县| 黑河市| 砚山县| 衢州市| 和静县| 上高县| 内丘县| 汤阴县| 岳普湖县| 莆田市| 上思县| 六枝特区| 喀喇| 灵石县| 沂源县| 金阳县|