SpringMVC的执行流程
用户向DispatcherServlet发送请求,给了DispatcherServlet一个请求
DispatcherServlet先来找HadnleMapping(处理器映射器) 找映射关系 你这个请求要用哪个方法来调用。
把一个对象或者链传回去中央调度器DispatcherServlet
然后DispatcherServlet去找处理器适配器HandleAdaptor 找到一个适配器,然后用这个适配器去找处理器,
处理器(相当于servlet里面的方法)处理完了 还给ds
DispatcherServlet去找试图解析器(相当于以前找一个页面)找到解析器后解析 还给ds
DispatcherServlet去找视图,调用执行。然后返回给浏览器。
本节用到的
SpringMVC
下图里面的红字执行 打错了,应该是支持。
SpringMVC的约束头
1.配置xml文件
设置一个DisPatcherServlet(中央调度器)
设置凡是以do结尾的方法,都交给中央调度器。
搜索DisPatcherServlet,获取全限定类名
2.创建一个控制器,实现接口 Controller
返回值为ModelAndView:既需要返回一个模型bean 又需要返回一个视图的时候用这个做返回值
设置跳转页面,返回视图 ModelAndView
写在java和配置文件里面的 斜杠 是服务端的
既然使用mvc模式,那么如何让前台这个访问请求 发给DispatcherServlet?
解决方法:把controller当成一个bean 配到这个Servlet里面去。
这里把这个bean配置成为==以do结尾 ==就可以进入中央调度器了。
遇到500 路径错误 和昨天处理方法一样
若把页面放在web-info的路径下
这个路径浏览器不能直接访问,只能通过服务器内部转发才过得去
但是这样的话 每次都要配置这个web-info 很麻烦。
所以要添加一个视图解析器,
配置前置文件, 后缀文件。
拷贝全限定类名,在这个类,或者其父类寻找配置前缀和后缀的属性名。最终在父类找到
这个时候,只需要写页面名字就行了
jar包底层的配置文件;首先找到mvc底层配置文件
无法访问静态资源的处理方式:
先不改配置文件,在网页加入一张图片(目前过滤的是 *.do)
注意配置的时候不要使用 /* 它会拦截所有的动态资源。连jsp都不能访问了。
可以使用 / 拦截静态资源
当改成斜杠后,
图片出不来了。
因为DispatcherServlet里面没有专门处理静态资源。
处理方法:配置一个mvc的约束。
先引入最强头文件
配置
这样就出来了。
基本配置
处理器映射器:给你一个请求路径,根据请求路径来查找一个合适的处理器。
BeanNameUrlHandlerMapping
这是默认的处理器映射器,可以不用配置、
因为第二个项目是由第一个项目直接拷贝过来的,视图配置还是第一个项目,所以现在需要修改视图配置。
打开Navigator导航器
一共修改了四处。
接下来添加处理器映射器。
首先搜索BeanNameUrlHandlerMapping ,拷贝全限定路径名
这时候访问两个连接都可以。
但是这个不配置的缺点是,配置一次就会创建一个对象。
通过配置的 处理器映射器。
这里使用的是 SimpleUrlHandlerMapping
找到他的参数,发现这里面有两种配置的方法,这里先使用第一种。Mapping
第一种,通过properties配置。
这个时候bean的命名 要符合一般的习惯,多个路径映射同一个bean
2.现在来根据第二种map来配置
处理器适配器:不同的接口可以统一工作
SimpleControllerHandlerAdapter:
统一转换成controller,然后
另一种适配器:HttpRequestHandlerAdapter
凡是实现了HttpRequestHandler接口的处理器都是使用该适配器统一调用的
这个不需要配置。
通过查看底层源码
底层还是一样的
不要忘了配置xml
AbstractController: 可以限定method的请求类型。
注意:这里是继承AbstractController方法,不再是实现接口了!!!!
现在访问yjsb。do 出现405
是因为这个页面设置需要通过post请求获取。(xml文件里面的设置的)
给他一个页面,点击提交就获取到yjsb了
MultiActionController:
使用方法名称解析器 :要求占位符和通配符里面的路径要和方法名字一样。
使用属性方法名称解析器
参数方法名称解析器
通过查看源码
默认的是action myServlet?action=?
若改成 之前的method 增加一条配置
注意,图里的method打错了。
ModelAndView
配置了这个
之后
使用转发、重定向的话
默认忽略内部视图解析器的前后缀。
:把视图的名字/路径变成bean
先配置,
添加jstl jar包
若
就再配置一个视图解析器