Spring MVC 3.0实战:基于协商的视图解析器解析

需积分: 9 5 下载量 53 浏览量 更新于2024-08-18 收藏 2.63MB PPT 举报
"本文档是关于Spring MVC的实践指南,重点介绍了基于协商的视图解析器的配置和使用,以及Spring MVC的基本概念和框架结构。" 在Spring MVC中,视图解析器扮演着至关重要的角色,它们负责将控制器处理方法返回的逻辑视图名转化为实际的视图资源。基于协商的视图解析器(ContentNegotiatingViewResolver)是一种智能的视图解析策略,它可以根据多种因素来确定应该使用哪种视图技术来呈现响应,如用户代理的Accept头、URL路径扩展、请求参数等。 在提供的配置中,`ContentNegotiatingViewResolver`被设置为优先级最高的视图解析器(`order="0"`),并且默认内容类型被设定为`text/html`,这意味着如果其他条件不明确,系统将默认返回HTML视图。`ignoreAcceptHeader`属性被设置为`true`,表示忽略用户的Accept头信息,`favorPathExtension`设为`false`意味着不考虑URL路径扩展来决定视图类型,而`favorParameter`设为`true`表示会检查请求参数`content`来决定视图。 `mediaTypes`属性定义了系统支持的媒体类型映射,例如,`html`对应`text/html`,`xml`对应`application/xml`,`json`对应`application/json`。这允许系统根据客户端的偏好返回不同格式的数据。 `defaultViews`属性定义了一组默认视图,当没有更具体的匹配时使用。在这个例子中,我们有两个视图 bean:`MappingJacksonJsonView`用于处理JSON响应,`MarshallingView`则用于XML响应。`MappingJacksonJsonView`通过`renderedAttributes`属性指定了要序列化的模型属性,而`MarshallingView`使用`modelKey`和`marshaller-ref`属性来指定要进行XML序列化的模型对象和使用的marshaller。 接下来,`InternalResourceViewResolver`被配置为次级视图解析器,具有较高的顺序值(`order="100"`)。这个解析器主要用于处理JSP视图,它使用`JstlView`作为默认视图类,并通过`prefix`和`suffix`属性设置视图路径前缀和后缀,例如,视图名"user/register"会被解析为"/WEB-INF/views/user/register.jsp"。 Spring MVC框架的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、Handler、ModelAndView、ViewResolver和Model。DispatcherServlet作为前端控制器,接收HTTP请求并分发到相应的处理器。HandlerMapping负责映射请求到处理器方法,HandlerAdapter处理适配问题,使得不同的处理器可以被统一调用。Handler执行业务逻辑并返回ModelAndView对象,其中包含模型数据和视图名。ViewResolver解析视图名并返回实际的视图对象,最后Model和View共同完成视图渲染。 Spring MVC 3.0引入了许多新特性,如RESTful URL支持、更多的注解驱动、HTTP输入输出转换器、与数据转换、格式化和验证框架的集成,以及对静态资源的特殊处理。这些改进使得Spring MVC在处理Web应用时更加灵活和高效。 通过上述配置和解释,我们可以看到Spring MVC如何通过基于协商的视图解析器实现对不同格式响应的支持,以及整个框架如何协同工作以处理HTTP请求和呈现视图。