将ResultSet从servlet传递给JSP

时间:2009-11-12 23:07:50

标签: 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);

然后在我的jsp DisplayPropeties.jsp中我有

<% 
     ArrayList rows = new ArrayList();

     if (request.getSession().getAttribute("propertyList") != null) {
         rows = (ArrayList ) request.getSession().getAttribute("propertyList");
     }
%>

rows始终为空。

我做错了什么?

4 个答案:

答案 0 :(得分:7)

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

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

如果必须在JSP中使用SQL,请使用JSTL&lt; sql&gt;标签来做到这一点。

答案 1 :(得分:5)

我不明白在null声明的情况下行如何if

无论如何,request.getAttribute("propertyList")

中的DisplayProperties.jsp不应该是{{1}}

答案 2 :(得分:3)

你有答案,所以我只会做一个增强建议:在JSP中使用scriptlet。在适当的地方使用taglib和EL。生成列表的示例如下:

<ul>
    <c:forEach items="${propertyList}" var="item">
        <li>${item}</li>
    </c:forEach>
</ul>

您可以对HTML table和下拉option执行相同的操作。希望这会有所帮助。

答案 3 :(得分:3)

使用

request.getSession().setAttribute("propertyList", Rows);

而不是

request.setAttribute("propertyList", Rows);
在您的servlet代码中

。它会完美地运作。