Servlet、Spring、Spring MVC
-
Web容器中有Servlet容器,Spring项目部署后存在Spring容器和SpringMVC容器。其中Spring控制Service层和Dao层的bean对象。SpringMVC容器控制Controller层bean对象。Servlet容器控制Servlet对象。项目启动是,首先 Servlet初始化,初始化过程中通过web.xml中Spring的配置加载spring配置,初始化Spring容器和SpringMVC容器。待容器加载完成。Servlet初始化完成,则完成启动。
HTTP请求到达web容器后,会到达Servlet容器,容器通过分发器分发到具体的Spring的Controller层。执行业务操作后返回结果。 -
一、首先说mvc和单独一个servlet的区别:
如果我的tomcat服务器要实现一个功能,比如说接收一个请求,从数据库里查出一条用户信息(select),然后返回到服务器,那么不用mvc的方法是:
只有一个servlet也可以实现,自定义一个servlet,在tomcat的web.xml的中注册,接收 /select 请求,在servlet里手写实现jdbc接口连接数据库完成查询,得到response的输出流,把查询结果write到页面上。这样耦合度很高,向页面上写response也很麻烦。
使用mvc模式可以降低耦合度,jsp也可以简化输出的过程。Controller层的servlet接受请求信息,调用Model层的Dao的方法实现与数据库的连接、查询,将查到的数据利用View层jsp技术显示给用户。
二、为什么要用springmvc:
这时候要再实现几个功能,向数据库中添加用户(insert),删除用户(delete),更改用户(update)等等功能,如果传统mvc模式怎么做?
(一)写几个新的servlet。然后在web.xml中注册新sevlet,并映射对应的/insert /delete /update /XXX,在这些新的servlet中调用View和Model层完成功能。
这样新定义servlet的方法比较麻烦,要去继承HttpServlet接口,实现接口方法,手写调用jsp的重定向或者请求转发,还要再web.xml中注册。
(二)直接在原来的servlet中添加方法。然后把web.xml中原来的/select改成 / 来映射所有请求,在原来的servlet中加入判断,不同的请求执行不同的方法。
这第(二)种实现方法,仔细想一想,是不是和springmvc就有点像了?这时这仅有一个的servlet就对应着springmvc中的DispatcherServlet,我们写的实现这些功能的方法就对应着springmvc中我们要写的很多controller,我们在servlet中写的判断,springmvc就通过处理器映射器、处理器适配器这两大组件帮我们实现了。
即:
我们写的单一的servlet------------------------>springmvc的DispatcherServlet
我们servlet里的判断语句---------------------->处理器映射器,处理器适配器
我们servlet里的方法----------------------------->各种controller
三、总结
springmvc框架三大组件(DispatcherServlet,处理器映射器,处理器适配器)就是一个可以处理多种请求的强大的servlet。