我不知道为什么会话只获得stackOfProducts
一次,并且在重新加载页面后StackOf Products==null
,但此会话的其他对象(如boolean was
)工作正常?
屏幕短裤
获取数据
http://s57.radikal.ru/i155/1411/74/2922b55d6887.png
没有数据
http://s019.radikal.ru/i614/1411/d3/b4975bb3bd60.png
这是我的servlet:
package ua.big_market;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ua.big_market.db.connecting.DataBaseConnect;
import ua.big_market.db.product.GetProductDataDB;
import ua.big_market.product.Product;
import ua.big_market.product.StackOfProducts;
@WebServlet(asyncSupported = false, name = "ServletGetProductData", urlPatterns = { "/xmlGetProductData"})
public class XmlGetProductData extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//TODO: It's must have every servlet. Because russian and Ukraine words has a UTF-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
Connection connection = null;
DataBaseConnect dataBaseConnect = new DataBaseConnect();
try{
connection = dataBaseConnect.getConnectToDB();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Get Product Started!");
Product product;
GetProductDataDB getProductDataDB = new GetProductDataDB();
StackOfProducts stackOfProducts = new StackOfProducts();
try {
//all work fine
LinkedList<Integer> listofId = getProductDataDB.getAllIdFromDB(connection, "computers_notebooks");
while(!listofId.isEmpty()) {
product = getProductDataDB.getProduct(connection, "computers_notebooks", listofId.getFirst());
listofId.removeFirst();
stackOfProducts.addProduct(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
boolean was = true;
request.getSession().setAttribute("stackOfProducts", stackOfProducts);
request.getSession().setAttribute("was", was);
// work fine
response.sendRedirect("computers-notebooks.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
public void init(ServletConfig config) throws ServletException {
// this.context = config.getServletContext();
}
}
这是我的HTML:
<%
boolean was = false;
try {
was = (Boolean) session.getAttribute("was");
} catch (Exception e) {
was = false;
}
if (!was)
response.sendRedirect("xmlGetProductData");
StackOfProducts stackOfProducts = (StackOfProducts) session.getAttribute("stackOfProducts"); **// at first i have a getting data there but after reload i have null**
StackOfProducts stackOfProducts2 = null;
if (stackOfProducts != null && !stackOfProducts.isEmpty()) {
stackOfProducts2 = new StackOfProducts();
stackOfProducts2 = stackOfProducts;
}
// stackOfProducts = stackOfProducts2;
Product product = new Product();
if (stackOfProducts2 != null) {
while (!stackOfProducts2.isEmpty()) {
product = stackOfProducts2.getNext();
%>
<%=product.getProductName()%> **//only once i'm there**
<%
stackOfProducts2.removeCurrent();
}
} else {
int i = 0;
%>
123456789 **//and after reload i'm always here**
<%
}
%>
答案 0 :(得分:0)
问题在于您重定向was
时检查的变量xmlGetProductData
。之后,您应该将其设置为false
或null
,就像处于初始状态一样。
if (!was)
response.sendRedirect("xmlGetProductData");
request.getSession().setAttribute("was", false);