Cara mengatur lintasan konteks aplikasi web di Tomcat 7.0


162

Saya tahu bahwa saya bisa mengganti nama webapp saya (atau itu file PERANG) menjadi ROOT tetapi ini adalah cara yang mengerikan untuk melakukannya, IMHO. Sekarang saya memeriksa dokumen kucing jantan & katanya

Tidak dianjurkan untuk menempatkan elemen langsung di file server.xml

Jadi saya mencoba melakukannya dengan metode lain yang disarankan.

Elemen Konteks Individu dapat didefinisikan secara eksplisit: Dalam file individual di /META-INF/context.xml di dalam file aplikasi.

Jadi saya buat /META-INF/context.xmldengan kode berikut,

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

Tetapi setelah penggelaran ketika saya me-restart server itu masih gagal memuat konteks di "/", itu masih memuatnya dengan "/<WEB_APP_NAME>"

Setiap petunjuk bermanfaat.



1
Alasan "TIDAK dianjurkan untuk menempatkan elemen langsung di file server.xml" yang diberikan dalam dokumen berikut dalam kalimat berikut: "Ini karena membuat memodifikasi konfigurasi Konteks lebih invasif karena file conf / server.xml utama tidak dapat dimuat ulang tanpa memulai ulang Tomcat. " Jawaban yang diterima di bawah secara langsung menyelesaikan masalah, tetapi jika Anda tidak akan mengubah jalur ini lagi atau memulai ulang tidak terlalu mengganggu, memodifikasi server.xml sepertinya tidak masuk akal.
rimsky

Jawaban:


236

Yang dapat Anda lakukan adalah yang berikut;

Tambahkan file bernama ROOT.xmldi<catalina_home>/conf/Catalina/localhost/

ROOT.xml ini akan mengesampingkan pengaturan default untuk konteks root dari instalasi kucing jantan untuk mesin dan host tersebut (Catalina dan localhost).

Masukkan berikut ini ke file ROOT.xml;

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

Di sini, <yourApp>adalah nama, yah, aplikasi Anda .. :)

Dan begitulah, aplikasi Anda sekarang adalah aplikasi default dan akan muncul http://localhost:8080

Namun, ada satu efek samping; aplikasi Anda akan dimuat dua kali. Sekali untuk localhost:8080dan sekali untuk localhost:8080/yourApp. Untuk memperbaikinya, Anda dapat meletakkan aplikasi Anda DI LUAR <catalina_home>/webappsdan menggunakan jalur relatif atau absolut dalam tag docBase ROOT.xml. Sesuatu seperti ini;

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

Dan kemudian semuanya baik-baik saja!


32
Turut memilih? Ok, tapi kenapa? Jika ada alternatif yang lebih baik, beri tahu saya juga! : D
Paaske

1
Apakah ini akan bekerja dengan perang lain di folder webapps biasa?
chrislovecnm

5
Untuk menyelesaikan penyebaran ganda, Anda juga dapat menetapkan atribut false of Host "deployOnStartup" dan "autoDeploy" di server.xml
Sefler

8
Saya telah menemukan bahwa jika Anda tidak mengganti nama folder ROOT default di bawah / webapps "the cat came back" dan itu akan me-reset docBase di ROOT.xml. Ini dengan server pengembangan vfabric tc VMWare ... Berhati-hatilah.
Hoserdude

3
Tampaknya Tomcat 7 tidak akan mengizinkan docBase di dalam / webapps sekarang, jadi tampaknya wajib untuk menemukan file perang di tempat lain.
Mojo

12

Berikut ini satu-satunya solusi yang bekerja untuk saya. Tambahkan ini ke simpul Host di conf / server.xml

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

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

</Context>

buka file Tomcat server.xml dan setel path kosong


1
akan di server.xmlatau context.xml? saya melihat tag xml <Context>dicontext.xml
Saif

6
Ada juga tag konteks xml di server.xml Namun penggunaan server.xml untuk mendefinisikan konteks tidak disarankan
İsmail Yavuz

4

Di Tomcat 9.0, saya hanya perlu mengubah yang berikut di server.xml

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

untuk

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

3

Kode kecil ini bekerja untuk saya, menggunakan host virtual

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

Ini ada di dalam server.xml? Menurut misal Ali.Mojtehedy di atas itu bermasalah. Juga, jawaban lain menyatakan bahwa /path/toharus di luar jalur webapps normal.
Jean Jordaan

Tampaknya bekerja dengan baik. Tentu saja, Anda tidak ingin aplikasi ROOT ada di folder webapps yang sama dengan Anda.
Anthony Hayward

2

Paling cepat dan mungkin solusi terbaik adalah memiliki konten di bawah <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

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

Dan aplikasi web Anda akan tersedia di http://<host>:<port>/


1
Apakah direktori docBase mutlak atau relatif untuk folder tertentu?
Jose Martinez

