2011-05-03 34 views
23

Şu anda myapp.war adlı tomcat üzerine bir savaş dosyası yerleştirirsem, URL'sine http://localhost/myapp/MyServlet aracılığıyla erişebilirim. Ancak istediğim, savaş dosya adında bir sürüm numarası ile bir savaş dağıtmak ve yine de aynı URL'ye sahip olmaktır. eg için ben myapp-1.1.0.war dağıtmak isteyen ve hala URL Savaşı ve değişmeye devam edecektir sürüm numarasını güncellenmesi tutmak için gereken Tabii http://localhost/myapp/MyServletSavaş dosya ismini savaş dosya adından ayıran

olmak var, bu yüzden her yerde savaş dosya adını hardcode olamaz. web.xml'da herhangi bir ayar var mı? Ben savaş dosya adı ne olursa olsun uygulama için aynı URL'yi tutmak için kullanabilir miyim?

+0

Dosya adınıza bir sürüm bilgisi, bu soruya cevabımı kontrol edin: http://stackoverflow.com/a/33822607/1458639 –

cevap

7

Bunun için YOUR_WAR/META-INF/context.xml kullanabilirsiniz.

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/MyServlet"/> 
+1

@Matthew Gillard Bildiğim kadarıyla tomcat dokümanlar Sunucuda bir Bağlam öğesi koymayacağımı söylüyorlar. xml. META-INF/context.xml ile problemleri yoktur. Dokümanlar size context.xml'nin nasıl çalıştığını bile söyler. Belgelerden: "İçerik öğeleri açıkça tanımlanabilir: * $ CATALINA_BASE/conf/context.xml dosyasında: İçerik öğesi bilgileri tüm webapps tarafından yüklenecektir." –

+2

O zaman yanlış anlıyor muyum? "Yol" bölümü şu şekildedir: "Bu alanın değeri, sunucudaki bir Bağlamı statik olarak tanımlamak dışında ayarlanmamalıdır. Xml" –

+0

Bence bu alandaki tomcat'ın davranışı (ve dökümantasyonu!) Çok kafa karıştırıcı. Bunlardan en önemlisi: webapp'ınızın içerik kökünü değiştirmek istediğinize karar verirseniz, bir dosyayı $ CATALINA_BASE/conf dosyasından (bu sayfanın Giriş bölümünde bulunan 5 mermi noktasının 4'ü) manuel olarak silmeniz gerekir. –

13

çözüm WAR kısmına (URL /myapp parçası) "bağlam adı" ayar kısayol alır Tomcat, otomatik dağıtım özelliğini kullanarak durdurmak için: İşte bir örnek ".war" önce dosya adı.

Bunun yerine, (örneğin /opt/webapps/myapp-1.1.0/ gibi) diskte uygulamanın konuma dosya sistemi kendiniz ve kurulum (örneğin /myapp gibi) istenen içerik yolunu işaret TOMCAT_HOME/conf/[enginename]/[hostname]/[contextname].xml bir XML dosyası için SAVAŞ içeriğini ayıklamak.

Tomcat reference docs, Tomcat'in uygulamaları otomatik olarak nasıl dağıttığı ve bağlam yolunun uygulama dosyası konumuna eşlenmesi için özelleştirilmiş mantığı nasıl yapılandırabileceğiniz hakkında iyi bir açıklama sağlar (bu işlemin başka bir şekilde belirlenebilmesi için alternatif yollar vardır. Yukarıda önerdim).

+3

ile çalışmaz, bu, her seferinde güncellenmiş dosya adıyla savaşın yeni bir sürümünü dağıttığımda .xml dosyasını güncellemem gerekiyor mu demek? – pdeva

+1

Biraz kafam karıştı. Bu durumda, 'myapp.xml' dosyasının içeriği, savaşın konumuna işaret etmelidir? – pdeva

+1

'gibi bir şey. Tomcat, dosyanın adını, .xml uzantısı olmadan, bağlam yolu olarak kullanır. Ayrıca, sembolik bağlantı önerimi de belirttiğim dokümanlar konusunda da fark ettim. 'Doküman temeli için sembolik bir bağlantı kullanılıyorsa, sembolik bağlantıdaki değişiklikler yalnızca Tomcat'in yeniden başlatılmasından sonra ya da bağlamın ayrıştırılması ve yeniden düzenlenmesinden sonra etkili olacaktır. Bir bağlam yeniden yükleme yeterli değildir. ' –

1

Bunun için web.xml'de ayar yoktur. Bunu savaş dosyasında çapraz konteyner olarak ayarlamak mümkün olduğuna inanmıyorum - yine de bu konuda hiç bahsetmiyoruz - bu yüzden her bir konteynır bunu farklı şekilde yapıyor. jboss-web.xml, sun-web.xml, context.xml vb

4

aşağıdakileri yaparak Dağıtımınıza yolunu kontrol edebilirsiniz Maven kullanarak:

Tomcat'in conf/tomcat-users.xml:

<tomcat-users> 
    <role rolename="manager-gui"/> 
    <role rolename="manager-script"/> 
    <role rolename="manager-jmx"/> 
    <role rolename="manager-status"/> 
    <role rolename="admin-gui"/> 
    <role rolename="admin-script"/> 

    <user username="root" password="root" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/> 

</tomcat-users> 

~/.m2/settings.xml:

... 
<server> 
    <id>tomcat</id> 
    <username>root</username> 
    <password>root</password> 
</server> 
... 

pom.xml:

... 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>myapp</artifactId> 
    <version>1.1.0</version> 
    <packaging>war</packaging> 
... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>tomcat-maven-plugin</artifactId> 
     <configuration> 
      <!-- neglect /html below Tomcat7: --> 
      <url>http://server:8080/manager/html</url> 
      <!-- Refer to the server settings in your ~/.m2/settings.xml --> 
      <server>tomcat</server> 
      <path>/myWebApp</path> 
     </configuration> 
     </plugin> 
     .... 
    </plugins> 
    </build> 
... 
sizin tomcat'ı başlayın

ilk Sonra

mvn clean install tomcat:deploy 

..it ben @matt olarak, gerçekten de bahsedildiği aynı sorunu çalıştırmak ve http://server:8080/myWebApp

+0

@nir Düzeltme için teşekkürler –

0

altında erişilebilir olacaktır .. oluşturmak ve uygulamayı dağıtmak Tomcat reference docs, Tomcat'in uygulamaları otomatik olarak nasıl dağıttığı ve bağlam yolunun uygulama dosyası konumuna eşlenmesi için özelleştirilmiş mantığı nasıl yapılandırabileceğiniz hakkında iyi bir açıklama sağlar.Benim durumumda

, ben ('yol' açıklamasında) bu tavsiyeyi kullandı: statik server.xml bir Bağlam tanımlarken bile

, bu özellik (/ yol) ayarlanmamalıdır docBase, Host's appBase veya 'un altında bulunmadığı sürece, deployOnStartup ve autoDeploy, false'dur. bu kural takip edilmezse, ikili dağıtımın muhtemel olması muhtemeldir.

yüzden benim durumumda, ben yanlış hem deployOnStartup ve autoDeploy anahtarlamalı, yani benim WAR (egaWAR) nedeniyle, webapps altındaki '' dizinine otomatik patladı, ancak bunun yerine 'b' dizine değildi bu ayarlar:

<Host name="localhost" appBase="webapps" 
      autoDeploy="false" deployOnStartup="false" 
      unpackWARs="true" deployIgnore="${ignore.context}"> 

    <Context docBase="a" path="/b" /> 

</Host> 
İlgili konular