Tôi đang làm việc trên webapp trong WinXP, Eclipse Indigo và Google web plugin.sendRedirect của Servlet() giết thuộc tính phiên của tôi
Tôi có một biểu mẫu đơn giản lấy giá trị từ người dùng (ví dụ: email), chuyển nó tới một servlet có tên SignIn.java
xử lý và lưu giá trị email vào phiên. Mã SignIn
rất đơn giản, đây là những gì doGet
của nó chủ yếu là thực hiện:
String email = req.getParameter("email"); //getting the parameter from html form
...
...
HttpSession session = req.getSession(); //create a new session
session.setAttribute("email", email);
Cho đến nay rất tốt, tôi đã xác minh rằng các giá trị không phải là null
vào thời điểm này. Bây giờ đến vấn đề, tôi muốn chuyển hướng đến một servlet (ShowOnline.java
) mà cần phải làm một số chế biến nhiều hơn nữa. Khi tôi viết
resp.sendRedirect(resp.encodeRedirectURL("/ShowOnlineServlet"));
ShowOnline
được null
giá trị phiên (thuộc tính email mà tôi đã lưu bây giờ là một giây trước khi là null
)
Khi tôi viết
getServletConfig().getServletContext().getRequestDispatcher("/ShowOnlineServlet");
mọi thứ đều OK, thuộc tính email từ trước không phải là null
!
Điều gì đang xảy ra? sendRedirect()
chỉ làm cho trình duyệt của bạn gửi yêu cầu mới, nó không ảnh hưởng đến phạm vi phiên. Tôi đã kiểm tra các cookie và chúng ổn (nó là cùng một phiên từ trước vì chắc chắn vì nó là phiên đầu tiên và duy nhất webapp của tôi tạo ra và hơn nữa tôi thậm chí còn làm phiền và kiểm tra ID của sesison và chúng giống nhau trên cả hai yêu cầu) .
Tại sao có sự khác biệt giữa sendRedirect()
và forward()
? Các giải pháp dễ dàng sẽ được sử dụng forward()
nhưng tôi muốn nhận được để dưới cùng của điều này trước khi tôi chỉ cho đi, tôi nghĩ rằng nó là quan trọng đối với tôi để hiểu những gì đã xảy ra. Tôi không chắc tôi thích ý tưởng không biết những gì đang xảy ra trên các khái niệm cơ bản như vậy (toàn bộ webapp của tôi rất đơn giản và cơ bản vào thời điểm này vì tôi là người mới bắt đầu).
Bất kỳ suy nghĩ ý tưởng hoặc đề xuất nào sẽ được chào đón nồng nhiệt!
Tôi đoán nó có thể là có thể tại thời điểm này để sử dụng về phía trước thay vì sendRedirect nhưng tôi nghĩ rằng sau này tôi muốn sử dụng sendRedirect mà không sợ các thuộc tính phiên tôi sẽ đi rỗng không có lý do rõ ràng. –
@home: OP xác nhận rằng ID phiên là giống nhau trước và sau. – BalusC
điều gì sẽ xảy ra khi bạn không gửi chuyển hướng và tự đi đến/ShowOnlineServlet từ trình duyệt? –