将 ResultSet 从 servlet 传递给 JSP

Posted

技术标签:

【中文标题】将 ResultSet 从 servlet 传递给 JSP【英文标题】:pass ResultSet from servlet to JSP 【发布时间】:2010-12-16 02:40:17 【问题描述】:

我在我的 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 始终为空。

我做错了什么?

【问题讨论】:

【参考方案1】:

我不明白行怎么可以是 null 给定你的 if 声明。

反正DisplayProperties.jsp中不应该是request.getAttribute("propertyList")吗?

【讨论】:

谢谢 Murali... 非常感谢。这就像一种享受!【参考方案2】:

使用

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

而不是

request.setAttribute("propertyList", Rows);

在您的 servlet 代码中。它会完美运行。

【讨论】:

【参考方案3】:

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

任何 java.sql 接口实现都不应脱离定义良好的持久层。获取连接,获取ResultSet,映射成对象或数据结构,并按照获取的相反顺序关闭所有资源,然后将对象或数据结构返回给你的JSP,只用JSTL编写,没有scriplets,用于显示。这是正确的做法。

如果您必须在 JSP 中使用 SQL,请使用 JSTL 标记来执行此操作。

【讨论】:

+1。这就是我希望在类似标题的问题中找到的答案! (所以我不需要自己写来询问 servlet 是否适合 ResultSet :))【参考方案4】:

你有答案,所以我只做一个增强建议:不要不要在 JSP 中使用 scriptlet。在适当的地方使用标记库和 EL。生成列表的示例是:

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

您可以对 html tables 和下拉列表 options 执行相同的操作。希望这会有所帮助。

【讨论】:

以上是关于将 ResultSet 从 servlet 传递给 JSP的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSP 中的 ResultSet 传递给 Javascript

将参数从jsp页面传递给java类而不使用servlet [重复]

将javascript数组传递给servlet

将参数从 servlet 传递给函数 Javascript,查看数据库时它不起作用?

在servlet中从数据库中获取完整的行并使用bean类将它们传递给jsp

通过单击鼠标将变量值传递给java中的servlet