对ModelandView的理解

来源:互联网 发布:农村淘宝报名申请 编辑:程序博客网 时间:2024/05/17 23:09
Spring Web MVC 处理Http请求的大致过程:一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。DispatcherServlet将View对象渲染出的结果返回个客户。
这是MVC中的两个模块
Model 是指数据模型
View是指UI视图
另外Control是指控制流

为什么要用MVC, 目前凡是涉及到UI有界面的程序,最好采用MVC模式来设计。
View: 我们要专门有一个模块,还存放所有的UI组件库, 按钮,图片,文本框,列表,菜单等等,这些东西都是死的,没有内容。 比方说文本框,你从组库中把文本框拿出来,默认里面没有任何文字。

Model: 我们的数据模型,如果是面向对象的程序,那就是一个个的数据类。如学生,老师,汽车,职员等等。他们也可以理解成数据结构。我们必须有一个专门的模块来存放这些结构。 结构也是死的,如果没有把他拿出来用,他就永远躺上该模块中。

Control: 控制者, 可以理解成一段代码, 它会根据当前的程序状态机,将合适的数据模型中的数据填充到UI视图中。也可以反过来通过监听UI组件的变化,将一部分变化写回数据模型中。

举例:
用户注册界面,
有四个 UI组件 1。文本框提示用户一些注册信息 2。两个输入型文本框可以让用户输入帐号和密码 3。一个按钮。

这里,Model是用户资料
View就是这四个UI组件

而Control需要程序加上代码:
当按钮被按下,首先生成User的实例,其实从两个输入框中分别获取字符串, 将user的id和password赋值。 保存user实例或者发送到server端。

在这个过程中,三个模块各司其职,尽可能少地相互不干涉。特别是model和view之间不干涉,而control是桥梁。

以上是对java的MVC模式的广义解说。
MVC在java的web应用中还有狭义的解说,也就是B/S中常用的MVC架构,具体可以查询这方面资料。
1 0
原创粉丝点击