将ResultSet从servlet传递给JSP

Dav*_*ave 3 java jsp servlets jdbc resultset

我在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);
Run Code Online (Sandbox Code Playgroud)

然后在我的jsp DisplayPropeties.jsp中

<% 
     ArrayList rows = new ArrayList();

     if (request.getSession().getAttribute("propertyList") != null) {
         rows = (ArrayList ) request.getSession().getAttribute("propertyList");
     }
%>
Run Code Online (Sandbox Code Playgroud)

rows总是空的.

我究竟做错了什么?

duf*_*ymo 7

您也不应该在JSP中使用ResultSet.这是一个数据库游标,一种稀缺资源.你可以在一个简单的页面上"工作",但我敢打赌你没有明确的责任在代码中关闭ResultSet,Statement或Connection.你很快就会用完,并想知道为什么你的代码会因异常而崩溃.

java.sql接口实现都不应该从明确定义的持久层中逃脱.获取连接,获取ResultSet,将其映射到对象或数据结构中,然后按照获取的相反顺序关闭所有资源,然后将对象或数据结构返回到JSP,仅使用JSTL写入,不使用scriplet进行显示.这是正确的做法.

如果必须在JSP中使用SQL,请使用JSTL <sql>标记来执行此操作.


Mur*_* VP 5

我不明白如何nullif那里给你的声明.

无论如何,不​​应该request.getAttribute("propertyList")DisplayProperties.jsp