Java 使用MVC和DAO模式在JSP页面中以HTML显示JDBC结果集
我正在使用JSP和JDBC实现MVC。我已经将一个数据库类文件导入到我的JSP文件中,我想显示一个DB表的数据。我不知道如何将Java类中的Java 使用MVC和DAO模式在JSP页面中以HTML显示JDBC结果集,java,jsp,servlets,model-view-controller,jdbc,Java,Jsp,Servlets,Model View Controller,Jdbc,我正在使用JSP和JDBC实现MVC。我已经将一个数据库类文件导入到我的JSP文件中,我想显示一个DB表的数据。我不知道如何将Java类中的ResultSet返回到JSP页面并将其嵌入HTML中 如何实现这一点?您可以使用标记 您可以在下面的链接中找到一个详细的示例,您可以使用标签 您可以在下面的链接中找到一个详细的示例,MVC在web应用程序上下文中不包括使用JSP中的类。它包括使用以下模型: 浏览器向web服务器发送请求 web服务器的配置使请求由servlet或过滤器(控制器:Java代码
ResultSet
返回到JSP页面并将其嵌入HTML中
如何实现这一点?您可以使用
标记
您可以在下面的链接中找到一个详细的示例,您可以使用标签
您可以在下面的链接中找到一个详细的示例,MVC在web应用程序上下文中不包括使用JSP中的类。它包括使用以下模型:
您不应该自己实现MVC框架。使用现有的(Stripes、Struts等)在web应用程序上下文中,MVC不包括使用JSP中的类。它包括使用以下模型:
您不应该自己实现MVC框架。使用现有的代码(Stripes、Struts等)在设计良好的MVC方法中,JSP文件不应包含任何一行Java代码,servlet类不应包含任何一行JDBC代码 假设您希望在webshop中显示产品列表,则需要创建以下代码
- 一个
类代表一个产品的真实实体,它应该只是一个Product
- 一个完成所有讨厌的JDBC工作并返回一个漂亮的
列表的类
@WebServlet(“/products”)
,或者在web.xml
中映射为/products
,那么您可以通过http://example.com/contextname/products
另见:
- 一个
类代表一个产品的真实实体,它应该只是一个Product
- 一个完成所有讨厌的JDBC工作并返回一个漂亮的
列表的类
- 在设计良好的MVC方法中,JSP文件不应包含任何一行Java代码,servlet类不应包含任何一行JDBC代码
假设您希望在webshop中显示产品列表,则需要创建以下代码
@WebServlet(“/products”)
,或者在web.xml
中映射为/products
,那么您可以通过http://example.com/contextname/products
另见:
public class Product {
private Long id;
private String name;
private String description;
private BigDecimal price;
// Add/generate getters/setters/c'tors/equals/hashcode boilerplate.
}
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;
}
}
@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);
}
}
}
class Employee {
String name;
int emplid;
}
class EmployeeDAO {
... method to connect
etc.
List<Employee> getAllNamed( String name ) {
String query = "SELECT name, emplid FROM employee where name like ?";
ResultSet rs = preparedStatement.executeQuery etc etc.
List<Employee> results = ....
while( rs.hasNext() ) {
results.add( new Employee( rs.getString("name"), rs.getInt("emplid")));
}
// close resources etc
return results;
}
}
<%
request.setAttribute("employees", dao.getAllNamed( request.getParameter("name") );
%>
<table>
<c:forEach items="${employees}" var="employee">
<tr><td>${employee.emplid}</td><td>${employee.name}</td></tr>
</c:forEach>
</table>