2009-11-02 88 views
6

我在eclipse中創建了一個主要爲空的動態web項目。瞭解tomcat中的context.xml 6

  • 沒有servlet的
  • 沒有jsp文件

的web.xml文件是

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>testprojekt</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

,我增加了一個context.xmlMETA-INF文件夾

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
     <Parameter name="companyName" value="My Company, Incorporated" override="false"/> 
</Context> 

我將此項目導出爲WAR文件。具有以下結構:

[email protected]:$ tree 
. 
|-- META-INF 
| |-- MANIFEST.MF 
| `-- context.xml 
`-- WEB-INF 
    |-- classes 
    |-- lib 
    `-- web.xml 

4 directories, 3 files 

當我將項目部署到本地tomcat(Apache Tomcat/6.0.20)時,一切都按預期工作。意思是,context.xml被複制到/ conf/Catalina/localhost並重命名爲testprojekt.xml。

當我編輯testprojekt.xml到:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Parameter name="companyName" value="My BLAH Company, Incorporated" override="false"/> 
</Context> 

我看到catalina.out的輸出如下:

02.11.2009 13:21:35 org.apache.catalina.startup.HostConfig checkResources 
INFO: Undeploying context [/testprojekt] 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext resourcesStart 
SCHWERWIEGEND: Error starting static Resources 
java.lang.IllegalArgumentException: Document base /opt/tomcat6/webapps/testprojekt does not exist or is not a readable directory 
     at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142) 
     at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4048) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4217) 
     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:526) 
     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) 
     at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) 
     at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1274) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:296) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
     at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) 
     at java.lang.Thread.run(Thread.java:619) 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Error in resourceStart() 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Error getConfigured 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Context [/testprojekt] startup failed due to previous errors 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext stop 
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/testprojekt] has not been started 

這是爲什麼?這是預期的結果嗎?在context.xml中更改參數的正確方法是什麼?

預先感謝您。 Regards,

+0

我不明白這個問題。我認爲你在「當我編輯testprojekt.xml到:」部分後遺漏了一些解釋性文本。至少我可以說這個異常信息是相當自我解釋的。從字面上理解。 – BalusC 2009-11-02 12:54:07

+0

請逃脫您的代碼示例,以便我們可以看到它們。 – 2009-11-02 12:55:00

+0

請仔細看看兩個testprojekt.xml文件。我在第二個的值中添加了一個BLAH字符串。我希望,在我改變了這個值之後,我的web應用程序可以訪問這些新的值。但我甚至沒有來到這個部分,因爲我保存後得到一個異常。我真的不明白這個例外,或者我的方法有什麼問題。 – Carsten 2009-11-02 13:25:18

回答

0

你的問題有點模棱兩可,但我會試試看。

刪除您編輯的textprojekt.xml,在您的項目的context.xml中進行相同的更改,然後重新啓動tomcat。

它可能是由兩個xml文件之間的衝突引起的。更改由tomcat創建的xml文件不會更改webapp的context.xml文件。至少它不會在我用於開發工作的tomcat6.0.18上進行更改。

希望有幫助。

+0

嗯,我把問題也放在了tomcat用戶郵件列表上,而且這種行爲似乎是一個BUG。 https://issues.apache.org/bugzilla/show_bug.cgi?id=47343 但我想知道,爲什麼會改變conf/Catalina/localhost/testprojekt.xml REDEPLOY該webapp?我會猜到,它會重新安裝web應用程序!那麼在哪裏放置你的數據庫配置(例如)呢?你將會改變這種狀況,而不會造成停機。我猜。 – Carsten 2009-11-02 13:57:52

2

我認爲這是Tomcat中的一個錯誤。我提交了一個錯誤報告,但他們聲稱它按照設計工作。 Tomcat有3種部署模式:目錄,WAR和上下文片段。在你的情況下,它重新加載時會感到困惑。

這裏是導致錯誤的序列,

  1. 當部署WAR,上下文片段(META-INF/context.xml中)被複制到CONF /卡塔利娜/ [主機]目錄中。
  2. 當您修改片段時,它會正確檢測到更改,因此重新部署被觸發。
  3. 但是,它忘記了這是WAR部署並將其視爲目錄部署。該目錄被undelpoy刪除,所以你得到的錯誤。

如果您只更改META-INF中的XML,一切都應該適合您。