个人的理解:
一、首先说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。它长这样:
public class DispatcherServlet implements Servlet{undefined
//main方法
public void main{undefined
if(映射器说要执行A){undefined
this.controllerA();
}
if(映射器判断要执行B){undefined
this.controllerB();
}
//Controller就是各种方法
public XXX controllerA(){ }
public XXX controllerB(){ }