在商业网站开发中,Spring MVC 可以说是目前最流行的框架,之所以如此的流行,原因很简单:编程简洁、上手简单!
记得刚开始入行的时候,最先接触到的是Struts1 + Hibernate + Spring来作为 web 系统的核心框架,简单的描述一下当时的编程心情:超难用,各种配置项居多,而且不容易快速入手!
之后,换成了Struts2 + hibernate + spring来作为主体框架,Struts2相比Struts1编程要简单很多,而且加强了对拦截器与IoC的支持,而在Struts1中,这些特性是很难做到的!
然而,随着Struts2的使用量越来越广,业界爆出关于Struts2的bug和安全漏洞却越来越多!

黑客们可以轻易的利用安全漏洞直接绕开安全防线,获取用的隐私数据,网名因个人信息泄露造成的经济损失高达 915 亿元!

至此很多开发者开始转到SpringMVC框架阵营!
01、什么是SpringMVC?
今天我们要介绍的主角就是SpringMVC框架,刚开始玩这个的时候,给我最直接的感觉就是:很容易简单!
直接通过几个注解就可以完成方法的暴露,比起Struts2中繁琐的xml配置,SpringMVC的使用可以说更加友好!
熟悉SpringMVC框架的同学一定清楚下面这张图,

这张图就是 SpringMVC 在处理 http 请求的整个流程中所做的一些事情。
-
1、用户发送请求至前端控制器DispatcherServlet -
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 -
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 -
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器 -
5、执行处理器(Controller,也叫后端控制器)。 -
6、Controller执行完成返回ModelAndView -
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet -
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器 -
9、ViewReslover解析后返回具体View -
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。 -
11、DispatcherServlet响应用户。
DispatcherServlet 主要承担接收请求、响应结果、转发等作用,剩下的就交给容器来处理!
基于上面的流程,我们可以编写出一款简化版的Spring MVC框架,话不多说,直接撸起来!
02、程序实践
首先上图!

这个就是我们简易版的Spring MVC框架的实现流程图!
-
1、首先创建一个 DispatcherServlet类,在服务启动的时候,读取要扫描的包路径,然后通过反射将类信息存储到ioc容器,同时通过@Autowired注解,实现自动依赖注入,最后读取@RequestMapping注解中的方法,将映射路径与类的关系存储到映射容器中。 -
2、当用户发起请求的时候,通过请求路径到 映射容器中找到对应的执行类,然后调用具体的方法,发起逻辑处理,最后将处理结果返回给前端用户!
以下是具体实践过程!
2.1、创建扫描注解
因为Spring MVC基本全部都是基于注解开发,因此我们事先也需要创建对应的注解,各个含义与Spring MVC一致!
-
控制层注解
@ServicepublicclassUserServiceImplimplementsUserService{@Overridepublicbooleanlogin(StringuserName,StringuserPwd){if("zhangsan".equals(userName)&&"123456".equals(userPwd)){returntrue;}else{returnfalse;}}}
最后,将项目打包成war,通过tomcat启动服务!
在浏览器中访问http://localhost:8080/user/login?userName=hello&userPwd=123,结果显示如下:

当我们将userName和userPwd换成正确的数据,访问地址如下:http://localhost:8080/user/login?userName=zhangsan&userPwd=123456

可以很清晰的看到,服务调用正常!
03、小结
本文主要以Spring MVC框架为背景,手写了一个简易版的Spring MVC框架,虽然功能简陋了一点,但是基本无张俱全,里面讲解了ioc和自动依赖注入的实现过程,还有前端发起一个路径请求,是如何映射到对应的controller类中的方法上!
当然实际的Spring MVC框架的跳转流程比这个复杂很多很多,里面包括各种拦截器、权限安全管理等等,在后面的文章,小编也会陆续进行详细介绍!
鉴于笔者才疏学浅,如果有理解不对的地方,欢迎网友批评支持!
想要获取项目源代码的小伙伴,可以后台回复【springmvc】即可获取项目的源代码。
04、参考
1、https://blog.csdn.net/yangsnow_rain_wind/article/details/80226770
写到最后
最后感谢各位的阅读,如果喜欢我们的文章,欢迎大家转发,点击【在看】让更多的人看到,谢谢大家的支持!
本文已整理到技术笔记中,此外,笔记内容还涵盖 Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、微服务等技术栈。
想要领取资料的朋友,可以关注下方公众号并回复:电子书,即可免费领取。
往期精选
本篇文章来源于微信公众号: 潘志的研发笔记
微信扫描下方的二维码阅读本文

Comments NOTHING