如何将jsp中的ResultSet对象发送回html(javascript)?

时间:2010-12-10 10:28:20

标签: javascript html jsp jdbc

我有一个查询mysql数据库的Jsp页面,我想将Resultset对象作为响应对象发送到html页面?我需要结果集对象来填充表格和图表。

1.如何将resultSet对象转换为javascript对象?

  1. 如何将jsp的resultSet对象发送到html?(我的意思是语法)
  2. 我使用get xmlHTTPrequest来调用jsp页面

1 个答案:

答案 0 :(得分:3)

不要使用JSP。使用查询数据库的Servlet,获取带有结果的List并将其转换为JS可以无缝使用的JSON字符串。

首先创建一个javabean类,它表示数据库表的一行。例如。 Product

public class Product {
    private Long id;
    private String name;
    private String description;
    private BigDecimal price;

    // Add/generate c'tors, getters, setters and other boilerplate.
}

创建一个DAO类,用于触发查询并将ResultSet映射到List<Product>

public class ProductDAO {

    // ...

    public List<Product> find(String search) throws SQLException {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<Product> products = new ArrayList<Product>();

        try {
            connection = database.getConnection();
            statement = connection.prepareStatement(SQL_FIND);
            statement.setString(1, search);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Product product = new Product();
                product.setId(resultSet.getLong("id"));
                product.setName(resultSet.getString("name"));
                product.setDescription(resultSet.getString("description"));
                product.setPrice(resultSet.getBigDecimal("price"));
                products.add(product);
            }
        } 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 products;
    }
}

然后创建一个Servlet类,它使用DAO类来获取产品,并在Google Gson的帮助下将其转换为JSON字符串。

public class ProductServlet extends HttpServlet {

    // ...

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            List<Product> products = productDAO.find(request.getParameter("search"));
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(new Gson().toJson(products));
        } catch (SQLException e) {
            throw new ServletException("DB error", e);
        }
    }
}

web.xml url-pattern /products<!DOCTYPE html> <html lang="en"> <head> <title>SO question 4407861</title> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> $(document).ready(function() { $('#searchform').submit(function() { $.getJSON("products", $(this).serialize(), function(products) { var table = $('#resulttable'); $.each(products, function(index, product) { $('<tr>').appendTo(table) .append($('<td>').text(product.id)) .append($('<td>').text(product.name)) .append($('<td>').text(product.description)) .append($('<td>').text(product.price)); }); }); return false; }); }); </script> </head> <body> <form id="searchform"> <input type="text" name="search"> <input type="submit"> </form> <table id="resulttable"></table> </body> </html> 映射此servlet,并按照以下方式在JavaScript中调用它(我使用jQuery,因为它消除了交叉感知样板,以便您结束JavaScript代码减少10倍。

{{1}}