tomcat加載項目原理解惑

今天新遇到一個問題,同樣是在啓動startup.bat的時候,       

最後得出的結論居然是java_home這個環境變量的值後面加了個";(分號)"的原因.得出的解釋是加上分號代表有兩個值以上,java_home不能有兩個值.


 在tomcat的webapps下加入了一個文件夾,希望通過啓動tomcat來訪問文件夾下面的文件.然而在啓動startup.bat和在eclipse下面啓動tomcat都沒能成功.

        在startup.bat的最後加入了一個"pause",於是看到提示說缺少JDK_HOME和JRE_HOME,於是在startup.bat中加入了

SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_20
SET JRE_HOME=C:\Program Files\Java\jre6

再啓動startup.bat就可以成功的訪問webapps下面的所有項目了.

        我們再回過頭來分析eclipse下面的tomcat問題.在eclipse中新建Server時都需要Add and Remove Projects,所以我們可以想象在我沒有爲tomcat添加任何項目的情況下不可以訪問項目是理所當然的.也就是添加了哪一個或幾個項目纔可以訪問哪些項目下的資源.這和直接啓動tomcat有區別.在網上查到了一篇"鏈接:淺談Eclipse調用Tomcat服務的原理"有詳細的解釋.如下:

    首先,在Eclipse中新建一個Hello工程,Workspace的位置在c:\eclipse\workspace,所以hello工程的位置就是在%Workspace%\hello\這個文件夾中。
    然後在hello工程中添加一個hello.jsp或者index.jsp都可以(index.jsp會方便一點),內容隨便寫點,如在body標籤之間中就一個Hello Eclipse and Tomcat6.0!然後Run as中選擇“Run on server”,這是就會調用已經配置好的Tomcat服務器(此時把你的Tomcat服務關閉,讓Eclipse來調用就可以了,否則會有小小的衝突),這時在瀏覽器(Eclipse當中的Web Browser)中就有了我們想看到的東西,其中url=http://localhost/hello/(隱含index.jsp)!


Hello Eclipse and Tomcat6.0!


    !重點來了,Eclipse這期間幹了什麼?Tomcat的虛擬目錄中,你沒有設置Hello,怎麼能運行?
    1.在MyEclipse的做法(MyEclipse有,Eclipse沒有的方法)是:將你的工程拷貝一份到Tomcat目錄中的webapps\目錄當中(這個目錄中,不需設置,tomcat就會把文件夾下當做一個站點,但是webapps\這個目錄下的html文件是不會解析的,根目錄URL\解析的是ROOT文件夾下的網頁文件),這樣Tomcat就多了一個站點,自然可以訪問。
    2.在Eclipse中的做法不太一樣,Eclipse調用了JDK中的JAVAw.exe,並且指定了許多參數,如:

%JAVA_HOME%\bin\javaw.exe -Dcatalina.base=C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1 "-Dcatalina.home=c:\Tomcat 6.0" -Dwtp.deploy=C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps "-Djava............."

如果你的windows任務管理器有印象路徑(或者其他任務管理工具)你就會看到這行命令行,而此時,任務列表中沒有Tomcat.exe這個服務進程,但是你卻可以訪問Tomcat服務器的hello工程的頁面。
    此時,打開文件夾:C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
你可以看到的是類似Tomcat目錄下的結構,在wtpwebapps中就有你所有的工程拷貝(即Workspace目錄下的project)。如果你訪問http://localhost可能提示你404找不到頁面,但是在你的Tomcat下的ROOT裏確實有文件,並且現在你用Tomcat的webApps下的站點都無法使用,原因就在於Eclipse更改了(使用參數,臨時更改,關閉Eclipse中的Tomcat服務,Tomcat恢復原樣)Tomcat的webapp主目錄(我想就是-Dcatalina.base=...)
    以下用%tmp1%代替C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1;
    用記事本打開%tmp1%\conf\web.xml(和tomcat文件夾下的結構一樣),這是配置虛擬目錄的文件,我們可以找到host標籤,沒什麼不同(這裏appBase依舊是webapps,但是已經映射到了%tmp1%\wtpwebapps了),其實這些文件應該是先從Tomcat的conf文件夾裏拷貝到這裏,然後根據Eclipse的工程進行了修改,我們看。
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
    在下面就有了兩個Context的虛擬目錄項;是三個哦。。第一個指定了ROOT(這裏面什麼文件也沒,所以無法訪問http://localhost/),和工程沒關係,第二個和第三個是我的hello和helloworld工程,看看,都有了docBase和相對url的path了吧。所以在瀏覽器中才能訪問到hello和helloworld的jsp頁面。

<Context docBase="C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ROOT" path="" reloadable="false"/>


<Context docBase="C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\HelloWorld" path="/HelloWorld" reloadable="true" source="org.eclipse.jst.jee.server:HelloWorld"/>


<Context docBase="C:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\hello" path="/hello" reloadable="true" source="org.eclipse.jst.jee.server:hello"/></Host>





---------------------------------------------------------------------------------------------------------------------------------
copyright:http://www.cnblogs.com/anee/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章