软件开发中的MVC设计模式
软件开发的目标是减小耦合,让模块之前关系清晰.
MVC模式在软件开发中经常和ORM模式一起应用,主要作用是将(数据抽象,数据实体传输和前台数据展示)分层,这样前台,后台,数据库三层分离,减小耦合.
1)Model : 负责抽象并存储数据库数据
2)Controller : 负责数据的转化和传输
3)View : 负责展示数据
注意 框架的应用使软件开发变得更有章可循,更规范化,软件开发的每个职责都落到了具体的模块中去
ORM框架 : 将数据库数据封装存储至Model类中
MVC框架 : 前台数据与实体数据的互为转化
开发者 : 配置框架,编写业务代码,前台数据展示页面
SpringMVC工作流
SpringMVC是建立在Spring framework之上的一个MVC框架,主要的组件有前端控制器、处理器映射器、处理器适配器、视图解析器.
1.SpringMVC的原理就如上图所展示的,客户端发来HTTP请求,
2.前端控制器作为一个顶层执行者获取请求,
3.返回一个执行链HandlerExecutionChain{HandlerInterceptor1,HandlerInterceptor2,Handler},
4.前端控制器请求映射器查询对应的处理器适配器,
5.处理器适配器代理执行处理器,
6.处理器响应处理,返回一个ModelAndView,
7.适配器返回一个ModelAndView至前端控制器
8.前端控制器请求视图解析器执行解析,
9.解析器返回一个未经渲染的视图
10.前端控制器渲染视图,将模型数据存于request域
11.视图发至浏览器进行渲染呈现
注意,上图分为Model,View,Controller等模块,其中Model里面可封装许多逻辑,这一部分未在步骤上进行说明.
对比Struts2
1.SpringMVC的前端入口是一个名为DispatchServlet的servlet,Struts2是一个Filter过滤器;
2.SpringMVC基于方法进行开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或者多例模式,Struts2是基于类开发,传递的参数通过类的属性进行传递;
3.Struts2采用值栈存储请求和响应,通过OGNL存取数据,SpringMVC通过参数解析器将request内容进行解析,并给方法形参赋值,将数据和视图封装成一个ModelAndView对象,最后将ModelAndView的数据传入request中以及视图渲染,JSP使用JSTL来进行取值操作;
组件职责描述
1.前端控制器DispatcherServlet(无需开发者开发)
作用 : 接收请求,响应结果,相当于转发器,中央处理器.
有了DispatcherServlet减少了其它组件之间的耦合度.
类位置 org.springframework.web.servlet.DispatcherServlet.class
配置文件 /org/springframework/web/servlet/DispatcherServlet.properties
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>