`

SpringMVC(七)_视图和视图解析器

阅读更多

         前言:本文主要介绍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来解析视图。



代码下载来源:http://super-wangj.iteye.com/blog/2388430

  • 大小: 23.9 KB
  • 大小: 7 KB
  • 大小: 259.3 KB
  • 大小: 3.2 KB
  • 大小: 194.8 KB
  • 大小: 6.7 KB
分享到:
评论

相关推荐

    SpringMVC Demo_java_springmvc_DEMO_

    2. **SpringMVC配置**:在项目中,会有一个或多个配置文件,如`DispatcherServlet-servlet.xml`,用于配置SpringMVC的核心组件,包括视图解析器、处理器映射器、拦截器等。这些配置使得SpringMVC能够识别和处理HTTP...

    SpringMVC PPT_springmvc_

    ViewResolver 是视图解析器,它的职责是根据 ModelAndView 中的视图名,找到具体的视图进行渲染。SpringMVC 支持多种视图技术,如 JSP、FreeMarker、Thymeleaf 等。 七、注解驱动开发 SpringMVC 提供了丰富的注解,...

    springmvc4_springmvc_mainlyyb8_

    `InternalResourceViewResolver` 是常用的视图解析器,它可以配置前缀和后缀来确定视图的实际路径。 7. **Data Binding 和 Validation** Spring MVC 支持数据绑定,可以直接将 HTTP 请求参数绑定到控制器方法的...

    Spring MVC--5.视图和视图解析器

    在Spring MVC框架中,视图和视图解析器是实现MVC模式中“V”(View)部分的关键组件。它们负责将处理完的数据转化为用户可以理解的格式,并展示在浏览器上。视图解析器则是连接控制器与视图的桥梁,它负责根据返回的...

    SpringMVC-5 视图和视图解析器

    在Spring MVC框架中,视图和视图解析器是核心组件,它们负责处理控制器返回的数据并将其呈现给用户。本文将深入探讨视图与视图解析器的工作原理、常用实现及自定义视图的实现方法,同时也会讲解重定向操作。 1. **...

    mc.rar_springMVC mybatis_springmvc

    4. **视图解析器(View Resolver)**:根据返回的模型数据和逻辑视图名,确定实际的视图资源。 5. **拦截器(Interceptor)**:可以定义一系列预处理和后处理操作,增强系统的功能和安全性。 MyBatis是一个轻量级的...

    demo_SpringMVC.rar_+SpringMVC demo_DEMO_spring mvc_spring mvc de

    2. **Controller**: 控制器处理来自客户端的请求,调用业务逻辑并准备 Model 数据,然后将 Model 和视图名传递给视图解析器。 3. **@RequestMapping**: 注解用于映射 HTTP 请求到特定的 Controller 方法,可以根据 ...

    传智播客_SpringMVC教程_资料和源码

    在传智播客的教程中,你可能会学习到如何创建SpringMVC项目,配置Web.xml和Spring的配置文件,编写Controller,处理HTTP请求,设置视图解析器,以及如何利用注解进行方法映射和参数绑定。此外,源码分析部分可能涉及...

    SpringMVC自定义多视图

    在实际开发中,我们还可以结合使用Spring的`@ResponseBody`和`@RestController`注解,直接将处理器方法的返回值序列化为JSON或其他格式,而无需通过视图解析器。这种方式特别适用于RESTful API的实现。 在Spring...

    springMvc_SpringMvc入门_

    3. **配置 Spring MVC**:在 `springMvc-servlet.xml` 配置文件中,我们需要定义视图解析器(如 InternalResourceViewResolver),处理器映射器(HandlerMapping),处理器适配器(HandlerAdapter)等组件。...

    SpringMVC及视图解析器

    在 SpringMVC 中,需要在 web.xml 文件中声明 SpringMVC 框架,并在 springMVC 配置文件中添加组件扫描和视图解析器的配置。 五、结论 SpringMVC 及视图解析器是 Spring 框架中的一部分,提供了一种灵活的方式来...

    springmvc_day02

    在“springmvc_day02”的主题下,我们将深入探讨视图解析器(View Resolver)这一核心组件,它在Spring MVC中扮演着至关重要的角色,简化了控制器(Controller)中的视图逻辑。 视图解析器的主要任务是将逻辑视图名...

    SpringMVC3.0_Demo

    通过这两个目录中的文件,我们可以学习到如何配置SpringMVC 3.0的拦截器、视图解析器、控制器等组件,以及如何利用JPA进行数据库操作,实现CRUD(创建、读取、更新、删除)功能。此外,还可以看到如何将两者结合,...

    01_springmvc基础_2

    6. **ViewResolver**:视图解析器负责根据模型数据和逻辑视图名(返回自控制器的方法)来确定实际的视图。常见的视图解析器有 InternalResourceViewResolver,它可以处理 JSP 视图。 7. **视图技术**:Spring MVC ...

    spring_mvc_ajax.zip_SpringMVC ajax_SpringMVC+ajax_spring ajax_sp

    SpringMVC提供了丰富的功能,包括依赖注入、数据绑定、异常处理以及视图解析等,使得开发者可以更专注于业务逻辑,而不是基础设施的实现。 Ajax,即Asynchronous JavaScript and XML,是一种在无需重新加载整个网页...

    springMVC12.rar_springMvc 注册_springmvc

    6. **配置(Configuration)**:Spring MVC 需要配置文件(如 `spring-servlet.xml` 或者使用 Java Config),来定义视图解析器、处理器映射器、数据源、事务管理器等组件。 7. **验证(Validation)**:为了确保用户...

    springmvc4_maven_mybatis3

    同时,还需要配置SpringMVC的servlet-context.xml,设置视图解析器、扫描控制器等。 4. **配置MyBatis**:创建mybatis-config.xml文件,配置数据源、事务管理器和SqlSessionFactory。在Spring的配置文件中,注入...

    01_springmvc基础_3

    - 视图解析器(ViewResolver)负责根据给定的逻辑视图名查找实际视图。 - 常见的视图解析器有:JstlView、InternalResourceViewResolver 等。 7. **拦截器(Interceptor)** - 拦截器允许在请求处理前后执行...

    Maven2.0.11_SpringMVC2.5_Tiles2.0.5

    Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构模式,使得开发者能分离业务逻辑和用户界面。Spring MVC2.5版本增强了对注解的支持,简化了配置,提高了可测试性,同时提供了更好的与其他...

    springMVC 多视图配置(Jsp Freemarket Json)实例

    在这个"springMVC 多视图配置(Jsp Freemarket Json)实例"中,我们将探讨如何在 SpringMVC 中设置多种视图解析器来支持 Jsp、FreeMarker 和 Json 格式的响应。 **1. 视图解析器 (View Resolver)** 在 SpringMVC ...

Global site tag (gtag.js) - Google Analytics