java - Web APP中添加Service层,在jsp上显示DB内容

标签 java mysql jsp spring-mvc servlets

A Product class representing a real world entity of a product, it should be just a Javabean.

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

        // Add/generate getters/setters/c'tors/equals/hashcode boilerplate.
    }

ProductDAO:

public class ProductDAO {

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

        try {
            connection = database.getConnection();
            statement = connection.prepareStatement("SELECT id, name, description, price FROM product");
            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 ignore) {}
            if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
            if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
        }

        return products;
    }

}

获取列表的Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<Product> products = productDAO.list();
        request.setAttribute("products", products); // Will be available as ${products} in JSP
        request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
    } catch (SQLException e) {
        throw new ServletException("Cannot obtain products from DB", e);
    }
}

最后是jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
    <c:forEach items="${products}" var="product">
        <tr>
            <td>${product.name}</td>
            <td>${product.description}</td>
            <td>${product.price}</td>
        </tr>
    </c:forEach>
</table>

伙计们,我从 Stackoverflow 本身获得了这段代码...它与我正在开发的项目类似...我只是想知道我是否想向此应用程序添加服务层我必须做哪些更改...我尝试将列表放入另一个方法中,但它给出了一些错误...所以请有人指导我...应该有一种从 servlet 到服务,然后从服务最终到 DAO 的方法。请指导我......

最佳答案

您必须创建一个新的服务类,如下所示:

public class ProductService {
    ProductDAO productDAO = new ProductDAO();

    public List<Product> list() throws SQLException{
       return productDAO.list();
    }
}

将服务实例添加到您的 servlet 中以代替 DAO 实例:

ProductService productService = new ProductService();

然后修改你的 doGet 以使用服务而不是 DAO:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            List<Product> products = productService.list();
            request.setAttribute("products", products); // Will be available as ${products} in JSP
            request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);

        } catch (SQLException e) {
            throw new ServletException("Cannot obtain products from DB", e);
        }
}

这是一个帮助您入门的示例。您应该将 SQLException 处理移至服务类而不是 servlet。

关于java - Web APP中添加Service层,在jsp上显示DB内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778163/

相关文章:

html - 防止 CSS 被覆盖

java - 将 JSP 呈现为字符串

Mysql存储过程不是有吗?

java - Eclipse IDE - 添加 jar?添加外部 jar ?添加图书馆?

java - 使用 Eclipse 的 JSP 的间歇性 ClassNotFoundException

java - 解析PDF文件时出现问题

mysql 查询中的总和值

php - 尝试检查具有相同值的电子邮件是否已存在

java - 我应该用什么代替jsp :useBean?

java - 在循环内分配数组变量