1. ViewResolver
spring内置的ViewResolver
实现.
ViewResolver | 视图技术 | 说明 |
---|---|---|
InternalResourceViewResolver |
JSP | 将视图解析为内部资源文件, 一般为JSP |
2. 视图配置
2.1 JSP视图配置
2.1.1基础配置
- java配置:
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/view/");
vr.setSuffix(".jsp");
return vr;
}
- xml配置:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--指定视图文件所在位置-->
<!--前缀,指视图文件定义在view文件夹下-->
<property name="prefix" value="/WEB-INF/view/"/>
<!--视图文件名的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
注意:此时DispatcherServlet
的url-pattern
配置为/
, 否则可能无法访问jsp文件.
2.1.2使用JSTL标签
使用JSTL标签, 则指定InternalResourceViewResolver
的viewClass
属性为org.springframework.web.servlet.view.JstlView
.
即添加如下配置:
xml:配置
<property name="viewClass" class="org.springframework.web.servlet.view.JstlView"/>
java配置:
setViewClass("org.springframework.web.servlet.view.JstlView");
注:JSTL全称为JavaServer Pages Standard Tag Library.
2.1.3使用spring标签库
- 在jsp页面引入spring表单标签库
<%@ uri="http://www.springframework.org/tags/form" prefix="form"%>
标签示例:
<form:input path="user.name"/>
- 在jsp页面使用spring通用标签库
<%@ uri="http://www.springframework.org/tags" prefix="spring"%>
标签示例:
<spring:bind path=""/>
2.2 Apache Tiles视图配置
它的作用是定义视图布局, 即提供公共的页面部分. 现用Apache Tiles3. 了解.
3. 配置Thymeleaf视图
注:Thymeleaf与spring的集成由Thymeleaf负责, 所以要引入相应的依赖.
3.1 引入依赖
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
3.2 配置
- xml配置:
<!-- 视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
</bean>
<!-- 模板引擎 -->
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<!-- 模板解析器 -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/thymeleaf/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
</bean>
4. 配置Freemarker视图
4.1 引入依赖
- freemarker依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
- spring-context-support依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
注:如果没有这个依赖, 会提示org.springframework.ui.freemarker.FreeMarkerCofigurationFactory
找不到异常.
4.2 配置
<!-- 配置freeMarker的模板路径 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/" /><!--注意这儿不要添加classpath-->
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="locale">zh_CN</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
<!-- 配置freeMarker视图解析器 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="requestContextAttribute" value="request" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="order" value="0"/>
</bean>
5. spring提供了ViewResolver
ViewResolver | 说明 |
---|---|
AbstractCachingViewResolver |
它的子类能缓存它们解析的视图实例, 这提高了性能, 可通过设置cache属性为false来禁用缓存, 也可以通过removeFromCache()方法来刷新视图. |
BeanNameViewResolver |
将视图解析为Spring容器中的bean(bean的id与视图名相同) |
ContentNegotiatingViewResolver |
根据客户端需要的content type来解析视图, 委托给另外一个能生成对应类型视图的解析器生成视图 |
FreeMarkerViewResolver |
使用FreeMarker生成视图 |
InternalResourceViewResolver |
将视图解析为web应用的内部资源, 一般为JSP |
ResourceBundleViewResolver |
将视图解析为资源bundle(一般为属性文件) |
TilesViewResolver |
解析Apache Tile视图 |
UrlBaseViewResolver |
根据视图名称解析视图 |
XmlViewResolver |
将视图解析为特定xml文件中的bean定义 |
XsltViewResolver |
解析XSLT视图 |
网友评论