springmvc视图及视图解析器
处理模型数据
ModelAndView
既包含视图信息,也包含模型数据信息。
Map 及 Model
通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
MVC 的 Handler 方法可以接受的ServletAPI类型的参数
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale
InputStream
OutputStream
Reader
Writer
视图解析器
请求处理方法执行完成后,最终返回一个 ModelAndView对象,ModelAndView包含了逻辑名和模型对象的视图。
对于返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象。
视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题
常用视图解析器
程序员可以选择一种视图解析器或混用多种视图解析器。
每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高。
InternalResourceViewResolver
若项目中使用了 JSTL,则 SpringMVC 会自动把视图由InternalResourceView 转为 JstlView。
若使用 JSTL 的 fmt 标签则需要在 SpringMVC 的配置文件中配置国际化资源文件。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
若希望直接响应通过 SpringMVC 渲染的页面,可以使用 mvc:view-controller 标签实现。
<mvc:view-controller path="/testMvcViewController" view-name="success" />
重定向
如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和redirect: 当成指示符,其后的字符串作为 URL 来处理。
静态资源
在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/> 的方式解决静态资源的问题。
<mvc:default-servlet-handler/> 将在 SpringMVC 上下文中定义一个DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由DispatcherServlet 继续处理
视图
常见视图
可以配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体
的视图解析器实现类。
自定义视图
@Component("helloView1")
public class HelloView implements View{
@Override
public String getContentType() {
return "text/html";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.getWriter().print("hello view, time: " + new Date());
}
}
@RequestMapping("/testView")
public String testView(User user){
System.out.println("testView");
return "helloView1";
}