基於sturts2.1.6的項目文件部署到tomcat6.0之後,服務器啓動時報錯:嚴重: Error filterStart

學習struts2.0,嘗試手動建立一個簡單項目有,結構如下

 

struts2qs

      | — WEB-INF

      |         | — classes(包含struts.xml)

      |         | — lib

      |         | — web.xml

      |

      | — login.jsp

 

其中lib文件夾中只導入struts2-core-2.1.6jar、xwork-2.1.2.jar、ognl-2.6.11.jar、freemaker-2.3.13.jar、commons-logging.jar五個jar包;

 

因爲是在DOS窗口下手動編譯Struts 2相關的程序,所以將Struts2-core-2.1.6.jar和xwork-2.1.2.jar添加到系統的CLASSPATH環境變量裏;同時將tomcat文件中lib文件夾下的servlet-api.jar拷貝到jdk/jre/lib/ext文件夾下,否則編譯Servlet類時,會報錯找不到包javax.Servlet.*

 

因爲struts 2要求jdk5.0的運行環境,需要支持Servlet API 2.4和JSP API 2.0的Web容器,所以我這裏採用的是jdk1.6.0,tomcat6.0版本;

 

項目部署到tomcat之後,服務器啓動,出現錯誤信息:

嚴重: Error filterStart
2009-5-15 17:03:36 org.apache.catalina.core.StandardContext start
嚴重: Context [/struts2qs] startup failed due to previous errors
2009-5-15 17:03:37 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info

 

查看tomcat錯誤日誌,才能發現根本的原因所在

2009-5-15 17:03:36 org.apache.catalina.core.StandardContext filterStart
嚴重: Exception starting filter Struts2
Unable to load configuration. - bean - jar:file:/D:/apache-tomcat-6.0.18/webapps/struts2qs/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:46:178
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
 at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
 at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
 at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
 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)
Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.MultiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest - bean - jar:file:/D:/apache-tomcat-6.0.18/webapps/struts2qs/WEB-INF/lib/struts2-core-2.1.6.jar!/struts-default.xml:46:178
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:222)
 at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165)
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
 ... 30 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
 at java.lang.Class.getDeclaredConstructors0(Native Method)
 at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
 at java.lang.Class.getDeclaredConstructors(Class.java:1836)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:212)
 ... 33 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 ... 37 more

 

最終原因是需要導入commons-fileupload-1.2.1.jar!!!

對此深有感觸的是:出錯時查看tomcat日誌文件真的是程序員調試的好習慣!!!

關於該問題的詳細可參考:

http://topic.csdn.net/u/20080619/15/402f0fd5-b22b-4123-af9c-143799be60ee.html

——————————————————————————————————————————————————————

還有另外一個問題:

實際服務器在啓動開始時,還有一段信息

信息: The APR based Apache Tomcat Native library which allows optimal performanc
e in production environments was not found on the java.library.path: D:/jdk1.6.0
_10/bin;.;C:/WINDOWS/Sun/Java/bin;C:/WINDOWS/system32;C:/WINDOWS;D:/jdk1.6.0_10/
bin;D:/jdk1.6.0_10/jre/bin;D:/oracle/ora92/bin;C:/Program Files/Oracle/jre/1.3.1
/bin;C:/Program Files/Oracle/jre/1.1.8/bin;C:/Program Files/IDM Computer Solutio
ns/UltraEdit-32;D:/MySQL/MySQL Server 5.0/bin;C:/windows/system32;D:/apache-tomc
at-6.0.18/bin;

出現它的原因則並非有什麼錯誤,只是tomcat建議使用apache的apr

