Bagaimana cara mengubah aplikasi ROOT?

130

Saya mencoba untuk mengubah aplikasi default dari server web Tomcat 6 ke aplikasi yang berbeda dari "ROOT" (di dalam folder webapps). Apa cara terbaik untuk melakukan ini?

pengguna247702
sumber

Jawaban:

129

Ada tiga metode:

  • Pertama, matikan Tomcat Anda dari bindirektori ( sh shutdown.sh). Kemudian hapus semua konten Tomcat Andawebapps folder ( rm -fr *). Kemudian ganti nama file WAR Anda ROOT.war, dan akhirnya mulai Tomcat Anda dari bindirektori ( sh startup.sh).

  • Tinggalkan file perang Anda di $CATALINA_BASE/webappsbawah nama aslinya. Matikan autoDeploy dan deployOnStartup di elemen Host Anda di server.xmlfile. Tetapkan secara eksplisit semua Konteks aplikasi dalam server.xml, yang menentukan kedua jalur atribut dan docBase . Anda harus melakukan ini karena Anda telah menonaktifkan semua mekanisme auto-deploy Tomcat, dan Tomcat tidak akan menyebarkan aplikasi Anda lagi kecuali ia menemukan Konteksnya di server.xml.

    Metode kedua: untuk membuat perubahan pada aplikasi apa pun, Anda harus berhenti dan memulai kembali Tomcat.

  • Tempatkan file WAR Anda di luar $CATALINA_BASE/webapps(itu harus di luar untuk mencegah penyebaran ganda). Tempatkan file konteks bernama ROOT.xmldi $CATALINA_BASE/conf/. Elemen tunggal dalam file konteks ini HARUS memiliki atribut docBase yang menunjuk ke lokasi file WAR Anda. Elemen path tidak boleh disetel - itu berasal dari nama .xmlfile, dalam hal ini ROOT.xml. Lihat dokumentasi untuk wadah Konteks untuk detailnya.

Referensi


sumber
4
Saya mencoba metode pertama dan berhasil! Bdw - Anda TIDAK perlu menghapus semuanya. Saya baru saja menghapus folder ROOT dan mengubah nama perang saya menjadi ROOT.war dan itu berfungsi seperti pesona.
hostnik
Saya tahu ini tidak benar-benar mengikuti aturan sof tetapi mengacaukannya ..... Terima kasih! Saya berharap saya bisa lebih memilih sekali. Sangat membantu. BTW, saya harus me-restart tomcat sebelum ini berhasil, @hostnik.
pasty jahat
@ danny-london metode ketiga tidak bekerja untuk saya di Tomcat 7, tetapi tidak berfungsi jika Anda menempatkan file ROOT.xml dalam $CATALINA_BASE/conf/[enginename]/[hostname]direktori (yang untuk pengaturan dasar saya adalah $CATALINA_HOME/conf/Catalina/localhost). Lihat dokumentasi Context Container .
Michael Scheper
Alternatif modern untuk memulai Tomcat: di sudo systemctl start tomcatxmana xmerupakan nomor versi
EarthMind
24

Menambahkan <Context>tag pada <Host>tag in server.xmluntuk Tomcat 6 akan menyelesaikan masalah.

Jika Anda menggunakan path=""kosong, Anda dapat menggunakan URL seperti http://localhost/first.do.

Di tag konteks atur atribut docBase="E:\struts-ITRCbook\myStrutsbook"dan reloadable="true", lalu akhiri tag konteks.

Seharusnya terlihat seperti ini:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>
ze.
sumber
apakah ini juga berlaku untuk kucing jantan 7?
Marcy Sutton
4
Per dokumentasi: Untuk Tomcat 6, tidak seperti Tomcat 4.x, TIDAK disarankan untuk menempatkan elemen <Context> langsung di file server.xml. Ini karena itu membuat memodifikasi konfigurasi Konteks lebih invasif karena file conf / server.xml utama tidak dapat dimuat ulang tanpa me-restart Tomcat.
beri tahu pendekatan ini memiliki efek samping! myStrutsbook akan menggunakan dua kali Once untuk localhost: 8080 dan sekali untuk localhost: 8080 / myStrutsbook! dan dapat menyebabkan kesalahan koneksi database dan lebih banyak penggunaan sumber daya
Ali.Mojtehedy
24

Di Tomcat 7 dengan perubahan ini, saya dapat mengakses myAPPdi /dan ROOTdi/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

Tambahkan di atas ke <Host>bagian di server.xml

Sudheer Palyam
sumber
Hanya solusi yang saya cari! Terima kasih satu juta, Sudheer! Bekerja seperti pesona bagi saya. Dan hei! Saya punya pertanyaan lain. Ketika saya mengakses ROOT /ROOTdan mencoba masuk ke halaman Manajer menggunakan kredensial yang benar, saya ditolak aksesnya. Apakah Anda tahu cara memperbaikinya?
Saturnus
@Sudheer Palyam saya melakukan hal yang sama. Saya mengubah file server.xml, dan kemudian saya memulai server. Tetapi ketika saya memuat / mengunjungi localhost: 8080, itu menunjukkan kepada saya 404 kesalahan status. Jika saya menghapus baris ini dari server.xml, maka itu memuat port di atas.
Sachin Kumar
16

Aplikasi default ROOT biasanya Tomcat Manager - yang dapat berguna jadi saya ingin menyimpannya.

Jadi cara saya membuat ROOT aplikasi saya dan menjaga TCmgr seperti ini.

berganti nama menjadi ROOT menjadi sesuatu yang lain

