Uygulamamı Tomcat'in kök dizinine dağıtmak


132

Başvurumun savaş dosyası bende. Bunu kök seviyesinde dağıtmam gerekiyor. Mevcut URL http://localhost:8080/war_name/application_name.


1
Sorunun tam olarak ne olduğunu belirtebilir misin? Tomcat'te bir savaş dosyası konuşlandırdığınızda, uygulamaya .war uzantısı olmadan URL: localhost: 8080 / war_name kullanılarak erişilir .
ashishjmeshram

1
Evet haklısınız, uygulamama erişmem gerekiyor. " localhost / application_name ", bu, savaş dosyamı "ROOT.war" olarak yeniden adlandırdığımda elde edebilirim, ancak savaş dosyası
boyutum

1
@ user661660 - Farklı bir sorununuz var gibi görünüyor - işe yaramalı olarak yeniden adlandırmak ROOT.war. OutOfMemoryExceptionYığın izini ve ayrıntılarını sağlayarak, sizin hakkında başka bir soru sormanızı öneririm . Muhtemelen -XmxJVM için yapılandırarak bunun üstesinden gelebilirsiniz .
Rob Hruska

.lang.OutOfMemoryError: PermGen alanı 16 Mart 2011 9:52:52 AM com.ebay.kernel.logger.Logger günlüğü SEVERE: Perfmon iş parçacığında hata java.lang.OutOfMemoryError: İş parçacığındaki PermGen alanı İstisnası "CalClient: NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError:" MetricsSnapshotScheduler "iş parçacığında PermGen alanı İstisnası java.lang.OutOfMemoryError: PermG en space 16 Mart 2011 9:53:36 AM com.ebay.kernel.logger.Logger günlüğü SEVERE: Perfmon'da hata thread java.lang.OutOfMemoryError: PermGen alanı "CalClient: NotifyThreadDestroyThread-0" iş parçacığında istisna java.lang.OutOfMemor yError: PermGen alanı
iamjustcoder

1
@ user661660 - Belki bu sorunun yanıtlarından bazıları size yardımcı olabilir.
Rob Hruska

Yanıtlar:


220

Senin birkaç seçeneğin var:

  1. Kullanıma hazır ROOT/dizini tomcat'ten kaldırın ve savaş dosyanızı ROOT.warkonuşlandırmadan önce olarak yeniden adlandırın .

  2. (Sizin örnekten) gibi savaş dağıtın war_name.warve yapılandırmak bağlam kökü içinde conf/server.xmlsizin savaş dosyası kullanmak için:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

İlki daha kolay, ama biraz daha karışık. İkincisi, muhtemelen bunu yapmanın daha zarif yoludur.



4
@Dejel - Teknik olarak bir şey yok. Bunu biraz kendim yaptım; işi bitirir. Kendi savaş dosyanızı, kabın bir tür uygulama detayı gibi bir şeye yeniden adlandırmak zorunda kalmak biraz riskli hissettiriyor.
Rob Hruska

4
Sağladığınız bağlantıya göre <Context> öğelerini doğrudan server.xml dosyasına yerleştirmeniz ÖNERİLMEZ
Nilesh

6
Bu cevap, belgelerde açıkça kötü biçim olarak belirtilen bir tekniği önermektedir. Uygun teknik burada ayrıntılı olarak açıklanmıştır: stackoverflow.com/questions/41263245/…
Christopher Schultz

5
ROOT.war olarak adlandırdığı için +1. Tomcat belgelerine göre, çift dağıtımı önlemek için "yol" belirtirken çok dikkatli olmanız gerekir: "Server.xml'de statik olarak bir Bağlam tanımlarken bile, docBase'den biri Ana Bilgisayar'ın altında yer almadığı sürece bu öznitelik ayarlanmamalıdır. appBase veya hem deployOnStartup hem de autoDeploy yanlıştır. Bu kurala uyulmazsa, çift dağıtım büyük olasılıkla sonuçlanır. " - tomcat.apache.org/tomcat-8.0-doc/config/context.html adresinden
Anthony Hayward

31

tomcat v.7'de (vanilya kurulumu)

conf / server.xml dosyanıza aşağıdaki biti dosyanın sonuna, </Host>kapanış etiketinin hemen öncesine ekleyin :

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Not olduğunu docBase özniteliği. Önemli olan bu. Ya kök web uygulamanızı değiştirmeden önce app_name'yi konuşlandırdığınızdan emin olun ya da sadece paketlenmemiş web uygulamanızı (uygulama_adı) tomcat'inizin webapps klasörüne kopyalayın. Başlangıç, kökü ziyaret edin, orada uygulamanızı görün!


13

Tomcat 7'de bu değişikliklerle, myAPP'ye / ve ROOT konumunda / ROOT konumunda erişebiliyorum.

<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

<Host>Server.xml'deki bölümün üstüne ekleyin


3
Bir bağlam yolu ya boş bir dize olmalı ya da '/' ile başlamalıdır. [ROOT] yolu bu kriterleri karşılamıyor ve [/ ROOT] olarak değiştirildi
Nikita Bosik

11

