视图和视图解析器
视图:请求处理方法执行后,最终返回一个ModelAndView对象,对于那些返回String,View或者ModelMap等类型处理方法,SpringMVC也会在内部将它们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图。
视图解析器:SpringMVC借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP,也可以是Excel等各种表现形式的视图。
视图
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。为了实现视图模型和具体实现技术的解耦,Spring定义了一个高度抽象的View接口视图对象由视图解析器负责实例化。由于视图是无状态的,所以不会有线程安全问题。
视图解析器
视图解析器作用:将逻辑视图解析为一个具体的视图对象。所有的视图解析器都必须实现 ViewResolver 接口
注意:每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高
SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常
mvc:view-controller标签
若希望直接响应通过 SpringMVC 渲染的页面,可以使用 mvc:view-controller 标签实现
直接配置响应的页面:无需经过控制器来执行结果,path指定那个请求,view-name指定映射给那个视图。视图解析器会解析视图
<mvc:view-controller path="/success" view-name=“success”/>:
注意:配置mvc:view-controller会导致其他请求路径失效,解决方法:mvc:annotation-driven/
SpringMVC的转发和重定向
转发:
/**
* forward:转发到一个页面
* /hello.jsp:转发到当前项目下的hello
* 一定要加上/,如果不加就是相对路径。容易出问题
* forward:前缀的转发,不会由我们配置的视图解析器拼串
*/
@RequestMapping("/handle01")
public String handle01(){
return "forward:/hello.jsp";
}
重定向:
/**
* 重定向到hello.jsp页面
* 转发 forward:转发路径
* 重定向 redirect:重定向的路径
* 有前缀的转发和重定向,配置的视图解析器不会进行拼串
* /hello.jsp:表示就是从当前项目下开始:SpringMVC会为路径自动的拼接上项目名
* 原生的Servlet重定向/路径需要加上项目名才能成功
* response.sendRedirect("/hello.jsp")
* @return
*/
@RequestMapping("/handle02")
public String handle02(){
return "redirect:/hello.jsp";
}