เสิร์ฟ:
แน่นอนว่าในเซิร์ฟเล็ต โดยทั่วไปการกระโดดจะเกิดขึ้นใน doGet, doPost และวิธีการอื่นๆ
1) วิธีการเปลี่ยนเส้นทาง
response.sendRedirect("/a.jsp");
เส้นทางไปยังเพจเป็นเส้นทางสัมพัทธ์ sendRedirect สามารถข้ามไปยังหน้าใดก็ได้ ไม่จำกัดเฉพาะเว็บแอปพลิเคชันนี้ เช่น:
response.sendRedirect("//www.VeVB.COm");
แถบที่อยู่ของเบราว์เซอร์เปลี่ยนแปลงหลังจากการข้าม
หากคุณต้องการส่งค่าด้วยวิธีนี้ คุณสามารถนำพารามิเตอร์มาไว้ใน URL หรือใส่ไว้ในเซสชันเท่านั้น คุณไม่สามารถใช้ request.setAttribute เพื่อส่งผ่านได้
2) วิธีการส่งต่อ
ผู้ส่ง RequestDispatcher = request.getRequestDispatcher("/a.jsp");
ผู้มอบหมายงาน .forward (คำขอ, ตอบกลับ);
เส้นทางไปยังเพจเป็นเส้นทางสัมพัทธ์ วิธีการส่งต่อสามารถข้ามไปยังเพจในเว็บแอปพลิเคชันนี้เท่านั้น
แถบที่อยู่ของเบราว์เซอร์จะไม่เปลี่ยนแปลงหลังจากการข้าม
เมื่อใช้วิธีการนี้เพื่อข้าม คุณสามารถใช้สามวิธีในการส่งค่า: พารามิเตอร์ เซสชัน request.setAttribute ใน URL
เจเอสพี:
1) การตอบสนอง sendRedirect();
วิธีการเดียวกับการตอบกลับของ servlet.sendRedirect()
ไม่อนุญาตให้ใช้ Out.flush() ก่อนคำสั่งนี้ หากมี ข้อยกเว้นจะเกิดขึ้น:
java.lang.IllegalStateException: ไม่สามารถ sendRedirect() หลังจากที่ส่งข้อมูลไปยังไคลเอนต์แล้ว
ที่ com.caucho.server.connection.AbstractHttpResponse.sendRedirect (AbstractHttpResponse.java:558)
-
แถบที่อยู่ของเบราว์เซอร์เปลี่ยนแปลงหลังจากการข้าม
หากคุณต้องการข้ามไปยังโฮสต์อื่น หลังจากการกระโดด คำสั่งที่ตามหลังคำสั่งนี้จะยังคงดำเนินการต่อไป เหมือนกับว่ามีการเปิดเธรดใหม่ แต่การดำเนินการตอบสนองนั้นไม่มีความหมาย
หากคุณต้องการข้ามไปยังโฮสต์เดียวกัน การกระโดดจะไม่เกิดขึ้นจนกว่าคำสั่งที่ตามหลังคำสั่งนี้จะถูกดำเนินการ
2) response.setHeader("ตำแหน่ง", "");
ไม่อนุญาตให้ใช้ Out.flush() ก่อนคำสั่งนี้ ถ้ามี เพจจะไม่ข้ามไป
แถบที่อยู่ของเบราว์เซอร์เปลี่ยนแปลงหลังจากการข้าม
การกระโดดจะไม่เกิดขึ้นจนกว่าคำสั่งที่ตามหลังคำสั่งนี้จะถูกดำเนินการ