《spring 实战 第四版》第六章 渲染web视图

文章目录

  • 电子书以及项目完整源代码
  • 视图解析
    • ViewResolver 和 View
    • 视图解析器
    • Jsp 视图
      • jsp 视图解析器的配置
      • spring 的JSP库
      • Spring 的通用标签库
    • 【这部分尚未完成】使用Apache Tiles视图定义布局
      • 导入相关jar包
      • 配置Tiles视图解析器
      • 【TODO】定义Tiles
    • 未完待续
    • Thymeleaf
      • 配置Thymeleaf视图解析器
      • 定义Thymeleaf模板

电子书以及项目完整源代码

请戳我

视图解析

ViewResolver 和 View

  • 视图解析器ViewResolver负责处理视图名与实际视图之间的映射关系。 当给resolveViewName()方法传入一个视图名和Locale对象时,它会返回一个View实例.
public interface ViewResolver {
    View resolveViewName(String var1, Locale var2) throws Exception;
}
  • 视图接口View负责准备请求,并将请求的渲染交给某种具体的视图技术实现。接受模型以及Servlet的request和response对象,并将输出结果渲染到response中。
public interface View {
    String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus";
    String PATH_VARIABLES = View.class.getName() + ".pathVariables";
    String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType";

    String getContentType();

    void render(Map<String, ?> var1, HttpServletRequest var2, HttpServletResponse var3) throws Exception;
}

视图解析器

  • BeanNameViewResolver
    将视图解析为Spring应用上下文中的bean,其中
    bean的ID与视图的名字相同
  • ContentNegotiatingViewResolver
    通过考虑客户端需要的内容类型来解析视图,
    委托给另外一个能够产生对应内容类型的视图
    解析器
  • FreeMarkerViewResolver 将视图解析为FreeMarker模板
  • InternalResourceViewResolver
    将视图解析为Web应用的内部资源(一般为
    JSP)
  • JasperReportsViewResolver 将视图解析为JasperReports定义
  • ResourceBundleViewResolver 将视图解析为资源bundle(一般为属性文件)
  • TilesViewResolver
    将视图解析为Apache Tile定义,其中tile ID与视
    图名称相同。注意有两个不同的TilesViewResolver实现,分别对应于Tiles 2.0和
    Tiles 3.0
  • UrlBasedViewResolver
    直接根据视图的名称解析视图,视图的名称会
    匹配一个物理视图的定义
  • VelocityLayoutViewResolver
    将视图解析为Velocity布局,从不同的Velocity模
    板中组合页面
  • VelocityViewResolver 将视图解析为Velocity模板
  • XmlViewResolver
    将视图解析为特定XML文件中的bean定义。类
    似于BeanName-ViewResolver
  • XsltViewResolver 将视图解析为XSLT转换后的结果

Jsp 视图

两种方式

  • 使用JSP标准标签库
    (JavaServer Pages Standard Tag Library,JSTL),InternalResourceViewResolver能够将视图名解析为
    JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴
    露给JSTL的格式化(formatting)和信息(message)标签。
  • 使用spring 提供的两个JSP标签库,一个用于表单到模型的绑定,另一
    个提供了通用的工具类特性。

jsp 视图解析器的配置

InternalResourceViewResolver 主要是采用拼接的方式,将视图名称拼接到配置的字符串,即添加前缀和后缀,从而确认Web应用中视图资源的物理路径。

  • java 配置方式启用mvc 和 定制配置
@Configuration
@EnableWebMvc //启用Spring MVC
@ComponentScan("com.zexing.spittr.web") //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {

  @Bean
  public ViewResolver viewResolver() {    //配置视图解析器
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
  }
  
  //```
  
  }
  • xml 配置方式启用mvc 和 定制配置

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

  
  <mvc:annotation-driven /> 

  <context:component-scan base-package="com.zexing.spittr" />

  <beans:bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
  beans:bean>
  
beans:beans>

以上配置解析的是InternalResourceView视图


  • 配置 Jstl 视图

JSTL的格式化标签需要一个Locale对象,以便于恰当地格式化地域
相关的值,如日期和货币。信息标签可以借助Spring的信息资源和
Locale,从而选择适当的信息渲染到HTML之中。通过解析
JstlView,JSTL能够获得Locale对象以及Spring中配置的信息资
源。

设置它的viewClass属性,即加上以下代码

resolver.setViewClass(JstlView.class);

而 xml 加上

 <beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />

spring 的JSP库

  1. 绑定模型数据的表单标签

在JSP页面声明标签库

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>

  • 渲染成一个HTML 标签,其中type属性设置
    为checkbox

  • 渲染成多个HTML 标签,其中type属性设置
    为checkbox
  • 在一个HTML 中渲染输入域的错误
  • 渲染成一个HTML
    标签,并为其内部标签暴露绑定路
    径,用于数据绑定
  • 渲染成一个HTML 标签,其中type属性设置为hidden
  • 渲染成一个HTML 标签,其中type属性设置为text
  • 渲染成一个HTML
  • 渲染成一个HTML
  • 按照绑定的集合、数组或Map,渲染成一个HTML

  • 渲染成一个HTML 标签,其中type属性设置
    为password
  • 渲染成一个HTML 标签,其中type属性设置为radio
  • 渲染为一个HTML