Tomcat 7.0'da bir web uygulamasının bağlam yolu nasıl ayarlanır


162

Web uygulamamı (veya WAR dosyasını) ROOT olarak yeniden adlandırabileceğimi biliyorum, ancak bu korkunç bir yol, IMHO. Şimdi tomcat belgesine baktım ve diyor

Öğelerin doğrudan server.xml dosyasına yerleştirilmesi önerilmez.

Bu yüzden önerdiği başka bir yöntem yapmaya çalıştım.

Bireysel Bağlam öğeleri açıkça tanımlanabilir: Uygulama dosyalarının içindeki /META-INF/context.xml konumundaki tek bir dosyada.

Bu yüzden /META-INF/context.xmlaşağıdaki kod ile bir,

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

Ancak sunucuyu yeniden başlattığımda konuşlandırdıktan sonra hala "/" konumundaki içeriği yükleyemedi, yine de "/<WEB_APP_NAME>"

Herhangi bir işaretçiler yararlı.



1
Dokümanlarda verilen öğelerin "doğrudan server.xml dosyasına yerleştirilmesi önerilmez" nedeni aşağıdaki cümledir: "Bunun nedeni, ana conf / server.xml dosyası değiştirilemediğinden, Bağlam yapılandırmasını daha invaziv hale getirmesidir. Tomcat yeniden başlatılmadan yeniden yüklenebilir. " Aşağıdaki kabul edilen cevap sorunu doğrudan çözer, ancak bu yolu tekrar değiştirmeniz muhtemel değilse veya yeniden başlatmalar çok rahatsız edici değilse, server.xml dosyasını değiştirmek mantıksız görünmüyor.
Rimsky

Yanıtlar:


236

Yapabilecekleriniz şunlardır;

Adlı bir dosya ekleyin ROOT.xmliçinde<catalina_home>/conf/Catalina/localhost/

Bu ROOT.xml, o motor ve ana makine (Catalina ve localhost) için tomcat kurulumunun kök bağlamı için varsayılan ayarları geçersiz kılar.

ROOT.xml dosyasına aşağıdakini girin;

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

İşte, <yourApp>uygulamanızın adı .. :)

Ve işte gidiyorsunuz, başvurunuz artık varsayılan uygulama ve http://localhost:8080

Ancak, bir yan etkisi vardır; uygulamanız iki kez yüklenecek. Bir kere localhost:8080ve bir kere localhost:8080/yourApp. Bunu düzeltmek için uygulamanızı DIŞARIDA yerleştirebilir <catalina_home>/webappsve ROOT.xml'nin docBase etiketinde göreceli veya mutlak bir yol kullanabilirsiniz. Böyle bir şey;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

Ve sonra her şey yolunda olmalı!


32
Down oy kullandı mı? Tamam ama neden? Daha iyi bir alternatif varsa, bana da bildirin! : D
Paaske

1
Bu normal webapps klasöründeki diğer savaşlarla çalışır mı?
chrislovecnm

5
Çift dağıtımı çözmek için, server.xml
dosyasındaki

8
Ben / webapps "kedi geri geliyor" altında varsayılan ROOT klasörü yeniden adlandırmazsanız ve ROOT.xml docBase sıfırladı bulduk. Bu VMWare'in vfabric tc geliştirme sunucusuyla ... Dikkat edin.
hoserdude

3
Tomcat 7'nin şimdi / webapps içinde bir docBase'e izin vermeyeceği anlaşılıyor, bu nedenle savaş dosyasını başka bir yerde bulmak zorunlu gibi görünüyor.
Mojo

12

İşte benim için işe yarayan tek çözümler. Bunu conf / server.xml dosyasındaki Host düğümüne ekleyin

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

Tomcat server.xml dosyasına gidin ve yolu boş bırakın


1
olacak server.xmlveya context.xml? <Context>benim bir xml etiketi görmekcontext.xml
Saif

6
Server.xml dosyasında bağlam xml etiketi de var Ancak bağlam tanımlaması için server.xml kullanımı önerilmez
İsmail Yavuz

4

Tomcat 9.0'da yalnızca aşağıdakileri değiştirmek zorundayım server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

için

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

3

Bu küçük kod sanal ana bilgisayarlar kullanarak benim için çalıştı

<Host name="my.host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>

Bu içeride server.xmlmi? Örneğin Ali.Mojtehedy'e göre bu sorunlu. Ayrıca, diğer yanıtlar normal webapps yolunun dışında olması /path/togerektiğini belirtir .
Jean Jordaan

İyi çalışıyor gibi görünüyor. Tabii ki, KÖK uygulamasının sizinkilerle çakışmak için aynı webapps klasöründe bulunmasını istemezsiniz.
Anthony Hayward

2

En hızlı ve en iyi çözüm aşağıdaki içeriğe sahip olmaktır <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

Ve web uygulamanız şu adreste kullanılabilir olacak: http://<host>:<port>/


1
Bu docBase dizini mutlak mı yoksa belirli bir klasöre göre mi?
Jose Martinez

3
Bunu denedim, ama çalışmıyor. Aradım bir uygulamaya sahip Foobarbölgesi /opt/tomcat/webapps/Foobar. DocBase'i Foobarve ayarını yapmayı denedim /opt/tomcat/webapps/Foobar, ancak `http: // <host>: <port> 'a gittiğimde Foobar uygulamam yerine Tomcat ana sayfasını görüyorum. Tomcat'i bile yeniden başlattım. Neyi yanlış yapıyorum?
kimbaudi

Yolu boş yaptığımda uygulamama ulaşmıyor):
Snickers3192

1