mv ROOT TCmgr

kemudian membuat tautan simbolis di mana ROOT menunjuk ke aplikasi yang ingin saya jadikan default.

ln -s <your app> ROOT

bekerja untuk saya dan tampaknya pendekatan yang paling mudah.

nestochan
sumber
@Vic Anda benar, tetapi windows memang memiliki tautan simbolik, di XP dan di atas saya pikir Anda dapat menggunakan mklink. Harap dicatat saya belum melakukan ini dan ada alasan saya untuk tidak menggunakan tautan simbolis.
MichaelStoner
12

Anda dapat melakukan ini dengan cara yang sedikit diretas dengan:

  1. Hentikan Tomcat
  2. Pindahkan ROOT.war ke samping dan rm -rf webapps / ROOT
  3. Salin webapp yang Anda inginkan ke webapps / ROOT.war
  4. Mulai Tomcat
gareth_bowles
sumber
2
Jelek atau mungkin icky, tetapi hacky mungkin istilah yang salah karena itu tampaknya menjadi metode resmi / yang didukung.
Brian Knoblauch
3

Solusi alternatif adalah membuat servlet yang mengirim pengalihan ke webapp default yang diinginkan dan memetakan servlet ke semua url di webapp ROOT.

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}

Tambahkan kelas di atas ke
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
Dan tambahkan yang berikut ini ke
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml:

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

Dan jika diinginkan Anda dapat dengan mudah memodifikasi RedirectServlet untuk menerima param init untuk memungkinkan Anda mengatur webapp default tanpa harus memodifikasi sumbernya.

Saya tidak yakin apakah melakukan ini akan memiliki implikasi negatif, tetapi saya memang menguji ini dan sepertinya berhasil.

Jonathan Dixon
sumber
2

konfigurasi context.xml tidak berfungsi untuk saya. Tomcat 6.0.29 mengeluh tentang docBase yang berada di dalam appBase: ... Untuk Tomcat 5 ini benar-benar berfungsi.

Jadi salah satu solusinya adalah dengan meletakkan aplikasi di folder ROOT.

Solusi lain yang sangat sederhana adalah dengan meletakkan index.jsp ke ROOT yang mengalihkan ke aplikasi saya seperti ini: response.sendRedirect ("/ MyApplicationXy");

Salam, Jan

Jan
sumber
1

Saya punya masalah ketika mengkonfigurasi Tomcat ' server.xmldan menambahkan elemen Konteks. Dia hanya tidak ingin menggunakan konfigurasi saya: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

Jika Anda berada dalam suatu Unix-likesistem:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

Selesai

Bekerja untukku.

AC de Souza
sumber
1

Cara terbaik untuk mengubah aplikasi root tomcat. Diuji pada Tomcat 7 dan 8.

  1. Pindah ke direktori webapp tomcat:

    Contoh di mesin saya: ~/stack/apache-tomcat/webapps

  2. Ganti nama, ganti atau hapus folder ROOT. Saran saya adalah mengganti nama atau membuat salinan untuk cadangan. Contoh, ganti nama ROOT menjadi RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Pindahkan file perang dengan aplikasi Anda ke direktori webapp tomcat (ini adalah direktori tempat folder ROOT lama, di komputer saya: ~ / stack / apache-tomcat / webapps)

File perang harus memiliki nama ROOT.war . Ganti nama aplikasi Anda jika perlu: yourApplicationName.war -> ROOT.war

  1. Mulai kembali kucing jantan. Setelah restart aplikasi Anda akan menjadi root.
Jackkobec
sumber
0

Saya akan melihat dokumen saya; ada cara menentukan konfigurasi untuk mengubah jalur aplikasi web root dari ROOT (atau ROOT.war), tetapi tampaknya telah berubah antara Tomcat 5 dan 6.

Menemukan ini:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-aplikasi ...-td20017401.html

Jadi, tampaknya mengubah jalur root (di ROOT.xml) dimungkinkan, tetapi agak rusak - Anda harus memindahkan PERANG di luar direktori penyebaran otomatis. Keberatan jika saya bertanya mengapa hanya mengganti nama file Anda ke ROOT.war bukan solusi yang bisa diterapkan?

Don Werve
sumber
1
Sayangnya mengubah file perang ke ROOT.war bukan pilihan bagi saya. Jacques
agak terlambat, tapi ... bagi saya, saya tidak dapat mengubahnya karena saya menggunakan sistem yang dibuat oleh pihak ketiga, yang tampaknya telah mengkodekan beberapa lokasi untuk menyimpan file .... jadi pindahkan ke ROOT.war membuat masalah, karena aplikasi asli mencari toples sendiri di bawah direktori yang ada di [originalapp.war]
mur
0

Bukan solusi yang sangat bagus tetapi salah satu caranya adalah dengan mengarahkan dari aplikasi ROOT ke YourWebApp. Untuk ini, Anda perlu memodifikasi ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

ATAU

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

Referensi: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

abbas
sumber
-4

Di Tomcat 7 (di bawah server Windows) saya tidak menambahkan atau mengedit apa pun ke file konfigurasi apa pun. Saya baru saja mengganti nama folder ROOT ke sesuatu yang lain dan mengganti nama folder aplikasi saya menjadi ROOT dan berfungsi dengan baik.

Dov
sumber
1
Ini mungkin solusi yang baik, tetapi pertanyaan Jaques adalah tentang bagaimana mengubah aplikasi default; mungkin ada alasan mengapa dia tidak dapat mengubah konten folder ROOT.
JVMATL