一、历史回顾
(一)、springMVC处理流程
InternalResourceViewResolver其他功能:
index.jsp ---> Controller(@RequestMapping) ---> success.jsp
现在实现:index.jsp ---> success.jsp,但是还需要走springMVC,而不是普通的超链接。
二、视图解析器常见功能、处理静态资源、类型转换
(一)、视图解析器常见功能、处理静态资源、类型转换
1、要用springMVC实现JSP直接跳转:index.jsp ---> success.jsp
<mvc:view-controller path="handler/welcome" view-name="success" />
例:
请求页面(index.jsp):
springmvc.xml配置:
响应页面(success.jsp):这里就不写了。
注意:如果在springmvc.xml配置了“view-controller”这个标签,会让所有的请求转入“<mvc:...>”中匹配映射地址,而会忽略掉@RequestMapping()。如果想让“<mvc:...>”和@RequestMapping()共存,则需要加入一个注解:
2、SpringMVC的控制请求的修改
SpringMVC的控制请求是请求转发(forward),现在修改成重定向(redirect)的方式。那就是在返回值的地方添加“forward:”或者“redirect:”前缀值和详细的执行的跳转地址。
例:
请求页面(index.jsp):
Controller处理请求:
3、处理静态资源:html css js 图片 视频
动态资源:可以与用户交互、因为时间/地点的不同而结果不同的内容。例:百度---天气。
静态资源:不管任何情况结果是不变化的。例如:html 、css、js、图片、视频。
在springMVC中,直接访问静态资源是报404。原因如下:当访问地址:http://localhost:8080/Demo/test.img的时候,springMVC之前将所有的请求通过通配符 “/” 拦截,进而交给springMVC的入口DispatcherServlet去处理,它就是找该请求映射对应的@RequestMapping()。例:就去找@RequestMapping("test.img"),这里不可能找到这个内容。
解决方案:如果是需要springMVC处理的,则交给@RequestMapping()去处理;如果不需要springMVC处理,则使用tomcat默认的Servlet去处理。如果有对应的请求拦截,则交给相应的Servlet去处理。如果没有对应的Servlet,则直接访问。tomcat默认的Servlet在哪里?在tomcat配置文件\conf\web.xml中。在项目的web.xml中配置Servlet的代码示例:
解决静态资源访问方案:如果有springMVC对应的@RequestMapping()则交给springMVC去处理;如果没有对应的@RequestMapping(),则交给服务器tomcat默认的servlet去处理(在上面讲了)。实现方法:只需要在springMVC的配置文件springmvc.xml中增加两个配置即可,如下图所示:
例:
在项目中增加一个图片:
springmvc.xml中的配置:
4、类型转换
(1)、springMVC自带一些常见的类型转换器:例如:
这里既可以接收Integer类型数据,也可以接收String类型的数据。
(2)、自定义类型转换器
这个是将前端(JSP等)传入的值,自动转换成一个前端后台的对象。如下图所示:
具体执行步骤是:
a、编写自定义类型转换器的类(实现Converter接口)
b、配置:将编写好的自定义类型转换器的类加入到springMVC中
(a)、在springmvc.xml中配置,将自定义转换器纳入到springIOC容器中
(b)、再将刚才纳入springIOC容器中的自定义类型转换器,再纳入到SpringMVC提供的转换器Bean中,这个Bean是ConversionServiceFactoryBean。
(c)、再将ConversionServiceFactoryBean的这个Bean,注册到annotation-driven中。
(d)、通过@RequestParam()注解对应前台和控制的对象的对应,他是触发转换器的桥梁。@RequestParam()注解将接收到的数据,是前端传过来的(2-zs-23),但是需要将该数据赋值给修饰的目标对象(student)。因此springMVC可以发现接受的数据和目标数据不一致,并且两种数据分别是String、Student正好符合自定义的类型转换器(MyConverter)
例:
自定义类型转换器:
springmvc.xml的配置:
页面请求(index.jsp):
Controller请求处理: