【问题标题】:How view to model communication happens in MVC在 MVC 中视图到模型的通信是如何发生的
【发布时间】:2015-05-03 04:48:36
【问题描述】:

我一直在从一本书中阅读有关 MVC 的信息。混淆是关于模型通信的视图如何发生的事实。我想了解这在使用 JSP 和 servlet 的简单 Java Web 应用程序中是如何发生的。

视图通常直接获取它需要显示的状态和数据 来自模型

它是改变模型对象状态的控制器。一旦更改,控制器就会通过请求对象将该特定对象传递给 JSP 页面。

在控制器 servlet 中

rd = request.getRequestDispatcher("/success.jsp");
User userObj = new User(username, password);
request.setAttribute("user", userObj); 
rd.forward(request, response);

在success.jsp中

<%  
User bean=(User)request.getAttribute("user");  
out.print("Welcome, "+bean.getName());  
%>  

请求分派器将请求和响应对象转发到jsp页面。 jsp 页面使用请求对象来访问修改后的模型对象 (userObj)。这就是视图与模型对话的意思吗?这是视图和模型之间通信的基本方式吗? (我的意思是通过request.getAttribute()?)

【问题讨论】:

  • 这完全取决于您遵循哪种理念,例如,有些人会说视图和模型不应该直接相互通信,而应该通过控制器进行通信
  • 所以两者都被接受?在我的代码中,视图和模型会说话吗?
  • 任何一种都可以接受,但您应该保持使用其中一种。但我说控制器在这种情况下直接将模型传递给视图(如果我们假设模型是User
  • 如果我的视图不与模型对话,那么在实际代码中视图与模型的通信是如何发生的?
  • 基于 Web 的断开连接特性,视图必须与控制器通信才能将更改传达给模型,反之亦然

标签: java jsp servlets model-view-controller


【解决方案1】:

在 MVC 架构中,控制器从请求对象接收数据,操作模型,然后将流转发到 jsp。 Jsp 从属性设置和显示的范围中获取。

您可以在多个范围内设置属性。

Request, Session, ServletContext

每个作用域都有getAttribute() & setAttribute()

${requestScope.yourValue} : request scope which is also the default
${sessionScope.yourValue} : retrieving from the session scope
${applicationScope.yourValue} : retrieving from the context scope

当 JSP 从各个作用域获取值时,这是视图与模型对话的示例。除了坚持这个流程不是强制要求之外,您始终可以根据自己的要求自定义应用程序的流程。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2011-09-06
    • 2021-07-27
    • 2016-08-24
    • 1970-01-01
    • 2012-04-13
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多