使用三层架构完成商品列表的显示
1 准备工作
1 数据库的准备
2 其它准备工作
1)搭建好三层架构
2)导入需要 jar 包
3)导入需要的工具类
4)导入 c3p0 连接池工具类
5)准备 javaBean 类 Product
6)所需要的页面
2 代码实现
1 web层ProductListServlet代码实现
package www.test.web; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import www.test.domain.Product; import www.test.services.ProductListService; public class ProductListServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //传入数据到service层 ProductListService service = new ProductListService(); List<Product> productList =null; try { productList = service.findAllProduct(); } catch (SQLException e) { e.printStackTrace(); } for (Product product : productList) { System.out.println(product); } //全部商品的数据准备好了 转发给 jsp 进行数据的展示 request.setAttribute("productlist", productList); //转发到product_list.jsp页面 request.getRequestDispatcher("/product_list.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
2 service层的ProductListService代码
package www.test.services; import java.sql.SQLException; import java.util.List; import www.test.dao.ProductDao; import www.test.domain.Product; public class ProductListService { //没有复杂业务 //传递请求到 dao 层 public List<Product> findAllProduct() throws SQLException { ProductDao dao = new ProductDao(); List<Product> productList = dao.finAllProduct(); return productList; } }
3 dao层ProductDao代码
package www.test.dao; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import www.test.domain.Product; import www.test.utils.C3P0Utils; public class ProductDao { public List<Product> finAllProduct() throws SQLException { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; List<Product> productList = qr.query(sql, new BeanListHandler<Product>(Product.class)); return productList; } }
4 product_list.jsp部分代码
<c:forEach items="${productlist }" var="product"> <div class="col-md-2" style="height: 250px"> <a href="product_info.htm" > <img src="${pageContext.request.contextPath }/${product.pimage}" width="170" height="170" style="display: inline-block;"> </a> <p> <a href="product_info.html" style='color: green'>${product.pname }</a> </p> <p> <font color="#FF0000">商城价:¥${product.shop_price }</font> </p> </div> </c:forEach>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?