目录
一、配置Maven(为了提升速度)
在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非常慢,这是因为里面的一些jar包来自国外。所以在此手动配置一下maven:
1.自行下载apache-maven后将其解压缩到D盘
2.在D:盘目录下创建一个新的空文件夹,命名为maven:
3.点开项目的【文件】-->【设置】(这里的idea是中文版本的,正常版本应该是【File】-->【setting】):
4.找到构建、执行、部署下面的构建工具中的Maven:
5.点击改变Maven的主路径,选择已经下载好的D:盘apache-maven,然后点击确定。
6.点击确定成功后,这里就会自动更新成我们创建的maven空文件夹:
7.点击重写,选择D:盘apache-maven下conf下的logging下的setting.xml,点击确定。
8.完成这些后点击大的确定,回到pom.xml文件刷新,以后再导入依赖或是配置maven文件就更快了。
二、流程&&原理
现在在SpringMVC(一)配置-CSDN博客实现的基础上看一下实现的原理。
首先回忆一下servlet是如何处理合同http请求的:
http请求打过来,随后根据通过web.xml文件(在eclipse中被注解代替了--这两者本质是一种功能),去到达不同的地址。
而在SpringMVC框架中只是重新使用web.xml文件实现这个功能,在servlet中,web.xml需要去一一映射,但是在SpringMVC框架中,web.xml文件做了一个配置:
通过dispatcherServlet去实现自动请求分发,"/"表示所有,即所有的请求都会打到dispatcherServlet中。
SpringMVC中心控制器
Spring的web框架围绕DispatcherServlet 【servlet调度】设计
DispatcherServlet的作用是将请求发送到不同的处理器
入门案例的执行流程
-
当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml配置文件
-
开启了注解扫描,那么HelloController对象就会被创建
-
从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到
执行的具体方法
-
根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件
-
Tomcat服务器渲染页面,做出响应
SpringMVC官方提供图形
【这张图⭐--面试】
入门案例中的组件分析
-
前端控制器(DispatcherServlet)
-
处理器映射器(HandlerMapping)
-
处理器(Handler)----一个又一个的方法
-
处理器适配器(HandlAdapter)
-
视图解析器(View Resolver)
-
视图(View)
就着springmvc.xml文件分析一下:
①扫描的其实就是servlet文件,现在打开HelloController看一眼:
1.Spring创建对象的方式
2.@RequestMapping地址映射
没有标注的时候默认是GET,当然可以通过下面这种方式指定具体是哪个方法。
3.这里返回"suc",肯定不是一串字符串这么简单,这里面对应的跟显然是前端界面:
那么为什么这里可以以这种格式书写呢?
这就牵扯到springmvc.xml文件③这一部分了:
前缀是/html/,后缀是.html,所以return时,返回的其实是,/html/suc.html,即一个前端界面。
完整流程:
运行项目时,首先会执行到web.xml文件中的:
即去到index.html文件:
也就是这里:
当点击入门程序时,就会触发这个请求;现在来看这个请求出自哪里:
前面已经讲过了,这里的return实际上是return了一个html目录下的suc.html文件。
同时从hello.do到return的步骤,这里也是这一步操作(至于为什么不直接到达Handler而是通过处理器适配器---这里可以添加拦截器):
这里来到suc.html文件,里面有元素显示:
现在来看这里面的msg究竟承载着什么内容,这里将再次回到HelloController文件,可以看见这里面存放的内容是"hello,SpringMVC"。
也就是点击入门程序后,显示(可以看见这里显示的请求路径是"locahost....../hello.do"):
至此,就是目前一个基础的SpringMVC框架和运行的流程,下面的所有使用都将围绕这个原理展开。