虽然我们在之前的示例中一直都是使用一个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的后备查找对象。
分享到:
相关推荐
5. **视图解析器(ViewResolver)**:负责根据返回的视图名查找对应的视图模板,如JSP、Thymeleaf或FreeMarker等。 6. **拦截器(Interceptor)**:SpringMVC允许定义拦截器,可以在请求处理前后执行一些通用操作,...
- **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串,或使用`@RequestBody`注解将JSON字符串反序列化为Java对象。 ##### 6.5 RESTful支持 - **实现方式**:通过`@RequestMapping`指定HTTP方法和...
通过配置`ViewResolver`,我们可以指定如何根据返回的视图名来查找和渲染实际的视图。 8. **异常处理**: SpringMVC提供了优雅的异常处理机制,允许我们用注解定义全局或特定异常的处理器。`@ExceptionHandler`注解...
SpringMVC提供了多种视图解析器,如`InternalResourceViewResolver`用于JSP,`BeanNameViewResolver`则根据视图名称直接查找bean。 7. **Model**:模型数据,存储在ModelAndView中,用于传递到视图进行渲染。模型...
7. **ViewResolver**:视图解析器,根据逻辑视图名查找实际视图资源。 8. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如权限检查、日志记录等。 9. **JSON和fastJson**:在标签中提到了这两个...
6. **ViewResolver**:视图解析器根据视图名称查找实际的视图(如JSP、FreeMarker等),并负责渲染结果。 7. **Interceptor**:拦截器可以预处理请求和后处理响应,例如权限校验、日志记录等,通过实现...
SpringMVC是Java EE开发中非常流行的轻量级框架,它是Spring框架的一部分,用于构建Web应用。SpringMVC采用了模型-视图-控制器(MVC)设计模式,能够将Web层进行清晰的分层,极大地提高了应用开发的效率和扩展性。...
6. **ViewResolver**:视图解析器负责根据ModelAndView中的视图名查找并实例化实际的视图。例如,JstlView或InternalResourceViewResolver。 7. **Model**:模型是数据的容器,用于在Controller和视图之间传递数据...
7. **ViewResolver**:视图解析器,根据给定的视图名查找实际的视图对象,如JSP、FreeMarker或Thymeleaf。 8. **Interceptor(拦截器)**:类似于AOP切面,可以在请求处理前、后进行额外的操作,如权限验证、日志...
6. **视图解析器(ViewResolver)**:SpringMVC中的组件,负责根据返回的视图名查找实际的视图资源,如JSP、Thymeleaf或FreeMarker模板。 7. ** ModelAndView**:它是一个容器,包含模型数据和视图信息。Controller...
Spring MVC 会通过 `RequestMappingHandlerMapping` 查找匹配的处理方法,并通过 `RequestMappingHandlerAdapter` 进行调用。 此外,`HandlerExceptionResolver` 处理未被捕获的异常,提供了一种统一的错误处理机制...
- DispatcherServlet根据请求信息(如URL、HTTP方法)查找HandlerMapping。 - HandlerMapping找到对应的Handler(处理器,通常为Controller)。 - HandlerAdapter执行Handler并返回ModelAndView对象。 - ...
2. **ViewResolver**:配置视图解析器,如`InternalResourceViewResolver`,用于将处理器返回的逻辑视图名转换为实际的视图资源。 3. **Controller**:定义控制器Bean,如`@Controller`注解的类,处理特定的HTTP请求...
3. DispatcherServlet查找与请求URL匹配的HandlerMapping(处理器映射器),该组件负责将URL映射到具体的处理器(Controller)。 4. HandlerMapping找到对应的Controller后,会创建一个Controller实例,并调用其对应...
6. **ViewResolver**:视图解析器根据ModelAndView中的视图名查找并返回具体的View实例,如JSP、Freemarker、Thymeleaf等。 7. **视图技术**:Spring MVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,用于...
- DispatcherServlet 查找合适的 HandlerMapping(处理器映射器)以确定处理请求的 Controller 方法。 - HandlerAdapter(处理器适配器)执行 Controller 方法,传递请求参数和模型数据。 - Controller 处理业务...
- ViewResolver:视图解析器,根据逻辑视图名查找并返回实际的View对象。 - ModelAndView:用于在Controller和View之间传递数据。 2. **Controller编程** - @Controller:标记一个类作为Spring MVC的Controller...
- **枚举**:最简洁有效的方式,防止反序列化创建新实例。 ##### 2. **适配器模式** 适配器模式使得一个接口不兼容的类可以一起工作。主要分为三类: - **类适配器**:通过继承源类和目标接口来实现。适用于源类...
- Jackson 或 Gson:JSON 序列化与反序列化,用于 REST API。 - Spring Security:提供认证和授权功能。 9. **源码分析** - 学习 Spring MVC 的源码有助于理解其内部机制,例如 DispatcherServlet 如何分发请求...