前言:本文主要介绍SpringMVC如何解析视图,以及通过自定义视图解析器实现视图解析。
1. SpringMVC解析视图的流程
分析上述流程,可以总结出以下三个要点:
- 请求处理方法执行完成后,最终返回一个 ModelAndView对象。对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象,它包含了逻辑名和模型对象的视图;
- Spring MVC借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP ,也可能是Excel、JFreeChart 等各种表现形式的视图;
- 对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦;
2. 简述视图
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。为了实现视图模型和具体实现技术的解耦,Spring在org.springframework.web.servlet 包中定义了一个高度抽象的 View接口:
视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题,常用的视图用:
3. 简述视图解析器
SpringMVC 为逻辑视图名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象,所有的视图解析器都必须实现 ViewResolver 接口:
常见的视图解析器实现类:
对于上述视图解析器实现类的几点说明:
- 程序员可以选择一种视图解析器或混用多种视图解析器;
- 每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高;
- SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常。
4. 基本配置
下面输出相关demo,实现转发、重定向、组合使用视图解析器。先看SpringMVC配置文件中的相关配置:
<!-- 定义视图解析器(此处针对Jsp) --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 所有URI的前缀. --> <property name="prefix" value="/views/"></property> <!-- 所有URI的后缀. --> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置视图 BeanNameViewResolver 解析器: 使用视图的名字来解析视图 --> <!-- 通过 order 属性来定义视图解析器的优先级, order 值越小优先级越高 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></property> </bean>
5. 测试转发
一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理。
前台代码:
<a href="handleView/testViewAndViewResolver.action">测试转发</a>
后台代码:
@RequestMapping("/handleView/testViewAndViewResolver.action") public String testViewAndViewResolver(){ System.out.println("【Forward】测试转发"); return SUCCESS; }
6. 测试重定向
redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作。
前台代码:
<a href="handleView/testRedirect.action">测试重定向</a>
后台代码:
@RequestMapping("/handleView/testRedirect.action") public String testRedirect(){ System.out.println("【Redirect】测试重定向"); return "redirect:/login.jsp"; }
6、组合使用视图解析器
如上述SpringMVC配置文件中的配置,将InternalResourceViewResolver视图解析器和BeanNameViewResolver视图解析器配合使用,视图解析器默认优先级为Integer.MAX_VALUE,所以在上述配置中,BeanNameViewResolver的优先级更高,只有按名称找不到视图后,才会找JSP。
自定义View:
@Component 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()); } }
前台代码:
<a href="handleView/testView.action">测试配置视图解析器</a>
后台控制器代码:
@RequestMapping("/handleView/testView.action") public String testView(){ System.out.println("【BeanNameViewResolver】测试配置视图解析器"); return "helloView"; }
测试结果如下图,可以发现,当BeanNameViewResolver可以按名称找到视图View时,就用BeanNameViewResolver来解析视图。
相关推荐
2. **SpringMVC配置**:在项目中,会有一个或多个配置文件,如`DispatcherServlet-servlet.xml`,用于配置SpringMVC的核心组件,包括视图解析器、处理器映射器、拦截器等。这些配置使得SpringMVC能够识别和处理HTTP...
ViewResolver 是视图解析器,它的职责是根据 ModelAndView 中的视图名,找到具体的视图进行渲染。SpringMVC 支持多种视图技术,如 JSP、FreeMarker、Thymeleaf 等。 七、注解驱动开发 SpringMVC 提供了丰富的注解,...
`InternalResourceViewResolver` 是常用的视图解析器,它可以配置前缀和后缀来确定视图的实际路径。 7. **Data Binding 和 Validation** Spring MVC 支持数据绑定,可以直接将 HTTP 请求参数绑定到控制器方法的...
在Spring MVC框架中,视图和视图解析器是实现MVC模式中“V”(View)部分的关键组件。它们负责将处理完的数据转化为用户可以理解的格式,并展示在浏览器上。视图解析器则是连接控制器与视图的桥梁,它负责根据返回的...
在Spring MVC框架中,视图和视图解析器是核心组件,它们负责处理控制器返回的数据并将其呈现给用户。本文将深入探讨视图与视图解析器的工作原理、常用实现及自定义视图的实现方法,同时也会讲解重定向操作。 1. **...
4. **视图解析器(View Resolver)**:根据返回的模型数据和逻辑视图名,确定实际的视图资源。 5. **拦截器(Interceptor)**:可以定义一系列预处理和后处理操作,增强系统的功能和安全性。 MyBatis是一个轻量级的...
2. **Controller**: 控制器处理来自客户端的请求,调用业务逻辑并准备 Model 数据,然后将 Model 和视图名传递给视图解析器。 3. **@RequestMapping**: 注解用于映射 HTTP 请求到特定的 Controller 方法,可以根据 ...
在传智播客的教程中,你可能会学习到如何创建SpringMVC项目,配置Web.xml和Spring的配置文件,编写Controller,处理HTTP请求,设置视图解析器,以及如何利用注解进行方法映射和参数绑定。此外,源码分析部分可能涉及...
在实际开发中,我们还可以结合使用Spring的`@ResponseBody`和`@RestController`注解,直接将处理器方法的返回值序列化为JSON或其他格式,而无需通过视图解析器。这种方式特别适用于RESTful API的实现。 在Spring...
3. **配置 Spring MVC**:在 `springMvc-servlet.xml` 配置文件中,我们需要定义视图解析器(如 InternalResourceViewResolver),处理器映射器(HandlerMapping),处理器适配器(HandlerAdapter)等组件。...
在 SpringMVC 中,需要在 web.xml 文件中声明 SpringMVC 框架,并在 springMVC 配置文件中添加组件扫描和视图解析器的配置。 五、结论 SpringMVC 及视图解析器是 Spring 框架中的一部分,提供了一种灵活的方式来...
在“springmvc_day02”的主题下,我们将深入探讨视图解析器(View Resolver)这一核心组件,它在Spring MVC中扮演着至关重要的角色,简化了控制器(Controller)中的视图逻辑。 视图解析器的主要任务是将逻辑视图名...
通过这两个目录中的文件,我们可以学习到如何配置SpringMVC 3.0的拦截器、视图解析器、控制器等组件,以及如何利用JPA进行数据库操作,实现CRUD(创建、读取、更新、删除)功能。此外,还可以看到如何将两者结合,...
6. **ViewResolver**:视图解析器负责根据模型数据和逻辑视图名(返回自控制器的方法)来确定实际的视图。常见的视图解析器有 InternalResourceViewResolver,它可以处理 JSP 视图。 7. **视图技术**:Spring MVC ...
SpringMVC提供了丰富的功能,包括依赖注入、数据绑定、异常处理以及视图解析等,使得开发者可以更专注于业务逻辑,而不是基础设施的实现。 Ajax,即Asynchronous JavaScript and XML,是一种在无需重新加载整个网页...
6. **配置(Configuration)**:Spring MVC 需要配置文件(如 `spring-servlet.xml` 或者使用 Java Config),来定义视图解析器、处理器映射器、数据源、事务管理器等组件。 7. **验证(Validation)**:为了确保用户...
同时,还需要配置SpringMVC的servlet-context.xml,设置视图解析器、扫描控制器等。 4. **配置MyBatis**:创建mybatis-config.xml文件,配置数据源、事务管理器和SqlSessionFactory。在Spring的配置文件中,注入...
- 视图解析器(ViewResolver)负责根据给定的逻辑视图名查找实际视图。 - 常见的视图解析器有:JstlView、InternalResourceViewResolver 等。 7. **拦截器(Interceptor)** - 拦截器允许在请求处理前后执行...
Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构模式,使得开发者能分离业务逻辑和用户界面。Spring MVC2.5版本增强了对注解的支持,简化了配置,提高了可测试性,同时提供了更好的与其他...
在这个"springMVC 多视图配置(Jsp Freemarket Json)实例"中,我们将探讨如何在 SpringMVC 中设置多种视图解析器来支持 Jsp、FreeMarker 和 Json 格式的响应。 **1. 视图解析器 (View Resolver)** 在 SpringMVC ...