Cris 学 SpringMVC(5):视图和视图解析器

版权声明:转载请注明出处~ 摸摸博主狗头 https://blog.csdn.net/cris_zz/article/details/79921965
  • 请求处理方法执行完成后,最终返回一个 ModelAndView
    对象。对于那些返回 String,View 或 ModeMap 等类型的
    处理方法,Spring MVC 也会在内部将它们装配成一个
    ModelAndView 对象,它包含了逻辑名和模型对象的视图
  • Spring MVC 借助视图解析器(ViewResolver)得到最终
    的视图对象(View),最终的视图可以是 JSP ,也可能是
    Excel、JFreeChart 等各种表现形式的视图

  • 对于最终究竟采取何种视图对象对模型数据进行渲染,处
    理器并不关心,处理器工作重点聚焦在生产模型数据的工
    作上,从而实现 MVC 的充分解耦

mark

视图
  • 视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客

  • 为了实现视图模型和具体实现技术的解耦,Spring 在
    org.springframework.web.servlet 包中定义了一个高度抽象的 View
    接口

  • 视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们
    不会有线程安全的问题

mark

mark

视图解析器

  • SpringMVC 为逻辑视图名的解析提供了不同的策略,可
    以在 Spring WEB 上下文中配置一种或多种解析策略,并
    指定他们之间的先后顺序。每一种映射策略对应一个具体
    的视图解析器实现类

  • 视图解析器的作用比较单一:将逻辑视图解析为一个具体
    的视图对象。

  • 所有的视图解析器都必须实现 ViewResolver 接口

mark

InternalResourceViewResolver
  • JSP 是最常见的视图技术,可以使用
    InternalResourceViewResolver 作为视图解析器

mark

  • 若项目中使用了 JSTL,则 SpringMVC 会自动把视图由
    InternalResourceView 转为 JstlView,并且若使用 JSTL 的 fmt 标签则需要在 SpringMVC 的配置文件中配置国际
    化资源文件
  • 示例代码:
    1. 导入jstl标签库

mark

  1. src目录下新建三个国际化文件

mark

  1. 代码
- springMVC配置文件


    <!-- 配置国际化资源文件 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="i18n"></property>
    </bean>

- success.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
...
...

<fmt:message key="i18n.name"></fmt:message>
    <br><br>
    <fmt:message key="i18n.password"></fmt:message>
    <br><br>
  • 使用火狐浏览器进行国际化的测试

mark

mark

若希望直接响应通过 SpringMVC 渲染的页面,可以在springMVC的配置文件中使用 mvc:viewcontroller标签实现
<!-- 配置直接转发的页面,可以直接通过url访问,不需要经过 controller 的目标方法,但是必须配置mvc:annotation-driven 标签 -->
    <mvc:view-controller path="/success" view-name="success"/>
    <!-- 在实际开发中,还需要配置mvc:annotation-driven 标签 -->
    <mvc:annotation-driven></mvc:annotation-driven>

测试图:

mark

自定义视图对象
  • 可以自己实现View的接口,然后调用springMVC的特殊的视图解析器进行解析,可以整合其他资源的视图(如excel)
  • 示例代码
- springMVC 的配置文件

<!-- 配置视图解析器:即如何把 handler 方法返回值解析为实际的物理视图,order属性值为int类型最大值,即默认最后进行视图解析的
        视图解析器
     -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <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>

- 自定义视图类

@Component
public class MyView implements View{

    @Override
    public String getContentType() {
        return "text/html";
    }

    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest arg1, HttpServletResponse arg2) throws Exception {
        arg2.getWriter().write("hello,this is my view :"+new Date());
    }
}

- 测试

    @RequestMapping("testMyView")
    public String testMyView() {
        System.out.println("testMyView");
        return "myView";
    }

测试图:

mark

  • 如何使用 springMVC 实现 excel 的上传和下载

猜你喜欢

转载自blog.csdn.net/cris_zz/article/details/79921965