3
Saya mencoba ini, tetapi tidak berhasil. Saya memiliki sebuah aplikasi yang disebut Foobardi /opt/tomcat/webapps/Foobar. Saya mencoba mengatur docBase Foobardan juga /opt/tomcat/webapps/Foobar, tetapi ketika saya pergi ke `http: // <host>: <port> / Saya masih melihat beranda Tomcat alih-alih aplikasi Foobar saya. Saya bahkan memulai kembali Tomcat. Apa yang saya lakukan salah?
kimbaudi

Ketika saya membuat jalan nol itu tidak mencapai aplikasi saya):
Snickers3192

1

Saya menghadapi masalah ini selama satu bulan, Menempatkan tag konteks di dalam server.xml tidak aman itu mempengaruhi elemen konteks penyebaran untuk semua host lain, untuk aplikasi besar butuh kesalahan koneksi juga isolasi yang tidak baik misalnya Anda dapat mengakses situs lain dengan nama folder domain2 .com / domain1Folder !! juga koneksi sesi basis data dimuat dua kali! cara lain adalah meletakkan file ROOT.xml yang memiliki tag konteks dengan path lengkap seperti:

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

di conf / catalina / webappsfoldername dan menyebarkan file perang sebagai ROOT.war di dalam webappsfoldername dan juga tentukan host seperti

 <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>

Dalam pendekatan ini juga untuk aplikasi jenis yang sama sesi pengguna tidak memiliki isolasi yang baik! Anda mungkin di dalam app1 jika app1 sama dengan app2 Anda dapat setelah login dengan sesi sisi server secara otomatis dapat masuk ke app2 ?! Jadi, Anda harus menyimpan sesi pengguna di cache sisi klien dan tidak dengan jsessionid! kami dapat mengubah nama mesin dari localhost untuk menyelesaikannya. tetapi katakanlah bermain dengan kucing jantan membutuhkan lebih banyak waktu daripada bermain dengan kucing lain!


1

Tidak disarankan untuk memperbarui konfigurasi server seperti server.xml atau ROOT.xml.

Anda dapat meletakkan file konfigurasi context.xml di direktori META-INF aplikasi web Anda, dengan pengaturan jalur konteks disertakan. Ini akan menimpa pengaturan server default?

yaitu:

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

1

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

buka file Tomcat server.xml dan setel path kosong


1

Tomcat 8: Setelah banyak pencarian, ini hanya kode yang berfungsi: di 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>

Mulai ulang Tomcat, pastikan ketika Anda mengakses 127.0.0.1:8080, itu akan menampilkan konten di 127.0.0.1:8080/apple

Proyek saya adalah penyihir aplikasi web java yang dibuat oleh netbeans, saya menetapkan path konteks dalam konfigurasi proyek, tidak ada hal lain, bahkan saya meletakkan apple.war di folder webapps.


1

Bagi saya, kedua jawaban itu berhasil.

  1. Menambahkan file bernama ROOT.xml di / conf / Catalina / localhost /
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. Menambahkan entri di server.xml
<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>

Catatan: ketika Anda mendeklarasikan docBase dalam konteks lalu abaikan appBase di Host.

  1. Namun saya lebih suka mengonversi nama perang saya ROOT.wardan menempatkannya di bawah webapps. Jadi sekarang permintaan url yang tak tertandingi dari perang lain (konteks jalan) akan mendarat ke perang ini. Ini adalah cara yang lebih baik untuk menangani jalur konteks ROOT ("/ **").

Opsi kedua adalah (dua kali lipat) memuat perang dari folder Webapps juga. Juga hanya perlu folder perang yang tidak terkompresi yang merupakan sakit kepala.




1

Di Tomcat 8.X, di bawah direktori home tomcat / conf / folder di server.xml Anda dapat menambahkan <Context>tag di bawah <Host>tag seperti yang ditunjukkan di bawah ini. Tetapi Anda harus me-restart server agar dapat berlaku

  <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>

ATAU jika Anda menggunakan Tomcat 7.X Anda dapat menambahkan file context.xml di folder WEB-INF di proyek Anda. Isi file yang saya gunakan adalah seperti yang ditunjukkan. dan itu bekerja dengan baik untuk saya. Anda tidak perlu me-restart server dalam hal ini.

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

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

Diuji dalam kucing jantan: 9.0 buruh pelabuhan dan berfungsi sebagai 8.0 yang Anda sebutkan. localhost:8080/<Your App Directory Name>/dan localhost:8080/<your app path you wish>/kedua 2 URL ini bekerja secara bersamaan. Ditemukan dua folder yang diekstrak di bawah $CATALINA_HOME/webapps/.
niaomingjian

1

Solusi paling sederhana dan fleksibel adalah di bawah ini: Di ​​dalam $ {Tomcat_home} /config/server.xml

Ubah autoDeploy = "false" deployOnStartup = "false" di bawah elemen Host seperti di bawah ini.

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

Tambahkan baris di bawah ini di bawah elemen Host .

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

Dengan pendekatan di atas kita dapat menambahkan sebanyak mungkin aplikasi di bawah webapps dengan nama jalur konteks yang berbeda.


Solusi alternatif tanpa konfigurasi doinf di atas hanyalah mengganti nama file perang Anda ke root.war dan meletakkannya di bawah direktori webapps. Jalur konteks secara otomatis akan diatur ke /.
Ravi Gupta

-6

Trik di bawah ini berhasil untuk saya.

1) Komentar / hapus konfigurasi di bawah ini dari file server.xml (di dalam folder conf) dari kucing jantan.

2) Hapus folder ROOT yang ada (Jika ada) yang berada di dalam folder webapp Tomcat. Dan ganti nama file perang Anda (mis .: test.war) menjadi ROOT.war.

Ingat bahwa saat mengganti nama file perang ke ROOT.war "ROOT" harus dalam huruf kapital.

Batasan: Anda hanya dapat menggunakan satu aplikasi di dalam satu instance kucing jantan.


3
Dari pertanyaan: "Saya tahu saya bisa mengganti nama webapp saya (atau itu file WAR) menjadi ROOT tapi ini cara yang mengerikan untuk melakukannya, IMHO."
Jean Jordaan

1
Saya tidak ingin membatasi diri hanya menggunakan satu webapp per instance kucing jantan.
Ulrich
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.