如何在我的jsp中提供Java ResultSet?

我想换一个sql:query来查找一些用几个参数构建复杂查询的Java代码。 当前的sql是一个简单的选择。

   

如何获取我的Java ResultSet(即rs = stmt.executeQuery(sql);)并在我的JSP中提供结果,以便我可以使用这个教科书JSP?

为了更清楚,我想删除上面的查询并将其替换为Java。

 
 
   
 

我是否在Java部分设置了session / page变量,或者是否有一些我可以用来访问变量的EL技巧?

型号(行):

public class Row { private String name; // Add/generate constructor(s), getters and setters. } 

DAO:

 public List list() throws SQLException { Connection connection = null; Statement statement = null; ResultSet resultSet = null; List rows = new ArrayList(); try { connection = database.getConnection(); statement = connection.createStatement(); resultSet = statement.executeQuery(SQL_LIST); while (resultSet.next()) { Row row = new Row(); row.setName(resultSet.getString("name")); // ... rows.add(row); } } finally { if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {} if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} } return rows; } 

控制器(servlet):

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { List rows = someDAO.list(); request.setAttribute("rows", rows); } catch (SQLException e) { request.setAttribute("error", "Retrieving rows failed."); e.printStackTrace(); } request.getRequestDispatcher("page.jsp").forward(request, response); } 

查看(page.jsp):

   ...  Error: ${error} 

您可以从Java代码设置会话/请求属性。

但是,我建议使用ResultSet,因为它有一些生命周期问题(即需要关闭)。 我建议在Java代码中获取ResultSet对象,迭代它构建,比如说List,关闭ResultSet并将List传递给JSP。

如果您使用的是Spring,那么JdbcTemplates提供的方法可以获取SQL字符串和参数,并返回带有查询结果的List>,这可能非常方便。

如果您正在使用像spring mvn或struts这样的Web框架,那么您将拥有一个在实际jsp之前执行的控制器类。 这可以有一个方法

 ResultSet getResult() 

此方法将在您的jsp中以$ {result}的forms提供。

如果您没有使用任何这些框架,您仍然可以使用jsp usebean并将javaclass绑定到变量(请参阅usebean文档)。 如果您将bean用于myBean的变量,则可以使用$ {myBean.result}访问它

最后,您还可以将结果绑定到请求参数“其他位置”。 在这种情况下,您将其称为$ {param.result}

你没有。

首先,将SQL放入JSP,甚至通过标签,都表明了一种可怕的设计选择。 JSP页面是模型视图控制器模式中的“视图”。 它的工作是显示你的模型,而不是显示你的模型而不是显示它。

在您的控制器类中,执行SQL并检索可以通过JSP显示的实际Java对象。 然后,在JSP中显示它们。 将SQL留给控制器,让JSP专注于简单地显示数据。 您不仅可以清楚地分离关注点,而且您的JSP因此变得更加简单,如果需要完成,则比以后的JSP代码更容易重构Java代码(测试Java要简单得​​多)代码也是如此)。