Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
Spring mvc 的运行原理如下图(图片是在李阿均的博客拿的)
SpringMVC工作流程概述:
1、客户端向web服务器(如tomcat)发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径(通过web.xml中的servlet-mapping配置),web容器就将请求交给DispatcherServlet处理。
2、DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符(URI)。然后调用相应方法得到的HandlerMapping对象,再根据URI,调用这个对象的相应方法获得Handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)
3、DispatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。
4、在拦截器方法中,提取请求中的数据模型,填充Handler入参,所以所有准备工作都已做好,开始执行Handler(我们写的controller代码并不是能被直接执行,需要有刚才那些操作,才能转变为Handler被执行)。
5、Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet。
6、这个ModleAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图(通俗理解为将视图名称补全,如加上路径前缀,加上.jsp后缀,能指向实际的视图)。
7、DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图。将得到的最终视图通过http响应返回客户端。
其实看着一堆解释挺抽象的,到具体的工程中还是不太会用,下面就来分析一下具体的工程包,那个包具体是干什么等遇到真正的工程,能迅速找到文件的位置
1、com.mvc.controller
存放控制器controller文件前端页面和后端文件链接的文件
2、com.mvc.dao
存放数据接口文件类
3、com.mvc.model
存放数据库对象把数据库实例化成每个对象文件
4、com.mvc.service
存放service接口文件
5、com.mvc.service.impl
存放service实现类文件(末尾加impl代表实现)也就是用sql 或者hql语句把你需要的东西查出来,好让上一层做业务逻辑判断
6、com.mvc.test
看名字也知道存放测试类文件
7、com.mvc.util
这个包有的工程用不到,存放工具类文件(例如:时间工具类,英汉互译工具类等等),如碰到重复使用的东西写成一个工具类存放在此文件夹下