2009-11-02 2 views
6

Eclipse에서 주로 빈 동적 웹 프로젝트를 만들었습니다.tomcat 6의 context.xml 이해

그것은

  • 없는 서블릿
  • 없는 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> 

내가 그 META-INF 폴더에 context.xml을 추가

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

이 프로젝트를 WAR 파일로 내 보냈습니다. 다음과 같은 구조로 :

프로젝트를 로컬 Tomcat (Apache Tomcat/6.0.20)에 배포 할 때 모든 것이 예상대로 작동합니다. 즉, context.xml은/conf/Catalina/localhost에 복사되고 testprojekt.xml로 이름이 변경됩니다.

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 

왜이다 : 나는 catalina.out에 다음과 같은 출력을 볼

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

:

나는에 testprojekt.xml을 편집

? 이것이 예상 된 결과입니까? context.xml에서 매개 변수를 변경하는 올바른 방법은 무엇입니까?

미리 감사드립니다. 감사합니다,

+0

나는 그 질문을 이해하지 못한다. 나는 "testprojekt.xml을 편집 할 때"부분 뒤에 설명 텍스트가 누락되었다고 생각합니다. 적어도 나는 예외 메시지가 공정하게 설명 할 수 있다고 말할 수있다. 그대로 가져 가라. – BalusC

+0

코드 샘플을 볼 수 있도록 이스케이프하십시오. –

+0

두 개의 testprojekt.xml 파일을 자세히 살펴보십시오. 두 번째 값에 BLAH 문자열을 추가했습니다. 값을 변경 한 후에는 내 웹 응용 프로그램이 이러한 새로운 값에 액세스 할 수있을 것으로 기대됩니다. 하지만 저장을 한 후에 예외가 생기기 때문에이 부분까지 올 수 없습니다. 그리고 나는 예외를 이해하지 못한다. 아니면 내 접근법에서 잘못된 점이있다. – Carsten

답변

0

귀하의 질문은 다소 모호하지만 시도해 보겠습니다.

편집 한 textprojekt.xml을 삭제하고 프로젝트의 context.xml에서 동일한 변경 사항을 적용한 다음 tomcat을 다시 시작하십시오.

두 개의 XML 파일이 충돌하여 발생할 수 있습니다. Tomcat이 만든 xml 파일을 변경하면 webapp의 context.xml 파일이 변경됩니다. 적어도 그것은 devcat 작업에 사용하는 tomcat6.0.18에서는 변경되지 않습니다.

희망이 있습니다.

+0

흠, tomcat 사용자 메일 링리스트에 질문을 올려 놓았습니다.이 동작은 버그라고 생각됩니다. https://issues.apache.org/bugzilla/show_bug.cgi?id=47343 하지만 궁금한데, 왜 conf/Catalina/localhost/testprojekt.xml에서 webapp을 재배포합니까? 나는 그것을 추측했을 것입니다, 그것은 webapp을 다시 불러올 것입니다! 그러면 DB 구성 (예 :)을 올릴 수있는 적절한 위치는 어디입니까? 가동 중지 시간없이 변경해야합니다. 그렇 겠지. – Carsten

2

나는 이것이 Tomcat의 버그라고 생각합니다. 나는 버그 보고서를 제출했으나 설계된대로 작동한다고 주장한다. Tomcat에는 Directory, WAR 및 Context Fragment의 3 가지 배포 모드가 있습니다. 귀하의 경우, 다시로드 할 때 혼란스러워집니다.

여기

  1. 는 WAR 문맥 단편 (META-INF/context.xml에)를 배포

    가/카탈/[호스트] 디렉토리 conf의에 복사되고, 오류로 이어지는 시퀀스이다.
  2. 조각을 수정하면 변경 내용을 올바르게 감지하므로 재배포가 트리거됩니다.
  3. 그러나 이것은 WAR 배치이므로 잊어 버리고 디렉토리 배치로 간주합니다. 디렉토리가 undelpoy에 의해 제거되므로 오류가 발생합니다.

META-INF의 XML 만 변경하면 모든 것이 잘 작동합니다.