隨筆 - 81  文章 - 1033  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          在浮躁的年代里,我們進取心太切,患得患失;虛榮心太強,戰戰兢兢。一心爭強好勝,惟恐榜上無名。
          I think I can fly , and flying like a bird !
          程序員一名,已售出,缺貨中!

          我的郵件聯系方式

          用且僅用于MSN

          博客點擊率
          free web counter
          free web counter

          常用鏈接

          留言簿(36)

          隨筆檔案

          搜索

          •  

          積分與排名

          • 積分 - 187057
          • 排名 - 309

          最新評論

          閱讀排行榜

          評論排行榜

          ???????因為想體驗一把Spring2.0基于aop名稱空間的AOP和Hibernate3.2比EJB3.0的JPA還要細致強大的annotation等等新特征,特地跑到SpringSide(一個基于Spring核心的強大而優雅的企業快速開發框架)去下載了完整的開發包。記得要先照它介紹的方式運行起來,只要雙擊個.bat文件程序,數據庫(HSQLDB),服務器(Tomcat5.5)就全部署好了,范例就已經跑起來了,非常吸引人。但是我一般用的是Resin3? ,所以我打算停了Tomcat跑起我的Resin,這時候一向聽話的Resin居然開始撒嬌了。

          ??????配好路徑啟動Resin,調試信息如下:
          ?1Resin-3.0.19?(built?Mon,?15?May?2006?04:50:47?PDT)
          ?2Copyright(c)?1998-2006?Caucho?Technology.??All?rights?reserved.
          ?3
          ?4??Using?Resin(R)?Open?Source?under?the?GNU?Public?License?(GPL).
          ?5
          ?6??See?http://www.caucho.com?for?information?on?Resin?Professional,
          ?7??including?caching,?clustering,?JNI?acceleration,?and?OpenSSL?integration.
          ?8
          ?9Starting?Resin?on?Wed,?24?Jan?2007?21:25:59?+0800?(CST)
          10
          11[21:26:02.375]?Server[]?starting
          12[21:26:02.375]?
          13[21:26:02.375]?Windows?XP?5.1?x86
          14[21:26:02.375]?Java?1.5.0_10-b03,?32,?mixed?mode,?GBK,?zh,?Sun?Microsystems?Inc.
          15[21:26:02.375]?resin.home?=?D:\resin-3.0.19
          16[21:26:02.375]?server.root?=?null
          17[21:26:02.375]?
          18[21:26:02.484]?http?listening?to?*:8080
          19[21:26:02.546]?hmux?listening?to?localhost:6802
          20[21:26:02.765]?Host[]?starting
          21[21:26:03.890]?com.caucho.config.LineConfigException:?WEB-INF/web.xml:4:?bad?character?fffd
          22[21:26:04.781]?WebApp[http://localhost:8080/resin-doc]?starting
          23[21:26:04.953]?Resin?started?in?3000ms


          ??????注意紅色的信息,讀取web.xml異常了,我四級都沒過的英語也看出來了是字符錯誤,相信大家也看出來了吧。憑著經驗判定是文件編碼的問題,用eclipse打開web.xml果然中文部分有亂碼。一向都覺得Resin在編碼的處理上,特別是中文編碼上比Tomcat5要好很多。今天怎么會出現這種奇怪的問題,帶著疑問繼續往下看吧。我當時想還是先跑起來再說,老老實實的把編碼都轉一下吧。

          ??????告訴大家一個轉文件編碼最簡單的辦法,就是把文件用windows自帶的記事本程序打開,選擇菜單“文件”-“另存為”,然后在另存為的界面把文件類型選擇為“所有文件”,編碼選擇為“UTF-8”,選擇目標文件覆蓋保存。

          ??????轉了編碼后發現注釋中有兩個顯示不了的字符,反正是注釋索性就刪掉了。修改后再次啟動Resin,果然正常了。但是又出現了更郁悶的問題。部分調試信息如下:

          ?12007-01-24?22:44:02,125?ERROR?[org.springframework.web.context.ContextLoader]?-?<Context?initialization?failed>
          ?2org.springframework.beans.factory.BeanDefinitionStoreException:?Unexpected?exception?parsing?XML?document?from?file?[D:\projects\SSHelloWorld\webapp\WEB-INF\classes\spring\applicationContext.xml];?nested?exception?is?java.lang.IllegalArgumentException:?Bean?name?must?not?be?empty
          ?3Caused?by:?
          ?4java.lang.IllegalArgumentException:?Bean?name?must?not?be?empty
          ?5????at?org.springframework.util.Assert.hasText(Assert.java:161)
          ?6????at?org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:58)
          ?7????at?org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:46)
          ?8????at?org.springframework.transaction.config.AnnotationDrivenBeanDefinitionParser.parseInternal(AnnotationDrivenBeanDefinitionParser.java:76)
          ?9????at?org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:56)
          10????at?org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:78)
          11????at?org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1147)
          12????at?org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1137)
          13????at?org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:145)
          14????at?org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:89)
          15????at?org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:499)
          16????at?org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:407)
          17????at?org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:357)
          18????at?org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
          19????at?org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:126)
          20????at?org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
          21????at?org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:123)
          22????at?org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:91)
          23????at?org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:94)
          24????at?org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:294)
          25????at?org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
          26????at?org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
          27????at?org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)
          28????at?org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
          29????at?com.caucho.server.webapp.Application.start(Application.java:1597)
          30????at?com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
          31????at?com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
          32????at?com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:509)
          33????at?com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:158)
          34????at?com.caucho.server.webapp.ApplicationContainer.start(ApplicationContainer.java:652)
          35????at?com.caucho.server.host.Host.start(Host.java:385)
          36????at?com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
          37????at?com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
          38????at?com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:509)
          39????at?com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:158)
          40????at?com.caucho.server.host.HostContainer.start(HostContainer.java:501)
          41????at?com.caucho.server.resin.ServletServer.start(ServletServer.java:977)
          42????at?com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)
          43????at?com.caucho.server.deploy.AbstractDeployControllerStrategy.start(AbstractDeployControllerStrategy.java:56)
          44????at?com.caucho.server.deploy.DeployController.start(DeployController.java:517)
          45????at?com.caucho.server.resin.ResinServer.start(ResinServer.java:485)
          46????at?com.caucho.server.resin.Resin.init(Resin.java)
          47????at?com.caucho.server.resin.Resin.main(Resin.java:624)


          ??????一看錯誤是Bean name must not be empty,bean的名字不能為空?為什么啊,沒聽說過啊,不管是Spring的官方文檔,范例還是看的書上教授的都沒有聽說這么一回事情啊。沒天理啊,運行個HelloWorld也這么費力。。。馬上抱起錯誤就去找Google,居然搜不到。。。(正因為GOOGLE搜索不到相關的解決,所以我特地寫了這篇文章與大家分享)不會吧,難道大家都沒碰到過,我的人品問題?Google也沒辦法找到的問題,我只好翻找Spring的源代碼。查看org.springframework.util.Assert.hasText類,原來拋出java.lang.IllegalArgumentException異常不是按字面意思理解的bean名字不能為空,先汗自己!不過在這個類里面也沒找到具體的原因。難道還要繼續往前翻找源代碼?雖然看大師們的作品是種享受,但是注定我運行HelloWorld就搞成這樣?并且查源代碼也不是一時能找的出問題的。

          ??????停止服務,啟動服務,停止服務,啟動服務。。。反復的反復,問題依然。換回Tomcat去,一切正常。。。徹底崩潰,難道resin上跑不起Spring?Spring容器可是JAVA原生的動態代理方式實現,完全應該具備JAVA的“一次編寫到處運行”。我看到的文檔和書籍也無一不盛贊它的Web服務器,應用服務器無關。我想一定是哪里配置有問題,我又把每個xml配置文件都翻了個遍,依然找不出問題。

          ??????我突然想起曾經看過的一篇關于JAVA XML的文章,好像JAVA默認的XML解析用的是Crimson,不如另一個XML解析實現Xerces ,莫非是Resin用的解析不行?抱著死馬當活馬醫的態度配上了xerces。

          ??????配置xerces方法如下:
          ??????1.在VM級
          ??????首先在CLASSPATH下放置xerces相關的包,然后在JRE\lib\目錄下建一個jaxp.properties的文件,用來聲名替換解析器,jaxp.properties內容如下:
          ?

          1javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl?
          2javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl


          注意:必須建立此文件顯示聲明,如果只是引入了xerces的相關包,由于JDK的Class Loader的優先級關系,還是會很頑固的使用Crimson。

          ??????2.在web服務器級(Resin3.0.19為例)
          ??????把xerces相關包放入容器的CLASSPATH中(Resin主目錄下的lib目錄),然后在配置文件resin.conf(Resin主目錄下的conf目錄中resin.conf文件)中的server節點中加入如下XML代碼:

          1<system-property?javax.xml.parsers.DocumentBuilderFactory="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>
          2?<system-property?javax.xml.parsers.SAXParserFactory="org.apache.xerces.jaxp.SAXParserFactoryImpl"/>



          ???????聲明調用xerces實現XML解析。

          ???????JAVA XML相關內容推薦參閱:
          ???http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml

          ?? http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml

          ?? http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part2/index.shtml

          ?? http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part1/index.shtml


          ??????我在Resin中配置好xerces后,啟動。WebApplicationContext初始化正常,Struts初始化正常,一切正常,終于看到了界面。

          ??????然后我又想剛才web.xml中的錯誤會不會也是因為沒有用xerces的原因,把原來沒修改的web.xml又拷了一個過來,啟動依然報同樣的錯,仔細再看文件里面確實在最開始的注釋中有兩個錯誤的字符,不知道SpringSide的大俠們是故意的還是不小心弄錯了。。。刪除錯誤字符啟動,成功!

          ??????總結如下:
          ??????1.?web.xml中是以為確實存在錯誤的字符導致web容器無法初始化,修改文件后就正常了。
          ??????2.?Resin讀取Spring的配置文件必須顯示采用xerces,否則無法初始化Spring容器。建議配置服務器級的xerces。
          ??????3.?平時開發和學習過程中應廣泛涉獵,拓寬知識面。碰到問題大膽假設,聯想,細心調試。最后再糾根問底,徹查明白。
          ??????4.?遇到問題不輕易放棄,多思考,多總結,多記錄。

          ?
          posted on 2007-01-25 00:29 cresposhi 閱讀(5550) 評論(10)  編輯  收藏

          FeedBack:
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-01-25 15:40 小車馬
          樓主思路很正確,軟件開發就是這樣子的。。

          潛力貼論壇:http://content.uu1001.com  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-01-25 21:22 施偉
          初學Spring,希望大家多給意見,多指導!在此謝過先!  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-01-26 12:48 eloo
          re一下,Resin用它自己的解析器解析,也不是Crimson.看resin doc的這一頁:resin-doc/doc/jaxp.xtp  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-01-31 21:02 施偉
          @eloo
          多謝,受益匪淺  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-02-02 12:05 小祝
          支持支持  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-02-02 15:15 梅穎
          我總講不正經的話,會不會影響真的想來討論技術的同志們進來的心情啊。。。  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-02-02 20:38 施偉
          呵呵,我最喜歡在快樂中學習。
          你看有了你博里多么熱鬧啊 象過年一樣 開心 呵呵  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-02-02 22:13 梅穎
          天天過年就不好玩了灑

            回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-07-09 13:48 Nap
          萬分感謝!
          很驚異地發現,整個google只能搜到兩個resin fffd問題相關的條目,一個是本帖,還有一個在一個中文spring論壇上的求助,沒有解答。我也納悶為什么其他人沒有碰到類似的問題。而我是先后兩次碰到了這個問題。前一次是幾個月前,我使用tomcat避開了這個問題。這次徹底解決。謝謝!萬分感謝!  回復  更多評論
            
          # re: 在Resin3下配置SpringSide的HelloWorld示例程序碰到的問題和解決方法 2007-12-23 09:00 sgwood
          呵呵,后面的那個問題在resin 3.1.2并沒有出現,我找了找也沒發現有xerces這個包.但仍能運行helloworld,當然前提是web.xml的中文全刪.  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 新巴尔虎左旗| 大邑县| 普安县| 台州市| 嫩江县| 临夏县| 巫溪县| 巴林左旗| 浪卡子县| 德化县| 江油市| 苗栗市| 南靖县| 平舆县| 梓潼县| 望谟县| 萨迦县| 丽江市| 云浮市| 奉节县| 漳州市| 修水县| 和平区| 无极县| 广东省| 新密市| 赣榆县| 昌江| 深圳市| 扶余县| 吴川市| 杭州市| 曲松县| 高碑店市| 陆川县| 长武县| 金昌市| 和林格尔县| 蒲城县| 台东市| 宜兰县|