Cevabımın diğer bazı cevaplarla örtüştüğünü biliyorum, ancak bu bazı avantajları olan eksiksiz bir çözüm. Bu Tomcat 8'de çalışıyor:

  1. Ana uygulama kökten sunulur
  2. Savaş dosyalarının web arayüzü üzerinden konuşlandırılması sürdürülür.
  3. Ana uygulama 80 numaralı bağlantı noktasında çalışırken, yalnızca yöneticiler yönetim klasörlerine erişebilir (* nix sistemlerinin 80'e bağlanmak için süper kullanıcı gerektirdiğini anlıyorum, ancak pencerelerde bu bir sorun değil).

Bu, tomcat'i yalnızca bir kez yeniden başlatmanız gerektiği ve güncellendikten sonra savaş dosyalarının sorunsuz bir şekilde dağıtılabileceği anlamına gelir.

Adım 1: server.xml dosyasında, bağlayıcı girişini bulun ve şu şekilde değiştirin:

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

2. Adım: <Host ...>Etiket içindeki bağlamları tanımlayın :

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Webapp klasöründeki tüm uygulamalara hitap ettiğimi unutmayın. İlki kökü ve ana uygulamayı etkili bir şekilde konumdan değiştirir. ROOT şimdi açık http://example.com/ROOTve ana uygulama açık http://example.com/. Parola korumalı web uygulamaları,privileged="true" özniteliği .

Kök ile eşleşen bir CAS.war dosyasını dağıttığınızda (<Context path="/" docBase="CAS"> dağıtımla yenilenmediği için bunu yönetici panelinde yeniden yüklemeniz gerekir.

<Context path="/CAS" docBase="CAS">Savaş dosyalarını dağıtmak için yönetici seçeneğini devre dışı bıraktığı için bağlamlarınıza dahil etmeyin . Bu, uygulamaya iki şekilde erişebileceğiniz anlamına gelir:http://example.com/ vehttp://example.com/APP/

Adım 3: Kök ve yönetici klasörüne istenmeyen erişimi önlemek için, valvebu bağlam etiketlerine aşağıdaki gibi bir ekleyin :

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

Bu, esasen yönetici web uygulaması klasörüne erişimi, varsayılan bağlantı noktası 8080'i kullandıklarında kendi etki alanımdan (sahte IP adresi) ve localhost'tan kişilerle sınırlar ve savaş dosyalarını web arayüzü aracılığıyla dinamik olarak dağıtma yeteneğini korur.

Bunu farklı IP adresleri kullanan birden çok uygulama için kullanmak istiyorsanız, IP adresini konektöre ( address="143.21.2.1") ekleyebilirsiniz .

Kökten birden fazla web uygulaması çalıştırmak istiyorsanız, Servis etiketini çoğaltabilir (ikincisi için farklı bir ad kullanın) ve <Context path="/" docBase="CAS">örneğin docbase'i olarak değiştirebilirsiniz <Context path="/" docBase="ICR">.


6

En hızlı yol.

  1. ROOT uygulamasının konuşlandırılmadığından emin olun, varsa dağıtın

  2. Savaşınızı ROOT.war olarak yeniden adlandırın, konuşlandırın, hepsi bu, konfigürasyon değişikliği gerekmez


6

Kaldır $CATALINA_HOME/webapps/ROOT. Güncelle $CATALINA_HOME/conf/server.xml, Host öğesinin aşağıdaki metne benzediğinden emin olun:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

Tomcat 8 ile birlikte çalışır. AutoDeploy ve deployOnStartup'ın tomcat'in myAppiki kez konuşlandırılmasını önlemek için false olarak ayarlanması gerekir .


WAR'ı yüklemeyi denedim ve çalışmadı. Bu sadece patlamış savaşlar için mi?
logixplayer

WAR'ı yüklemeyi denedim ve @ Jingguo'nun örneğine göre çalışamadı. Bu sadece patlamış savaşlar için mi? DÜZENLEME: SADECE patlamış savaşlar için gerçekten. Bu neden? Sadece WAR'ı yükleyip bu çift adımdan kaçınamaz mıyım? Nasıl çalıştırabilirim?
logixplayer

@logixplayer. Çözümüm WAR ile çalışıyor. Ben patlatmadım. Bunun $CATALINA_HOME/webapps/ROOTkaldırılması gerektiğini söylemeyi unuttum . Lütfen kaldırıp tekrar deneyin.
Jingguo Yao

Dediğin gibi KÖK'ü kaldırdım. WAR'ımı konuşlandırdım (patlatılmış dizin değil). WEB-INF gibi içeriğimin bulunduğu yeni bir ROOT dizininin oluşturulduğunu fark ettim. Site çalışıyor. İşe yaraması gereken yol bu mu?
logixplayer

Ayrıca bu yöntemi denedim ve sayfayı tarayıcıda açmaya çalıştığımda sadece sunucuyu beklemeye devam ediyor. Catalina.out yalnızca sunucunun başlatıldığını belirtir.
Asu

1

@Rob Hruska'nın soluna ek olarak, server.xml içindeki bu ayar çalışır:

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

Not: Bazı durumlarda override = "true" gerekli olabilir.


bunu nereye koyacağından bahsetmedin. @Sudheer Palyam cevabı yardımcı oldu.
Kannan Ramamoorthy

1

Ekleme @Dima kullandığınız takdirde, 'ın cevabı mavenpaket oluşturmak için aşağıdakileri yapmanız WAR dosya adını ayarlamak için bunu söyleyebilirim ROOTiçinde pom.xml:

<build>
    <finalName>ROOT</finalName>
</build>

Varsayılan olarak, web tomcatuygulamasını ROOT.warkök içeriğe ( /) dağıtır .


0

tomact yöneticisi url'sini açın: - http: // localhost: 8080 / manager / html /
daha sonra uygulamalarda "/" olarak yola sahip bir uygulama görürsünüz,
basitçe Bunu Dağıtın. Uygulamanızın savaş dosyasını ROOT.war olarak yeniden adlandırın ve şu yola yerleştirin: - Tomcat'inizi başlatın Ek yapılandırma gerekmez. Artık uygulama ana sayfamızı veya yapılandırılmış url'yi http: // localhost: 8080'de görebiliriz.
görüntü açıklamasını buraya girin
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

Sunucumda bunu kullanıyorum ve kök otomatik dağıtım gayet iyi çalışıyor:

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

Bu, /
mysite'a
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.