`
penciltim
  • 浏览: 43834 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

SpringMVC ViewResolver查找序列

阅读更多

虽然我们在之前的示例中一直都是使用一个InternalResourceViewResolver进行视图查找,但这并不意味着每个基于 Spring MVC的Web应用程序只能使用一个ViewResolver。实际上,Dispatcher- Servlet不但可以接受多个HandlerMapping以处理Web请求到具体Handler的映射,也可以接受多个ViewResolver以处 理视图的查找。

DispatcherServlet初始化时,将根据类型扫描自己的WebApplicationContext中定义的 ViewResolver。如果查找到存在多个ViewResolver的定义,DispatcherServlet将根据这些ViewResolver 的优先级进行排序,然后当需要根据逻辑视图名查找具体的View实例的时候,将按照排序后的顺序遍历这些ViewResolver,只要期间任何一个 ViewResolver返回非空的View实例,当前查找即告结束。如果DispatcherServlet没能在当前的 WebApplicationContext中找到任何的ViewResolver定义,它将使用 InternalResourceViewResolver作为默认的ViewResolver使用。

ViewResolver的优先级的指定使用Ordered接口作为标准,这已经成为Spring框架内设定优先级方式的惯例了。假设我们希望主要 使用ResourceBundleViewResolver进行逻辑视图名到具体View实例的查找,如果没能找到,再寻求 InternalResourceViewResolver的帮助。我们可以在Dispatcher- Servlet的WebApplicationContext中添加如下配置内容:

 

<bean id="resourceBundleViewResolver"
 class="org.springframework.Web.servlet.view.
ResourceBundleViewResolver">  
<property name="order" value="1"></property>  
</bean>  

<bean id="viewResolver"
class="org.springframework.Web.servlet.view.
InternalResourceViewResolver">  
<property name="prefix" value="/WEB-INF/jsp/"/>  
<property name="suffix" value=".jsp"/>  
</bean> 
 

相应ViewResolver的bean定义对应的id或者name属性值是任意 的,DispatcherServlet将按照类型来获取ViewResolver。如果没有为某个ViewResolver指定order值的话,默认 值为Integer.MAX_ VALUE,对应的是最低优先级。

如果为DispatcherServlet指定多个ViewResolver的话,不要给予 InternalResour- ceViewResolver以及其他UrlBasedViewResolver子类过高的优先级,因为这些ViewResolver即使找不到相应的视 图,也不会返回null以给我们轮询下一个ViewResolver的机会,这样,我们所指定的其他ViewResolver实际上就形同虚设。合理的处 理方式是,给予ResourceBundleView- Resolver或者XmlViewResolver这种能够通过返回null以表明无法找到相应视图的ViewResolver较高的优先级,而只是将 InternalResourceViewResolver(或者其他类似行为的ViewResolver)添加为最低优先级ViewResolver, 以作为DispatcherServlet的后备查找对象。

分享到:
评论

相关推荐

    springMVC-jar包

    5. **视图解析器(ViewResolver)**:负责根据返回的视图名查找对应的视图模板,如JSP、Thymeleaf或FreeMarker等。 6. **拦截器(Interceptor)**:SpringMVC允许定义拦截器,可以在请求处理前后执行一些通用操作,...

    springmvc课堂笔记

    - **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串,或使用`@RequestBody`注解将JSON字符串反序列化为Java对象。 ##### 6.5 RESTful支持 - **实现方式**:通过`@RequestMapping`指定HTTP方法和...

    跟开涛学SpringMVC(6.2)SpringMVC3强

    通过配置`ViewResolver`,我们可以指定如何根据返回的视图名来查找和渲染实际的视图。 8. **异常处理**: SpringMVC提供了优雅的异常处理机制,允许我们用注解定义全局或特定异常的处理器。`@ExceptionHandler`注解...

    从源码的角度来看SpringMVC.zip

    SpringMVC提供了多种视图解析器,如`InternalResourceViewResolver`用于JSP,`BeanNameViewResolver`则根据视图名称直接查找bean。 7. **Model**:模型数据,存储在ModelAndView中,用于传递到视图进行渲染。模型...

    SpringMVC案例所有源码

    7. **ViewResolver**:视图解析器,根据逻辑视图名查找实际视图资源。 8. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如权限检查、日志记录等。 9. **JSON和fastJson**:在标签中提到了这两个...

    看透SpringMVC源代码-分析与实践

    6. **ViewResolver**:视图解析器根据视图名称查找实际的视图(如JSP、FreeMarker等),并负责渲染结果。 7. **Interceptor**:拦截器可以预处理请求和后处理响应,例如权限校验、日志记录等,通过实现...

    SpringMVC流程分析

    SpringMVC是Java EE开发中非常流行的轻量级框架,它是Spring框架的一部分,用于构建Web应用。SpringMVC采用了模型-视图-控制器(MVC)设计模式,能够将Web层进行清晰的分层,极大地提高了应用开发的效率和扩展性。...

    《一头扎进SpringMvc》第四讲 源码

    6. **ViewResolver**:视图解析器负责根据ModelAndView中的视图名查找并实例化实际的视图。例如,JstlView或InternalResourceViewResolver。 7. **Model**:模型是数据的容器,用于在Controller和视图之间传递数据...

    手写SpringMVC 源码

    7. **ViewResolver**:视图解析器,根据给定的视图名查找实际的视图对象,如JSP、FreeMarker或Thymeleaf。 8. **Interceptor(拦截器)**:类似于AOP切面,可以在请求处理前、后进行额外的操作,如权限验证、日志...

    SpringMVC jar包

    6. **视图解析器(ViewResolver)**:SpringMVC中的组件,负责根据返回的视图名查找实际的视图资源,如JSP、Thymeleaf或FreeMarker模板。 7. ** ModelAndView**:它是一个容器,包含模型数据和视图信息。Controller...

    springmvc_ch2 源代码

    Spring MVC 会通过 `RequestMappingHandlerMapping` 查找匹配的处理方法,并通过 `RequestMappingHandlerAdapter` 进行调用。 此外,`HandlerExceptionResolver` 处理未被捕获的异常,提供了一种统一的错误处理机制...

    springmvc所需jar包

    - DispatcherServlet根据请求信息(如URL、HTTP方法)查找HandlerMapping。 - HandlerMapping找到对应的Handler(处理器,通常为Controller)。 - HandlerAdapter执行Handler并返回ModelAndView对象。 - ...

    SpringMVC +Mybatis+Spring+oscache配置文件

    2. **ViewResolver**:配置视图解析器,如`InternalResourceViewResolver`,用于将处理器返回的逻辑视图名转换为实际的视图资源。 3. **Controller**:定义控制器Bean,如`@Controller`注解的类,处理特定的HTTP请求...

    springmvc框架

    3. DispatcherServlet查找与请求URL匹配的HandlerMapping(处理器映射器),该组件负责将URL映射到具体的处理器(Controller)。 4. HandlerMapping找到对应的Controller后,会创建一个Controller实例,并调用其对应...

    spingmvc独立运行jar包

    6. **ViewResolver**:视图解析器根据ModelAndView中的视图名查找并返回具体的View实例,如JSP、Freemarker、Thymeleaf等。 7. **视图技术**:Spring MVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,用于...

    springmvc

    - DispatcherServlet 查找合适的 HandlerMapping(处理器映射器)以确定处理请求的 Controller 方法。 - HandlerAdapter(处理器适配器)执行 Controller 方法,传递请求参数和模型数据。 - Controller 处理业务...

    spring in action mvc 第四版 中文版

    - ViewResolver:视图解析器,根据逻辑视图名查找并返回实际的View对象。 - ModelAndView:用于在Controller和View之间传递数据。 2. **Controller编程** - @Controller:标记一个类作为Spring MVC的Controller...

    涵盖Java从基础到高级的知识点以及重要的求职面试题

    - **枚举**:最简洁有效的方式,防止反序列化创建新实例。 ##### 2. **适配器模式** 适配器模式使得一个接口不兼容的类可以一起工作。主要分为三类: - **类适配器**:通过继承源类和目标接口来实现。适用于源类...

    spring学习文档及源码笔记

    - Jackson 或 Gson:JSON 序列化与反序列化,用于 REST API。 - Spring Security:提供认证和授权功能。 9. **源码分析** - 学习 Spring MVC 的源码有助于理解其内部机制,例如 DispatcherServlet 如何分发请求...

Global site tag (gtag.js) - Google Analytics