Java servlet内部使用的逻辑本身是模型,还是它们处理并传递给jsp的数据是模型?

Java servlet内部使用的逻辑本身是模型,还是它们处理并传递给jsp的数据是模型?,java,model-view-controller,jakarta-ee,servlets,Java,Model View Controller,Jakarta Ee,Servlets,在MVC体系结构中,控制器决定由哪个组件处理哪个用户请求(在javaee中是哪个servlet)。那么,servlet(调用业务方法或EJB等)中用于创建应提供给视图的数据的逻辑是否称为模型 在一些书中,有人写到servlet将模型传递给JSP。从这个意义上讲,模型是传递给JSP的数据。在典型的Java EE体系结构中,“模型”的正确含义是什么?模型是您在服务器下构建数据的方式。因此,模型不是传递给JSP的数据,而是传递给JSP的数据结构 在解释MVC模式时,这种怀疑总是会出现。有人说DTO(数

MVC体系结构中,控制器决定由哪个组件处理哪个用户请求(在javaee中是哪个servlet)。那么,servlet(调用业务方法或EJB等)中用于创建应提供给视图的数据的逻辑是否称为模型


在一些书中,有人写到servlet将模型传递给JSP。从这个意义上讲,模型是传递给JSP的数据。在典型的Java EE体系结构中,“模型”的正确含义是什么?

模型是您在服务器下构建数据的方式。因此,模型不是传递给JSP的数据,而是传递给JSP的数据结构

在解释MVC模式时,这种怀疑总是会出现。有人说DTO(数据传输对象)是模型,jsp是视图,在服务器上执行的操作是控制器,但我至少听到了JavaEE体系结构的不同解释,我现在记不起来了


然而,我更喜欢你(并由我完成)的观点,而不是我迄今听到的其他观点。

该模型可以同时涉及“业务模型”和“数据模型”。业务模型也被称为“业务代理”、“域对象”、“服务外观”或任何类似的东西。在根据标准设计良好的JavaEEWeb应用程序中,EJB类不直接使用JPA或任何DB访问逻辑,而是进一步委托给其他纯DAO对象的EJB类

例如

@无状态
公共类ShoppingServiceLocal实现ShoppingService{
@EJB
私人产品;
@EJB
私有OrderDAO OrderDAO;
@凌驾
公共列表搜索产品(字符串查询){
返回productDAO.find(查询);
}
@凌驾
公共订单产品(用户、产品产品、整数数量){
product.setAvailable(product.getAvailable()-数量);
productDAO.update(产品);
订单=新订单(user.getId(),product.getId(),quantity);
创建(订单);
退货单;
}
}
请注意,由于这是一个EJB,
ProductDAO#update()
OrderDAO#create()
在一个事务中完成。因此,如果创建订单引发异常,则编辑的可用性也不会被持久化

“数据模型”是上例中的
产品
用户
订单
,它们应该是JPA
@实体
javabeans。这就是servlet(控制器)和JSP(视图)所知道的全部内容

@Stateless
public class ShoppingServiceLocal implements ShoppingService {

    @EJB
    private ProductDAO productDAO;

    @EJB
    private OrderDAO orderDAO;

    @Override
    public List<Product> searchProducts(String query) {
        return productDAO.find(query);
    }

    @Override
    public Order orderProduct(User user, Product product, int quantity) {
        product.setAvailable(product.getAvailable() - quantity);
        productDAO.update(product);
        Order order = new Order(user.getId(), product.getId(), quantity);
        orderDAO.create(order);
        return order;
    }

}