问题:
在学习了Spring之后,基于MVC设计模式的项目,我们可以使用Mybatis将数据库替换,使用Spring将Controller层和Service层,以及Service层和数据库层之间进行解耦。但是基于MVC的模式中,在Controller层中的Servlet为请求的代码入口。tomcat服务器在接受到请求后,会根据请求地址自定调用对应的servlet的service方法完成请求处理,但是此流程存在如下问题:
① 每个功能都要声明对应的Servlet,麻烦。
② 在Servlet中获取请求数据比较麻烦。
③ 响应的方式的代码其实只想声明对应的响应数据。
解决:
项目只声明一个Servlet,该Servlet作为项目请求的公共入口。并且在该Servlet必须声明代码,此代码根据请求地址调用对应的逻辑代码处理请求。如果将逻辑方法全部声明在Servlet中造成代码的体系结构不清晰,将逻辑方法单独声明到逻辑类中(Controller类)。然后Servlet中根据请求动态的调用对应的逻辑类中的逻辑方法处理请求即可。
① 如何在Servlet中获取逻辑类对象呢?
使用Spring容器的子容器,在子容器中存储所有的Controller的实例化对象,然后Servlet一次性从子容器中获取所有的对象即可。在init方法中实现即可。
② 如何在Servlet中根据请求动态调用对象的逻辑方法呢
使用反射+注解。
原理图:
实现:
SpringMVC
本质:
就是将Servlet进行了封装,提供一个公共的Servlet。该Servlet可以根据请求动态的调用对应的逻辑方法完成请求处理。
优点:
提升开发效率。
使用:
① 导入SpringMVC的相关jar
② 在web.xml中配置Servlet
- Servlet的访问路径
- 配置SpringMVC容器对象的配置文件路径
③ 在src下创建并配置SpringMVC配置文件
- 配置注解扫描路径
- 配置SpringMVC的驱动解析器。