前端jsp页面接收不到后端Controller层返回的Model

前端jsp页面始终接收不到从Controller返回的Model

Controller层代码

 @RequestMapping(value = "/findAll",method = RequestMethod.GET)
    public String findAll(Model model){
        //通过Model储存数据
        /*System.out.println("Controller执行了findAll方法。。");*/
        List<User> list = userService.findAll();
        //addAttribute方法传入一组键值对
        model.addAttribute("list",list);
        return "list";

list.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>查询了所有用户的信息</h3>
    <c:forEach items="${list}" var="user">
        ${user.id}-${user.username}-${user.password}-${user.age}
    </c:forEach>
</body>
</html>

服务器正常运行
在这里插入图片描述
但就是接收不到返回的list集合数据
在这里插入图片描述
排错思路:

1、根据ssm工作原理检查了一遍调用顺序,编写测试类,发现都能正常调用 (无误)

2、打开浏览器F12检查模式,找到NetWork发现根本没有从后端传来的list集合
在这里插入图片描述
3、面向百度找bug (找了一个下午)
发现这哥们碰到一样的问题:公开处刑
最后发现bug实在太坑了,原来idea创建好web项目,默认的web.xml头部配置版本过低

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

这就导致后面的servlet、jsp、EL等采用的全是2.3版本,在2.3版本中,jsp页面是不支持EL的,无法得到正确的解析。

**问题解决:**更换为4.0版本

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-				app_4_0.xsd" version="4.0">

在这里插入图片描述
总结:养成良好的idea开发习惯,在下次开发web项目时首先更换web.xml版本,以免出错。

<think>好的,我现在需要回答用户关于软件架构中各(DAO、Model、Service、Controller、View)的作用与关系的问题。首先,我得回忆一下MVC模式和相关分架构的知识。根据用户提供的引用[1],里面提到了MVC中的Model1和Model2时代,这可能与各的职责有关。另外,引用[2]中的原型模式和单例模式可能涉及到对象创建和管理,但用户的问题主要集中在各的职责,所以重点应放在MVC和分架构上。 首先,Model通常是处理数据和业务逻辑的地方,但用户提到的Model可能具体指什么?在MVC中,Model负责数据管理,而在分架构中,可能分为DAO处理数据访问,Service处理业务逻辑。需要区分清楚每个的具体职责。 DAO(数据访问对象)主要负责与数据库交互,执行CRUD操作。例如,在Java中,可能会有DAO接口和实现类,使用JDBC或ORM框架如Hibernate。引用中没有直接提到DAO,但根据常见的架构模式,DAO属于数据持久的部分。 Service处理业务逻辑,协调多个DAO操作,确保事务的一致性。比如,处理一个银行转账,可能需要调用账户DAO进行扣款和存款,Service确保这两个操作在一个事务中完成。 Controller属于MVC中的控制器,负责接收用户请求,调用Service处理业务逻辑,然后选择适当的视图进行响应。例如,Spring MVC中的控制器处理HTTP请求,返回模型和视图。 View负责展示数据,通常是前端部分,如JSPThymeleaf模板或者前端框架如React、Vue。它从Controller接收数据并渲染页面Model可能有歧义,在MVC中,Model包含数据和业务逻辑,但在分架构中,有时Model仅指数据传输对象(DTO)或实体类,用于在各之间传递数据。需要明确用户所指的Model是业务逻辑还是实体。 现在需要将这些次的关系整理清楚,确保各司其职,避免耦合。例如,Controller不直接访问数据库,而是通过Service,Service调用DAO进行数据操作。这样分有利于维护和测试。 用户可能还关心各之间的依赖关系,比如View依赖Controller提供数据,Controller依赖Service,Service依赖DAO,DAO依赖Model中的实体类。同时,需要确保各之间的接口清晰,符合设计原则如单一职责、依赖倒置等。 可能还需要举例说明,比如用户注册流程:View提供表单,Controller接收表单数据,调用Service处理注册逻辑(检查用户名是否存在、创建用户等),Service调用DAO将用户数据保存到数据库,DAO使用Model中的User实体类。 最后,生成相关问题需要考虑用户可能想深入了解每的具体实现、如何设计之间的交互、常见的框架支持(如Spring的@Service、@Repository注解),或者分架构的优势和挑战。</think>在软件架构中,各的职责与关系可基于MVC模式及分设计原则进行划分[^1]。以下是各核心作用的详细说明: --- ### 1. **DAO(数据访问)** - **职责**:直接与数据库交互,封装CRUD操作(增删改查)。例如: ```java public interface UserDao { User findById(int id); void save(User user); } ``` - **关键特点**:隔离数据库实现细节(如SQL语句、ORM框架),通过接口为上提供统一数据访问方式[^2]。 --- ### 2. **Model(模型)** - **职责**: - **数据载体**:定义业务实体(如`User`、`Order`类),包含属性及基础验证逻辑。 - **业务逻辑**:在部分架构中承担核心业务规则(如订单状态机流转)。 - **示例**: ```java public class User { private int id; private String name; // 数据校验方法 public boolean isValid() { return name != null; } } ``` --- ### 3. **Service(服务)** - **职责**:实现复杂业务逻辑,协调多个DAO操作。例如: ```java @Service public class TransferService { @Transactional public void transfer(Account from, Account to, BigDecimal amount) { // 调用AccountDao完成扣款和存款 } } ``` - **关键特点**:通过事务管理保证数据一致性,是Controller与DAO之间的桥梁。 --- ### 4. **Controller(控制)** - **职责**:处理用户请求,调用Service返回响应。例如Spring MVC控制器: ```java @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/users") public ResponseEntity<User> createUser(@RequestBody User user) { return userService.register(user); } } ``` - **关键特点**:不包含业务逻辑,仅负责请求路由和响应格式转换。 --- ### 5. **View(视图)** - **职责**:渲染用户界面,展示Controller传递的数据。例如Thymeleaf模板: ```html <div th:each="user : ${users}"> <span th:text="${user.name}"></span> </div> ``` - **关键特点**:现代架构中常由前端框架(如React/Vue)独立实现,通过API与后端交互。 --- ### █ 各协作关系 ``` 用户请求 → View前端) → Controller → Service → DAO → 数据库 响应返回 ← View(数据渲染) ← Controller ← Service ← DAO ``` - **重要原则**:上可调用下,反之禁止(如DAO不能直接调用Service)[^2]。 --- ### █ 分优势 - **解耦**:修改数据库时不影响业务逻辑(如从MySQL迁移至MongoDB只需重写DAO) - **可测试性**:可对Service单独进行单元测试,Mock掉DAO - **复用性**:同一Service可被多个Controller调用(如REST API和消息队列消费者) ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值