Tomcat 7 ต่อท้ายปัญหาสแลชด้วย webapps


13

เมื่อเร็ว ๆ นี้ฉันอัพเกรดเซิร์ฟเวอร์ tomcat ของฉันจากรุ่น 6.x เป็นรุ่น 7.x ล่าสุด

ฉันเกิดปัญหาเล็กน้อยโดยหวังว่าจะได้รับความช่วยเหลือ

ฉันมีแอปพลิเคชันเรียก MyApp

ใน tomcat6 เมื่อฉันไปที่http://www.example.com/MyApp/page/ ปกติแล้วฉันจะได้ผลลัพธ์ที่ต้องการ

ตอนนี้ที่ tomcat7 การเข้าชม url ที่แน่นอนเดียวกัน (ที่มีเครื่องหมายทับ) ฉันได้รับข้อผิดพลาด: "ทรัพยากรไม่สามารถใช้งานได้" เนื่องจาก Tomcat คิดว่า / MyApp / page / เป็นชื่อ webapp ทั้งหมดแทนที่จะเป็นชื่อคำขอ ภายใต้ Myapp webapp

ฉันต้องการสแลชที่ส่วนท้ายของ url ของฉันเพราะไม่เช่นนั้นฉันได้รับข้อผิดพลาด: "สถานะ HTTP 405 - วิธีการร้องขอ 'GET' ไม่ได้รับการสนับสนุน" ซึ่งใช้ได้เนื่องจากฉันไม่อนุญาตให้ใช้วิธี GET กับคำขอ "หน้า" .

หากมีคนรู้วิธีบอกทอมแคทว่าการต่อท้ายสแลชหลังจากเส้นทางของ webapp ที่มีอยู่ไม่ควรสมมติว่าจะเปลี่ยนเส้นทางไปยัง webapp ใหม่เรียกว่า "สตริง" ทั้งหมดและเพียงแค่ดำเนินการตามคำขอเช่นบน tomcat6 มันจะดีมาก!


มีเซิร์ฟเล็ตเริ่มต้นในweb.xmlที่ถูกแมป/*หรือไม่ มิฉะนั้น Tomcat ใช้รายการไฟล์ยินดีต้อนรับ โดยปกติแล้วเฉพาะส่วนของเส้นทางแรกที่ถูก interpredet เป็นรูทบริบท ดังนั้นการหาเว็บแอปของคุณไม่ได้ดูเหมือนจะเป็นปัญหา
มานะ

ส่วนเส้นทางแรกเป็นรูทบริบทและใช้งานได้จริง แต่พบเส้นทางดังต่อไปนี้แทนที่จะเป็นส่วนหนึ่งของเส้นทางแรก Tomcat ค้นหา webapp พร้อมเส้นทางทั้งหมด .. ฉันไม่มีอะไรที่กำหนดค่าไว้ ไม่ใช่ค่าเริ่มต้น ..

ฉันไม่เข้าใจสิ่งที่คุณพูด ขอโทษ ถ้าคุณมี webapp กำหนดค่าที่มีชื่อแล้วคราวจะใช้บริบทโปรแกรมประยุกต์บนเว็บนี้โดยใช้เส้นทางที่เหลือMyApp page/หากไม่เป็นเช่นนั้นจะค้นหาROOTบริบทโดยใช้เส้นทางแบบเต็มเพื่อค้นหา
มานะ

ฉันมีเว็บแอปเรียก MyApp และexample.com/MyAppใช้งานได้ แต่เมื่อไปที่example.com/MyApp/fooแทนที่จะค้นหาเนื้อหา foo ภายใน MyApp มันค้นหาเว็บเรียกว่า "MyApp / foo /" และไม่มองหา เนื้อหาภายใต้ MyApp เรียก foo ..

2
ลองสิ่งนี้: stackoverflow.com/q/11055608/1031900

คำตอบ:


1

คำถามโบราณ แต่เนื่องจากเมื่อเร็ว ๆ นี้ฉันได้ต่อสู้กับเครื่องหมายทับใน Tomcat 8 ฉันรู้ว่าปัญหาเกี่ยวกับเครื่องหมายทับยังคงทำให้เกิดภัยพิบัติต่อโลกผู้ใช้ Tomcat :-)

สิ่งที่คุณอาจพบเจอคือการเปลี่ยนแปลงวิธีที่ Tomcat จัดการกับการเปลี่ยนเส้นทางเมื่อโหลดบริบทรูท ตรวจสอบข้อผิดพลาด 58660และอ่านการสนทนาของนักพัฒนาที่นั่น คุณอาจจะต้องปิด mapper เริ่มต้นโดยการปรับเปลี่ยนmapperContextRootRedirectEnabledแอตทริบิวต์ขององค์ประกอบในContextconf/context.xml


0

ตรวจสอบไฟล์รายการต้อนรับของคุณ .. สิ่งที่ตามมาคือการเก็งกำไร ...

ฉันเชื่อว่าสาระสำคัญของปัญหาคือเมื่อ Tomcat ถูกนำเสนอด้วย / - มันมีตัวเลือกน้อย - ทำซ้ำในรายการไฟล์ต้อนรับ - ไม่มีอะไรอยู่ - แสดงรายชื่อไดเรกทอรี (ถ้าเปิดใช้งาน)

ที่นี่คือที่ที่ความสนุกเริ่มต้น ... ผู้คนมากมายต้องการใช้ * .do สำหรับสิ่งต่าง ๆ เช่นเสา พวกเขาต้องการให้ index.do เป็นโฮมเพจ หรือโดยทั่วไปคือ index.jsp โดยที่ * .jsp ถูกแม็พกับ JspServlet

นี่คือสิ่งที่ได้รับความสนุกสนาน ดังนั้นสมมติว่าไฟล์ยินดีต้อนรับของคุณคือ index.jsp, index.do

สิ่งที่ Tomcat (IIRC) กำลังทำอยู่คือทำซ้ำในรายการไฟล์ต้อนรับเพื่อค้นหาทรัพยากรของชื่อนั้น

จากนั้นจะทำการส่งผ่านครั้งที่สองเพื่อค้นหาการจับคู่ที่ตรงกัน ดังนั้นหากระบุ index.jsp ในรายการยินดีต้อนรับและ * .jsp จะถูกแมป จากนั้น tomcat จะพยายามส่งต่อไปยัง index.jsp และคุณจะได้รับ 404

ดังนั้นฉันจะเดาว่าคุณมีการแมปเล็ตและไฟล์ต้อนรับซ้อนกัน และพฤติกรรมของเซิร์ฟเล็ตนั้นไม่รองรับ GET (ดังนั้น 405)


0

หากโครงการของคุณใช้โมดูลเว็บแบบไดนามิกของ v2.2 คุณจะต้องสร้างไฟล์อย่างน้อยหนึ่งไฟล์ (อาจเป็นไฟล์ html ที่ว่างเปล่า) อย่างชัดเจนใน web.xml (เช่น: index.html) ใน WebContent ของคุณ


1
นี่คือความคิดเห็น; ไม่ใช่คำตอบ โปรดพิจารณาแสดงความคิดเห็นในอนาคตเมื่อคุณได้รับคะแนนมากขึ้น ขอบคุณ
Hrvoje Špoljar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.