上篇博客,写了个Spring MVC的入门级的hello word练习,这里对里边的细节进行一些介绍
一、Spring MVC的运行流程
- 1、客户端点击链接会发送 http://localhost:8080/hello 请求
- 2、请求来到 tomcat服务器
- 3、SpringMVC的前端控制器收到所有的请求
- 4、tomcat看请求地址和@RequestMapping标注的哪个地址匹配,来找到到底使用哪个处理器和方法
- 5、前端控制器找到了目标处理器类和目标方法,直接利用返回执行目标方法
- 6、方法执行完成以后会有一个返回值:SpringMVC认为这个返回值就是要去的页面
- 7、拿到方法返回值以后,用视图解析器进行拼串的到完整的页面地址
- 8、拿到地址页面地址,前端控制器帮我们转发到页面;
二、RequestMapping注解
@RequestMapping就是告诉SpringMVC,这个方法用来处理什么请求的,对于里面写的请求,/ 可以省略,及时省略了,也是默认从当前项目下开始,习惯上还是加上比较好 /hello
三、前端控制器在配置时没有指定配置文件会怎么样?
如果,在配置前端控制器的时候,没有制定配置文件的地址,则默认去 /WEB-INF下去找 前端控制器名-servlet.xml 文件,如果找不到就会报错。
比如下边的配置,没有指定配置文件的地址,则会默认在 /WEB-INF下找 springDispatcherServlet-servlet.xml 文件
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
4、/ 和 /* 的区别
- 处理*.jsp是tomcat做的事:所有的项目的web.xml都是继承与tomcat的web.xml
- DefaultServlet是Tomcat中处理静态资源的,除了jsp和servlet之外剩下的都是静态资源;
- 例如:一个html页面,属于静态资源,tomcat就会在服务器下找到这个资源并返回。而我们的前端控制器相当于重写了tomcat的DefaultServlet,服务器大的web.xml中的DefaultServlet的url-pattern=/,我们的前端控制器也是url-pattern=/,静态资源会来到前端控制器(DispatcherServlet)看哪个方法的RequestMapping跟请求匹配,而不是tonmcat去找。实际上,我们并不能解析静态资源,至于怎么解决,这个以后的博客中会更新。
- jsp能够访问,是因为我们没有覆盖服务器的JspServlet的配置
- /*直接拦截所有的请求;
以上就是对hello word 中一些细节的介绍。