Bir ay boyunca bu sorunla karşılaştım, server.xml içine bağlam etiketi koymak güvenli değildir, diğer tüm ana bilgisayarlar için dağıtılan bağlam öğelerini etkiler, büyük uygulamalar için bağlantı hataları da alır, örneğin klasör adına domain2 ile diğer sitelere erişebilirsiniz .com / domain1Klasör !! Ayrıca veritabanı oturumu bağlantıları iki kez yüklü! diğer yol tam yol ile bağlam etiketi olan ROOT.xml dosyası koymak gibi:

 <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />

conf / catalina / webappsfoldername içinde ve savaş dosyasını webappsfoldername içinde ROOT.war olarak dağıtın ve ayrıca ana bilgisayarı belirtin

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

Bu yaklaşımda aynı tip uygulamalar için kullanıcı oturumları iyi bir izolasyona sahip değildir! Eğer app1 içinde app1 aynı app2 eğer sunucu tarafı oturum tarafından giriş sonra otomatik olarak app2 giriş yapabilirsiniz?! Yani kullanıcı oturumunu jsessionid ile değil, istemci tarafı önbelleğinde tutmalısınız! çözmek için motor adını localhost'tan değiştirebiliriz. ama diyelim ki tomcat ile oynamak diğer kedilerle oynamaktan daha fazla zamana ihtiyaç duyar!


1

Server.xml veya ROOT.xml gibi sunucu yapılandırmasını güncellemeniz önerilmez.

Web uygulaması META-INF dizininizin altına, bağlam yolu ayarı dahil edilerek bir context.xml yapılandırma dosyası koyabilirsiniz. Bu, varsayılan sunucu ayarını geçersiz kılar mı?

yani:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">

1

<Context docBase="yourAppName" path="" reloadable="true">

Tomcat server.xml dosyasına gidin ve yolu boş bırakın


1

Tomcat 8: Birçok aramadan sonra bu yalnızca çalışan koddur: in server.xml

<!-- Set /apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

Tomcat'i yeniden başlatın, 127.0.0.1:8080'e eriştiğinizde içeriği 127.0.0.1:8080/apple

Projem netbeans tarafından oluşturulan java web uygulaması cadı, proje yapılandırmasında bağlam yolunu ayarladım, başka bir şey yok, hatta webapps klasörüne apple.war koydum.


1

Benim için her iki cevap da işe yaradı.

  1. / Conf / Catalina / localhost / dizinine ROOT.xml adlı bir dosya ekleme
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. Server.xml dosyasına giriş ekleme
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

Not: docBase'i bağlam altında bildirdiğinizde Host'da appBase'i yok sayın.

  1. Ancak savaş adımı şu şekilde dönüştürmeyi tercih ettim: ROOT.war ve webapps altına koymayı . Şimdi diğer savaşlardan (bağlamyolları) eşsiz URL talepleri bu savaşa girecek. Bu, ROOT ("/ **") bağlam yolunu işlemenin daha iyi bir yoludur.

İkinci seçenek de savaşları Webapps klasöründen yüklemek (çift). Ayrıca sadece baş ağrısı olan sıkıştırılmamış savaş klasörüne ihtiyaç duyar.




1

Tomcat 8.X'te, server.xml dosyasında tomcat giriş dizini / conf / folder <Context>altına <Host>, aşağıda gösterildiği gibi etiketin altına etiket ekleyebilirsiniz . Ancak etkili olabilmek için sunucuyu yeniden başlatmanız gerekir

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

VEYA Tomcat 7.X kullanıyorsanız, projenizdeki WEB-INF klasörüne context.xml dosyası ekleyebilirsiniz. Kullandığım dosyanın içeriği gösterildiği gibidir. ve benim için iyi çalıştı. bu durumda sunucuyu yeniden başlatmanız gerekmez.

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />

Tomcat'te test edildi: 9.0 liman işçisi ve bahsettiğiniz 8.0 gibi çalışıyor. localhost:8080/<Your App Directory Name>/ve localhost:8080/<your app path you wish>/bu 2 URL'nin her ikisi de aynı anda çalışır. Altında bu iki çıkarılan klasör bulundu $CATALINA_HOME/webapps/.
niaomingjian

1

En basit ve esnek çözüm aşağıdadır: Inside $ {Tomcat_home} /config/server.xml

Değiştir autoDeploy = "false" deployOnStartup = "false" altında Sunucu aşağıda gibi eleman Bu zorunluluktur.

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

Ana makine öğesinin altına aşağıdaki satırı ekleyin .

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

Yukarıdaki yaklaşımla webapps altına farklı bağlam yolu adlarına sahip çok sayıda uygulama ekleyebiliriz.


Yapılandırmanın üstündeki doinf olmadan alternatif çözüm, savaş dosyanızı root.war olarak yeniden adlandırmak ve webapps dizini altına koymaktır. Bağlam yolu otomatik olarak / olarak ayarlanır.
Ravi Gupta

-6

Aşağıdaki numara benim için çalıştı.

1) Tomcat'in server.xml dosyasından (conf klasörünün içinde) aşağıdaki yapılandırmayı yorumlayın / silin.

2) Tomcat webapps klasöründe bulunan mevcut ROOT klasörünü (varsa) silin. Ve savaşınızı (örn: test.war) yeniden adlandırın.

Savaş dosyasını ROOT.war olarak yeniden adlandırırken "ROOT" un büyük harflerle yazılması gerektiğini unutmayın.

Sınırlama: Bir tomcat örneğinin içine yalnızca bir uygulama dağıtabilirsiniz.


3
Sorudan: "Web uygulamamı (veya WAR dosyasını) ROOT olarak yeniden adlandırabileceğimi biliyorum, ancak bu korkunç bir yol, IMHO."
Jean Jordaan

1
Tomcat örneği başına sadece tek bir web uygulaması kullanmakla sınırlı kalmak istemiyorum.
ulrich
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.