APR(Apache portable Run-time libraries,Apache可移植運行庫)的目的如其名稱一樣,主要爲上層的應用程序提供一個可以跨越多操作系統平臺使用的底層支持接口庫。
在早期的Apache版本中,應用程序本身必須能夠處理各種具體操作系統平臺的細節,並針對不同的平臺調用不同的處理函數。隨着Apache的進一步開發,Apache組織決定將這些通用的函數獨立出來並發展成爲一個新的項目。這樣,APR的開發就從Apache中獨立出來,Apache僅僅是使用 APR而已。
目前APR主要還是由Apache使用,不過由於APR的較好的移植性,因此一些需要進行移植的C程序也開始使用APR,開源項目比如Flood loader tester(http://httpd.apache.org/test/flood/,該項目用於服務器壓力測試,不僅僅適用於Apache)、FreeSwitch(www.freeswitch.org),JXTA-C(http://jxta-c.jxta.org,C版本的JXTA點對點平臺實現);商業的項目則包括Blogline(http://www.bloglines.com/,covalent(http://www.covalent.net) 等等。 APR使得平臺細節的處理進行下移。對於應用程序而言,它們根本就不需要考慮具體的平臺,不管是Unix、Linux還是Window,應用程序執行的接口基本都是統一一致的。因此對於APR而言,可移植性和統一的上層接口是其考慮的一個重點。而APR最早的目的並不是如此,它最早只是希望將Apache 中用到的所有代碼合併爲一個通用的代碼庫,然而這不是一個正確的策略,因此後來APR改變了其目標。有的時候使用公共代碼並不是一件好事,比如如何將一個請求映射到線程或者進程是平臺相關的,因此僅僅一個公共的代碼庫並不能完成這種區分。
APR的目標則是希望安全合併所有的能夠合併的代碼而不需要犧牲性能。 APR的最早的一個目標就是爲所有的平臺(不是部分)提供一個公共的統一操作函數接口,這是一個非常了不起的目的,當然也是不現實的一個目標。我們不可能支持所有平臺的所有特徵,因此APR目前只能爲大多數平臺提供所有的APR特性支持,包括Win32、OS/2、BeOS、Darwin、Linux等等。爲了能夠實現這個目標,APR開發者必須爲那些不能運行於所有平臺的特性創建了一系列的特徵宏(FEATURE MACROS)以在各個平臺之間區分這些特徵。這些特徵宏定義非常簡單,通常如下: APR_HAS_FEATURE 如果某個平臺具有這個特性,則該宏必須設置爲true,比如Linux和window都具有內存映射文件,同時APR提供了內存映射文件的操作接口,因此在這兩個平臺上,APR_HAS_MMAP宏必須設置,同時ap_mmap_*函數應該將磁盤文件映射爲內存並返回適當的狀態碼。如果你的操作系統並不支持內存映射,那麼APR_HAS_MMAP必須設置爲0,而且所有的ap_mmap_*函數也可以不需要定義。第二步就是對於那些在程序中使用了不支持的函數必須提出警告。
APR中支持的基本類型
文件夾名稱                            描述
atomic/srclib/apr/atomic           原子操作
dso/srclib/apr/dso                 動態加載共享庫
fileio/srclib/apr/file_io          文件IO處理
mmap/srclib/apr/mmap               內存映射文件
locks/srclib/apr/locks             進程和線程互斥鎖
memory/srclib/apr/memory           內存池操作
network_io/srclib/apr/network_io   網絡IO處理
poll/srclib/apr/poll               輪詢IO
table/srclib/apr/tables            Apache數組(堆棧)和表格以及哈希表
process /srclib/apr/threadproc     進程和線程操作
user /srclib/apr/user              用戶和用戶組操作
time /srclib/apr/time              時間操作
string/srclib/apr/strings          字符串操作
password /srclib/apr/passwd        終端密碼處理
misc /srclib/apr/misc              大雜燴,不屬於其餘類的任何apr類型都可以放在裏面
shmem /srclib/apr/shmem            共享內存
random /srclib/apr/random          隨機數生成庫

 

apr 是apache portable runtime 用上這個後可以有效的提高tomcat處理靜態頁面的能力.如果想使用apr的話, 實際操作很簡單,

下載 http://tomcat.heanet.ie/native/1.1.1/binaries/win32/tcnative-1.dll

將這個文件複製到C:/WINDOWS/system32/下面,然後重新啓動tomcat,就會發現tomcat 的控制檯信息爲:
2007-12-31 9:55:40 org.apache.catalina.core.AprLifecycleListener init
信息: An older version 1.1.8 of the Apache Tomcat Native library is installed, while Tomcat recommends version greater then 1.1.10
2007-12-31 9:55:40 org.apache.catalina.core.AprLifecycleListener init
信息: Loaded Apache Tomcat Native library 1.1.8.


本問題參考:

http://www.blogjava.net/sealyu/archive/2009/04/11/265054.html

http://www.diybl.com/course/3_program/java/javashl/2008422/110729.html

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/hyp3353/archive/2009/05/15/4190053.aspx

發佈了0 篇原創文章 · 獲贊 0 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章