Tomcat 7 mengikuti masalah slash dengan webapps

13

Baru-baru ini saya memutakhirkan server kucing jantan saya dari versi 6.x ke versi 7.x terbaru.

Saya datang dengan sedikit kesulitan, berharap mendapatkan bantuan.

Saya memiliki aplikasi panggilan MyApp

Pada tomcat6, ketika saya pergi ke http://www.example.com/MyApp/page/ saya biasanya akan mendapatkan hasil yang diinginkan.

Sekarang, pada tomcat7, mengunjungi url yang persis sama (dengan trailing slash) Saya mendapatkan kesalahan: "Sumberdaya tidak tersedia", karena tomcat berpikir bahwa / MyApp / page / adalah nama webapp keseluruhan alih-alih nama permintaan halaman di bawah aplikasi web MyApp.

Saya memerlukan garis miring pada akhir url saya karena jika tidak, saya mendapatkan kesalahan: "Status HTTP 405 - Metode permintaan 'GET' tidak didukung" yang OK karena saya benar-benar tidak mengizinkan metode GET ke permintaan "halaman" .

Jika seseorang tahu bagaimana cara memberitahu tomcat bahwa trailing slash demi path dari webapp yang ada seharusnya tidak seharusnya mengarahkannya ke webapp baru memanggil seluruh "string" dan hanya memproses permintaan seperti pada tomcat6, itu akan bagus!


sumber
Apakah ada servlet default web.xmlyang dipetakan /*? Kalau tidak, kucing jantan menggunakan daftar file selamat datang. Biasanya hanya segmen jalur pertama yang interpredet sebagai root konteks. Jadi tidak menemukan webapp Anda sepertinya tidak menjadi masalah.
mana
segmen jalur pertama adalah root konteks dan benar-benar berfungsi, ia menemukannya, tetapi jalur berikut alih-alih menjadi bagian dari jalur pertama, pencarian kucing jantan untuk webapp dengan semua jalur .. Saya tidak memiliki apa pun yang mengonfigurasi itu tidak standar ..
Saya benar-benar tidak mengerti apa yang Anda katakan. Maaf. Jika Anda memiliki webapp yang dikonfigurasi dengan nama MyAppmaka tomcat akan menggunakan konteks aplikasi web ini menggunakan jalur yang tersisa page/. Jika tidak, itu akan mencari ROOTkonteksnya, menggunakan path lengkap untuk pencarian.
mana
Saya memiliki panggilan webapp, MyApp dan example.com/MyApp berfungsi, tetapi ketika mengunjungi example.com/MyApp/foo alih-alih mencari konten foo di dalam MyApp, appapp mencari panggilan webapp "MyApp / foo /" dan tidak mencari konten di bawah MyApp menyebut foo ..

Jawaban:

1

Pertanyaan kuno, tetapi karena saya baru-baru ini bertarung dengan garis miring di Tomcat 8, saya tahu bahwa masalah dengan garis miring terus mengganggu dunia pengguna Tomcat. :-)

Apa yang mungkin Anda temui adalah perubahan dalam cara Tomcat menangani pengalihan saat memuat konteks root. Lihat bug 58660 dan baca beberapa diskusi pengembang di sana. Anda mungkin perlu mematikan mapper default dengan memodifikasi mapperContextRootRedirectEnabledatribut Contextelemen di conf/context.xml.

Peter
sumber
0

Periksa selamat datang-file-daftar Anda .. yang berikut adalah spekulasi ...

Saya percaya inti masalah adalah ketika Tomcat disajikan dengan / - Ini memiliki beberapa pilihan - Iterate atas daftar file selamat datang - Tidak ada apa-apa di sana - tampilkan daftar direktori (jika diaktifkan)

Di sinilah kesenangan dimulai ... Banyak orang ingin menggunakan *. Lakukan untuk hal-hal seperti struts. Jadi mereka ingin index.do menjadi beranda. Atau juga umum adalah index.jsp di mana * .jsp dipetakan ke JspServlet.

Di sinilah semuanya menjadi menyenangkan. Jadi misalkan file selamat datang Anda adalah index.jsp, index.do.

Apa yang dilakukan Tomcat (IIRC) adalah pertama kali mengulangi daftar file selamat datang untuk mencari sumber daya dari nama itu.

Maka itu akan melakukan pass kedua mencari pemetaan yang cocok. Jadi jika index.jsp ditentukan dalam daftar selamat datang dan * .jsp dipetakan. Kemudian tomcat akan mencoba meneruskan ke index.jsp dan Anda akan mendapatkan 404.

Jadi saya akan menebak Anda memiliki pemetaan servlet dan menyambut file yang tumpang tindih. Dan perilaku servlet itu tidak mendukung GET. (Karena 405)

Tim Funk
sumber
0

Jika proyek Anda menggunakan modul web dinamis v2.2, Anda harus secara eksplisit membuat setidaknya satu file (dapat berupa file html kosong) yang ada di web.xml (mis .: index.html) di konten Web Anda.

Snehal
sumber
1
ini komentar; bukan jawaban; tolong pertimbangkan berkomentar di masa depan ketika Anda mendapatkan lebih banyak poin. terima kasih
Hrvoje Špoljar