Posted on 2006-12-04 01:21
笨蛋啊帆 閱讀(187)
評論(0) 編輯 收藏
一、Win2k + JDK1.4 + Apache Tomcat 4.1.27 + jakarta-struts-1.1 環境
本例新建struts項目應用的存放路徑為:TOMCAT_HOME\webapps\ROOT\StrutsWeb 。
(TOMCAT_HOME是Apache Tomcat 4.1.27在服務器的安裝路徑,根據具體情況而有所不同,StrutsWeb即是一個struts項目應用的保存路徑)
1.訪問JSP頁面:http://127.0.0.1:8080/StrutsWeb/index.jsp ,出現類似下面的錯誤提示:
? “org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found”
? “org.apache.jasper.JasperException: File "/WEB-INF/struts-html.tld" not found”
解決辦法:
*1*.
先檢查struts應用的標簽文件的配置情況,對應\jakarta-struts-1.1\lib\中的*.tld文件,看看\StrutsWeb\WEB-INF\中的*.tld文件是否完整。
如果不全,則需要從\jakarta-struts-1.1\lib\中,把全部*.tld文件copy至\StrutsWeb\WEB-INF\中。
然后重新啟動Apache Tomcat,看看效果如何。
*.tld是標簽庫描述器文件,它們描述了多個struts標記庫中的自定義標簽。
? ?
*2*.
如果確認struts項目的標簽文件配置無誤,那么,在一般情況下,是需要把struts項目的這個WEB應用在Tomcat的服務應用中單獨描述出來,
即需修改TOMAT_HOME\conf\server.xml文件,在server.xml中找到如下行:
? <!-- Tomcat Root Context -->
? <!--
? ? ? <Context path="" docBase="ROOT" debug="0"/>
? -->
然后在其下面加上這句:
? <Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
保存server.xml,然后重新啟動Apache Tomcat,這樣就可以訪問這個WEB應用了。
即可這樣訪問:http://127.0.0.1:8080/mystruts/
? ? ? ? ? ?或 http://127.0.0.1:8080/mystruts/index.jsp。
注意:“TOMCAT_HOME”的具體含義如前所述,是根據本機的情況而定的。
2.訪問JSP頁面:http://127.0.0.1:8080/mystruts/index.jsp ,出現如下的錯誤提示:
? ?
? “org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”
解決辦法:
*1*
對應\jakarta-struts-1.1\lib\中的*.jar文件(struts1.1共有10個*.jar文件),看看\StrutsWeb\WEB-INF\lib\中的*.jar文件是否完整。
如果在\StrutsWeb\WEB-INF\lib\中只有一個struts.jar,那么將其他的*.jar文件也copy到\StrutsWeb\WEB-INF\lib\中。
然后重新啟動Apache Tomcat即可訪問。
struts.jar是一個重要的文件,它包含了struts中的所有Java類。
*2*
如果經過上面的一步還沒有搞定,那么請耐心的檢查或修改\StrutsWeb\WEB-INF\中的struts-config.xml配置文件。
看看struts配置情況是否寫錯,action-mappings的配置是否寫錯。
一定要注意區分字母的大小寫。
請再檢查一遍。
然后請再檢查一遍。
不要煩躁,一定要像對待初戀情人一樣對待它,不然會死的很難堪!
一定要好好檢查。
這個MVC中的C很要命的,流程控制全靠它了,一定要小心呵護的。[:D]
還有,記得修改完畢后重新啟動Apache Tomcat。
*3*
我在網上看到有人對這個問題說“試了千百回,改了千百次,就是不知道什么原因”。
如果你也恰好和struts是初戀,也恰好試了千百回,改了千百次,
“Cannot find ActionMappings or ActionFormBeans collection”的錯誤仍然濤聲依舊,
那么,請不要灰心,
相信我,勝利的喜悅你馬上就能體會到!
因為,這里有一個畢殺絕技!!!!!
請按照如下操作:
打開TOMAT_HOME\conf\server.xml文件,找到在上面提到過的加入WEB應用的那一行:
? <Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
然后對其修改成為:
? <Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>
這樣就加上一個參數:privileged="true",這個參數是至關重要的。
(我花N多時間找了N多帖子問了N個人才搞定的,可見struts的初戀有多辛苦了!! [:(])
?
然后重新啟動Apache Tomcat,這樣訪問JSP頁面就沒有問題了。[:D]
?
*4*
我在網上查找了一些struts應用的配置說明資料,一些配置資料上只提到把struts.jar這個文件copy到\WEB-INF\lib\中,
而并沒有說需要把sturts的全部*.jar文件進行copy。
上面提到過,struts.jar包含了struts中的所有Java類。故我有此一試。
(當然,如果連struts.jar都沒有了,那就沒有搞頭了。[:(] )
我只把struts.jar文件copy到\StrutsWeb\WEB-INF\lib\中,然后啟動Apache Tomcat(當然,web.xml和struts-config.xml已經配置完畢)。
一試,果然不爽。
訪問JSP頁面時,看到提示錯誤:
? “org.apache.jasper.JasperException: Cannot find ActionMappings or ActionFormBeans collection”
傻眼了。
又折騰了半天,發現上面提到的privileged="true"在這種情況下也可以發揮作用,
即修改server.xml文件,在<Context>的描述中加上參數privileged="true",使之變成這樣:
? ?<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true" privileged="true"/>
這樣就可以訪問JSP頁面并且運行無誤,沒有錯誤提示了。[^ō^]
所以可以得出這樣一個東東:
?
?如果在\StrutsWeb\WEB-INF\lib\中只有一個struts.jar而沒有其他的*.jar文件,那么,在server.xml文件
中把相對的WEB應用的描述進行修改,在其中加入privileged="true"參數,就可以使struts項目的應用正常運行且訪問無誤。
二、Win2k + JDK1.4 + Apache Tomcat 5.0.13 + jakarta-struts-1.1 環境
用Tomcat5作為JSP的容器,上述問題在struts中也會經常遇到,解決方法也都大致相同,privileged="true"對Tomcat5也同樣有效。[:D]
下面主要說一下不同的地方。
平時對Apache Tomcat沒有仔細研究,這次發現了幾點,簡略記錄一下。
*1*
與Apache
Tomcat4比較,Apache
Tomcat5在其conf文件夾中增加了Catalina目錄及子目錄,其詳細路徑為:TOMCAT_HOME\conf\Catalina\
localhost\,在localhost文件夾中全部是*.xml文件。
每個*.xml文件對應一個Tomcat的WEB應用的名字。
localhost文件夾中,Apache Tomcat5自動生成的有兩個文件,即admin.xml和manager.xml文件。
當Apache Tomcat5啟動后,就可以這樣訪問了:
? http://127.0.0.1:8080/admin/
? http://127.0.0.1:8080/manager/
其中,訪問http://127.0.0.1:8080/admin/ ,通過用戶名和密碼的驗證后,就可以進入Tomcat的WEB服務管理器(TOMCAT WEB SERVER ADMINISTRATION TOOL)了。
*2*
在Tomcat4中新增一個WEB應用項目的訪問,是在TOMAT_HOME\conf\server.xml文件中增加一個<Context>描述,在server.xml中找到如下行:
? <!-- Tomcat Root Context -->
? <!--
? ? ? <Context path="" docBase="ROOT" debug="0"/>
? -->
然后在其下面加上這句:
? <Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
保存server.xml后重新啟動Apache Tomcat4,就可以通過http://127.0.0.1:8080/mystruts/ 來訪問這個WEB應用了。
在Tomcat5中同樣的也可以這么做。
同樣的,在TOMAT_HOME\conf\server.xml文件中增加一個<Context>描述,重新啟動Tomcat服務后就可以用來訪問了。
需
要特別指出的是,當在在Tomcat5的server.xml文件中增加一個<Context>描述后,重新啟動Tomcat時,會自動在
TOMCAT_HOME\conf\Catalina\localhost\路徑下生成一個xml文件,這個xml文件的名稱和<
Context>描述中所寫的WEB應用的名字是一樣的。
如果server.xml文件中的這個<Context>描述有所改動的話(增加屬性或修改屬性),重新啟動Tomcat時,這些改動變化都會及時的反映在同名的xml文件中(這樣就做到了同步一致)。
例如上面在server.xml中所寫的
<Context path="/mystruts" docBase="TOMCAT_HOME\webapps\ROOT\StrutsWeb" debug="0" reloadable="true"/>
當Tomcat5啟動后,會在\Catalina\localhost\下生成一個名字為“mystruts.xml”的文件。
其內容和server.xml中所寫的一樣,為:
<Context docBase="TOMCAT_HOME/webapps/ROOT/StrutsWeb" path="/mystruts" reloadable="true">
</Context>
所
以,我們可以這樣說:如果要在Apache
Tomcat5中新增WEB應用服務的話,就可以直接在TOMCAT_HOME\conf\Catalina\localhost\路徑下編輯生成一個
xml文件,在這個xml文件中寫上相對應的<Context>描述即可,而不需要在server.xml中增加或編輯其他東東了。
[^ō^]
*3*
另外,需要說明的是,Apache Tomcat正常安裝后的啟動方式有多個:
? ?** 可以在TOMCAT_HOME\bin\中點擊startup.bat來啟動Tomcat服務。
? ?** 可以在“開始”-->“程序”-->“Apache Tomcat”菜單中點擊“Start Tomcat”來運行Tomcat服務。
但是,Tomcat4和Tomcat5的服務運行形式是不一樣的。
Tomcat4無論從“startup.bat”點擊運行還是從“Start Tomcat”點擊運行,都會出現黑屏白字的命令提示符窗口(類DOS窗口),用來提示說明Tomcat服務的運行情況和一些日志信息。
Tomcat5
從“startup.bat”點擊運行后,出現的是黑屏白字的命令提示符窗口,而從“Start
Tomcat”點擊運行后,服務窗口不會出現,而只會在屏幕的右下方出現一個帶綠色三角的托盤圖標([:D]乍一看,這個圖標和MS
SQLSERVER服務管理器的圖標幾乎一模一樣)。
*4*
使用Apache Tomcat5做服務,特別需要指出的是,如果在TOMAT_HOME\conf\server.xml文件中增加一個<Context>描述,
用“startup.bat”方式啟動Tomcat服務時,在命令提示符窗口上會顯示出如下信息(但是不會影響struts的使用)
------------------------------
警告: Error storing config file
java.io.FileNotFoundException: ..\..\conf\Catalina\localhost\mystruts.xml (系統找
不到指定的路徑。)
------------------------------
并且\Catalina\localhost\下對應的xml文件不會得到更新。
從“Start Tomcat”點擊運行Tomcat5服務是不會有這種情況的(這個可以察看Tomcat的日志文件)。
*5*
再來關注一下<Context>描述中的參數“privileged="true"”。
在路徑TOMCAT_HOME\conf\Catalina\localhost\下,找到Apache Tomcat5自動生成的有兩個文件,即admin.xml和manager.xml文件。
打開xml文件,能分別找到如下內容:
------------------------------
<Context path="/admin" docBase="../server/webapps/admin"
? ? ? ? ?debug="0" privileged="true">
</Context>
<Context path="/manager" docBase="../server/webapps/manager"
? ? ? ? debug="0" privileged="true">
</Context>
------------------------------
呵呵,看明白了嗎?
Apache Tomcat5自動生成的xml文件中,對<Context>的描述中,都有一個參數,即privileged="true" 。
? ?