You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSP结合三层架构将MySQL数据库内容输出到网站

三层架构下商品数据传递到JSP的实现方案

首先明确三层架构的核心边界:表示层(JSP/Servlet)仅处理请求响应和视图渲染,业务逻辑层(Service)处理业务规则,数据访问层(DAO)仅负责数据库交互,三层严格单向调用,禁止跨层直接访问数据库。

1. 先定义各层基础组件

  • 实体层(可选但推荐):新建entity.Goods类,封装商品ID、名称、价格、描述等字段,添加对应getter、setter方法,作为各层之间数据传递的载体。
  • 数据访问层(DAO):
    新建dao.GoodsDao接口,定义查询商品的抽象方法:List<Goods> listAllValidGoods();
    新建dao.impl.GoodsDaoImpl实现类,在该类中调用你已实现的database.ConnectionDB获取数据库连接,执行JDBC查询语句,将结果集封装为List<Goods>返回,操作完成后手动关闭数据库连接、语句、结果集资源。
    注意:DAO层只做数据库读写,不要掺杂任何业务过滤、排序逻辑
  • 业务逻辑层(Service):
    新建service.GoodsService接口,定义供表示层调用的方法:List<Goods> getFrontShowGoods();
    新建service.impl.GoodsServiceImpl实现类,内部持有GoodsDao实例,调用DAO层的查询方法获取原始商品数据,在该层处理业务逻辑:比如过滤已下架商品、按销量排序、控制返回条数等,最终返回处理后的商品列表。
  • 表示层控制器(Servlet):
    新建GoodsListServlet,重写doGet方法:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 仅调用Service层获取数据,不接触任何数据库操作
        GoodsService goodsService = new GoodsServiceImpl();
        List<Goods> goodsList = goodsService.getFrontShowGoods();
        // 将数据存入request域
        request.setAttribute("goodsList", goodsList);
        // 转发到JSP页面,不要用重定向避免数据丢失
        request.getRequestDispatcher("/goodsList.jsp").forward(request, response);
    }
    
    在web.xml或者用注解配置该Servlet的访问路径,用户访问该路径即可触发数据查询流程。

2. JSP页面渲染数据

JSP仅做视图渲染,不要写任何Java脚本、不要出现任何数据库相关代码,推荐用EL表达式+JSTL标签取值展示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <title>商品列表</title>
</head>
<body>
    <div class="goods-list">
        <c:forEach items="${goodsList}" var="goods">
            <div class="goods-card">
                <h3>${goods.goodsName}</h3>
                <p class="price">售价:¥${goods.price}</p>
                <p class="desc">${goods.description}</p>
            </div>
        </c:forEach>
        <!-- 如果商品列表为空展示提示 -->
        <c:if test="${empty goodsList}">
            <p>暂无在售商品</p>
        </c:if>
    </div>
</body>
</html>

3. 规范校验

你可以通过以下几点确认符合三层架构要求:

  • 表示层(Servlet、JSP)没有导入任何JDBC相关包、没有直接调用ConnectionDB类
  • 没有跨层调用:表示层只调用Service层,Service层只调用DAO层,DAO层仅和数据库交互
  • 业务逻辑全部在Service层处理,DAO层仅做通用的数据库读写操作

内容的提问来源于stack exchange,提问作者Amon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:06:06