[英]How to get values from one jsp page into two different jsp pages after submitting the form?
[英]How can the same session object be accessed from two different jsp pages?
我正在創建的網站需要跨多個.jsp頁面訪問相同的會話屬性。 最初,屬性是在我的Login.java servlet中設置的,並且在第一頁重定向之后,我能夠獲得該屬性的正確值,但是一旦頁面再次被重定向,該屬性始終為null。 這兩個相關的servlet是Login.java(在這里我首先給該屬性賦值)和Controller.java(在這里我在頁面之間導航)。 我最初的想法是問題是由於我切換.jsp頁面(response.redirect(...))的方式造成的,所以我對其進行了修改以使用RequestDispatcher,但是並沒有改變結果錯誤,例如CustomerObject在從Login.java重定向后緊接的每一頁之后,每頁中的attribute屬性仍然為null。
Login.java
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String email = request.getParameter("email");
String password = request.getParameter("password");
HttpSession session = request.getSession();
Customer customer = (Customer)session.getAttribute("CustomerObject");
if (customer == null) {
customer = CustomerBean.login(email, password);
if (customer != null) {
request.getSession().setAttribute("CustomerObject", customer);
}
}
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/html");
RequestDispatcher rd = request.getRequestDispatcher("testdynamicbuild.jsp");
rd.forward(request, response);
}
Controller.java
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String forward = "";
String temp = request.getParameter("pageLink");
if(temp != null){
temp = temp.toLowerCase();
if(temp.equals("graph")){
forward = "graphdisplay.jsp";
}else if(temp.equals("sideMenu")){
forward = "sidemenu.html";
}else if(temp.equals("log")){
forward = "logdisplay.jsp";
}else if(temp.equals("vardisp")){
forward = "testdynamicbuild.jsp";
}else if(temp.equals("home")){
forward = "index.html";
}else if(temp.equals("side")){
forward = "sidemenu.jsp";
}else{
forward = "index.html";
}
}else{
forward = "errorpage.html";
}
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/html");
RequestDispatcher rd = request.getRequestDispatcher(forward);
rd.forward(request, response);
}
.jsp頁面的訪問示例
<%
Customer c = null;
if( request.getSession().getAttribute("CustomerObject") != null){
c = (Customer)request.getSession().getAttribute("CustomerObject")
}else{
// handle null object
}
%>
UPDATE 0:我在每個頁面上打印出session.getId()和request.getSession(false).getId(),發現按預期在每個頁面中,ID相同,但testdynamicbuild.jsp的ID示例與graphdisplay.jsp的ID不同。 如果我的理解是正確的,則意味着即使我使用request.getSession(false),每次頁面更改時都會創建一個新會話。 有什么意見嗎?
更新1:我在我的Controller.java中添加了一條打印語句,以打印request.getSession(false)是否為null,並且每次執行Controller.java時,request.getSession(false)返回一個null值。 如果我沒記錯的話,這意味着該錯誤與會話對象直接相關。 是否需要在index.html中顯式創建會話對象?
更新2:當進行更多搜索時,我遇到了在此鏈接中找到的會話對象教程,並將其部署到了正在使用的服務器上。 訪問頁面后,每次刷新仍會創建一個新會話。 服務器端是否有任何可能導致此類錯誤的信息?
屬性僅對一個作用域有效,因此當您進行轉發/重定向時,作用域將丟失。 然后所有的屬性都將被刪除,您在代碼中對它們的引用將返回null。
您需要將值存儲在Session對象中,然后在整個重定向過程中它們仍然可訪問。 只是不要忘記在訪問它時將其從會話中刪除(如果需要)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.