我正在我的 SampleServlet.java 中执行以下操作
//Fill resultset from db
....
try {
ArrayList Rows = new ArrayList();
while (resultSet.next()){
ArrayList row = new ArrayList();
for (int i = 1; i <= 7 ; i++){
row.add(resultSet.getString(i));
}
Rows.add(row);
}
request.setAttribute("propertyList", Rows);
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher("/DisplayProperties.jsp");
requestDispatcher.forward(request,response);
然后在我的 jsp DisplayPropeties.jsp 中有
<%
ArrayList rows = new ArrayList();
if (request.getSession().getAttribute("propertyList") != null) {
rows = (ArrayList ) request.getSession().getAttribute("propertyList");
}
%>
但是 rows
始终为 null。
我做错了什么?
最佳答案
您也不应该在 JSP 中使用 ResultSet。那是一个数据库游标,一种稀缺资源。您可能会在一个简单的页面上让它“工作”,但我敢打赌您对关闭代码中的 ResultSet、Statement 或 Connection 没有明确的责任。您很快就会精疲力尽,想知道为什么您的代码会因异常而崩溃。
任何 java.sql 接口(interface)实现都不应逃出定义明确的持久层。获取连接,获取 ResultSet,将其映射为对象或数据结构,并以获取的相反顺序关闭所有资源,然后将对象或数据结构返回给仅使用 JSTL 编写且没有 scriplet 的 JSP 以供显示。这是正确的做法。
如果您必须在 JSP 中使用 SQL,请使用 JSTL
关于java - 将 ResultSet 从 servlet 传递到 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726041/