栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用MVC和DAO模式在JSP页面的HTML中显示JDBC ResultSet?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用MVC和DAO模式在JSP页面的HTML中显示JDBC ResultSet?

设计良好的MVC方法中,JSP文件不应包含任何Java代码行,而Servlet类不应包含任何JDBC代码行。

假设要在网上商店中显示产品列表,则需要创建以下代码。

一个Product代表产品的真实世界的实体类,它应该只是一个Javabean的。

public class Product {    private Long id;    private String name;    private String description;    private BigDecimal price;    // Add/generate getters/setters/c'tors/equals/hashpre boilerplate.}

一个DAO类,它完成所有讨厌的JDBC工作并返回一个

List<Product>

public class ProductDAO {    private DataSource dataSource;    public ProductDAO(DataSource dataSource) {        this.dataSource = dataSource;    }    public List<Product> list() throws SQLException {        List<Product> products = new ArrayList<Product>();        try ( Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement("SELECt id, name, description, price FROM product"); ResultSet 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); }        }        return products;    }}

一个Servlet类,它获取列表并将其放入请求范围。

@WebServlet("/products")public class ProductsServlet extends HttpServlet {    @Resource(name="jdbc/YourDB") // For Tomcat, define as <Resource> in context.xml and declare as <resource-ref> in web.xml.    private DataSource dataSource;    private ProductDAO productDAO;    @Override    public void init() {        productDAO = new ProductDAO(dataSource);    }    @Override    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文件中

/WEB-INF/products.jsp
,使用
JSTL <c:forEach>
进行迭代,
List<Product>
在EL中使它可用
${products}
,并使用JSTL
<c:out>
来转义字符串属性,以便避免在涉及用户控制的输入时出现XSS漏洞。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/format" prefix="fmt" %>...<table>    <c:forEach items="${products}" var="product">        <tr> <td>${product.id}</td> <td><c:out value="${product.name}" /></td> <td><c:out value="${product.description}" /></td> <td><fmt:formatNumber value="${product.price}" type="currency" currencyCode="USD" /></td>        </tr>    </c:forEach></table>

要使其正常工作,只需通过其URL调用servlet。假设了一个Servlet注解

@WebServlet("/products")
或映射在
web.xml
<url-pattern>/products</url-pattern>
,那么你可以把它叫做
http://example.com/contextname/products



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号