Struts2 v2.1.6 筆記--starting filter struts2

1.啓動
<constant name="struts.devMode" value="true"/> 或者
<constant name="struts.configuration.xml.reload" value="true"/>
時啓動tomcat報錯。
org.apache.catalina.core.StandardContext filterStart
嚴重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)
at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
嚴重: Error filterStart
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
嚴重: Context [/Struts2Demo2] startup failed due to previous errors

devMode模式是開發模式,開啓它則默認開啓了i18n.reload、configuration.xml.reload。這個錯誤是由於configuration.xml.reload設置爲true倒置的,但是網上的資料沒有說明原因及解決辦法,倒是一個國外的apache相關BBS上有人說這是216版本的BUG,並且附上了一個.patch修正文件,說217版本會修正。。。可我不會用也不知道是不是這個原因,這個問題就一直擱置在這裏了。過了幾個月,也就是最近網上查了下發現在apache的一個郵件列表中有關於這個的解釋,原因很簡單,tomcat的安裝路徑包含空格。。。無語啊。。。一試果然如此。

下面是4個開發模式常用配置的簡介---
<!-- 開啓使用開發模式,詳細錯誤提示 -->
<!-- <constant name="struts.devMode" value="true"/>-->
<!-- 指定每次請求到達,重新加載資源文件 -->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文件更改後,自動重新加載 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用樣式表緩存 -->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->

2.零配置插件codebehind一旦導入就必須進行init-param初始化配置,否則報錯:packageAction can't mapping action!

3.<s:i18n name="???"></s:i18n>包住那個標籤,該標籤就加載它指定的國際化文件,不管是text,textfield還是form都是如此。

4.action實例、xxxScope對象都在ValueStack內,直接使用${}調用

5.使用append標籤時,沒有所謂的將map和list集合對象連接起來的說法,在創建map對象的使用的語法爲#{:,},如果省略冒號,則默認value爲null。

5.StackContext 中的對象可以理解爲struts2標籤庫使用的專用對象,比如通過value屬性調用:value="#xxx.xxx.xxx..."

6.ValueStack是StackContext的頂級對象,可以不需要#前綴使用,StackContext中的某些已建立對象可以通過比如在某些標籤中設置var屬性調入根對象ValueStack,達到省略#號的目的。在實際中則可以理解爲在標籤內臨時新建的一個或多個對象,通過var屬性指定的名稱訪問 value="xxx.xxx.xxx...."

7.${requestScope.xxx.name} 與 <s:property value="#request.xxx.name"/>(escapse屬性設置爲false) 表達的內容相同,都是輸出request範圍內的xxx對象的name屬性值,且無論是否該值包含html代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章