使用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/hashcode 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
本文向大家介绍jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面,包括了jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面的使用技巧和注意事项,需要的朋友参考一下 功能介绍 本项目通过使用jsp和servlet实现简单的用户登录。主要逻辑为: 如果用户不存在,则首先进行注册(注册信息同步到数据库中)。 进行注册后,可进入登录页面对账号进行
我可以通过这个代码找到所有的数据 我用下面的代码从数据库中获取数据…但是我的网页空白,我在控制台得到一些异常… 我控制台中的异常...
我在Spring MVC中显示jsp页面时遇到了问题。这是一个带有Gradle和IntelliJ CE的基本hello world Spring MVC: 我得到以下错误页面: 这是我的身材。格拉德尔: 视图解析器文件: 控制器页面: jsp页面位置: application.properties文件内容: 使用默认模板引擎,页面显示正确,但使用jsp,它无法工作 日志错误: https://ha
嗨,我创建了一个简单的应用程序来在webview中显示html页面,我使用webview并显示页面加载时间,如下所示。 在此之后,禁用滚动,并使用next和previous按钮来后退和前进Contain。下面是我的代码。 首先,在创建、显示、添加webview并加载html文件。 之后,使用MyWebclient类获取MainWebView的高度和宽度。 之后,使用myPictureClass获取
我已经在后端计算了表单提交总量,现在我需要在JSP页面上的“total submission”标记旁边显示它。我尝试了各种方法,但似乎都不管用。在jsp页面上显示长值的最佳方法是什么?
问题内容: 我设法将图像以Blob的形式存储在mysql数据库中。(我也在使用hibernate模式)现在我试图加载该图像并将其发送到jsp页面上,以便用户可以查看该图像。 这是我的struts 2动作课 这是我的图片课 您能告诉我我应该在动作类,jsp页面和struts.xml中放置什么以显示存储的图像吗? 问题答案: 最终,我为未来的Google员工解决了这一问题: 将此行添加到jsp, 这是