将 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 table
s 和下拉列表 option
s 执行相同的操作。希望这会有所帮助。
【讨论】:
以上是关于将 ResultSet 从 servlet 传递给 JSP的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSP 中的 ResultSet 传递给 Javascript
将参数从jsp页面传递给java类而不使用servlet [重复]
将参数从 servlet 传递给函数 Javascript,查看数据库时它不起作用?