0
点赞
收藏
分享

微信扫一扫

SpringMVC中支持的那些视图解析技术

【1】JSP and JSTL

Spring框架有一个内置的集成,用于将SpringMVC与JSP和JSTL结合使用。使用JSP开发时,通常会声明一个​​InternalResourceViewResolver​​ bean。

​InternalResourceViewResolver​​​可用于分派到任何Servlet资源,但特别是JSP。作为最佳实践,我们强烈建议您将JSP文件放在​​“WEB-INF”​​目录下的目录中,这样客户端就不会直接访问。

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

如果使用相对路径​​<property name="prefix" value="WEB-INF/jsp/" />​​,则返回的视图页面会拼接上当前路径很可能找不到页面哦。

当使用JSP标准标记库(JSTL)时,必须使用一个特殊的视图类​​JstlView​​​,因为​​JSTL​​​需要做一些准备,然后​​I18N​​特性才能工作。

【2】Thymeleaf

Thymeleaf是一个现代的服务器端Java模板引擎,它强调可以通过双击在浏览器中预览的自然HTML模板,这对于独立处理UI模板(例如,由设计师)非常有帮助,而无需运行服务器。如果您想替换JSP,Thymeleaf提供了最广泛的特性集之一,使这种转换更容易。

<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8" />
</bean>
</property>
</bean>
</property>
</bean>

pom依赖如下:

<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>

<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>

【3】FreeMarker

Apache FreeMarker是一个模板引擎,用于生成从HTML到电子邮件等任何类型的文本输出。Spring框架内置了使用SpringMVC和FreeMarker模板的集成。

① 视图配置

以下示例显示如何将FreeMarker配置为视图技术:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker();
}

// Configure FreeMarker...

@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("/WEB-INF/freemarker");
return configurer;
}
}

以下示例显示了如何在XML中配置相同的内容:

<mvc:annotation-driven/>

<mvc:view-resolvers>
<mvc:freemarker/>
</mvc:view-resolvers>

<!-- Configure FreeMarker... -->
<mvc:freemarker-configurer>
<mvc:template-loader-path location="/WEB-INF/freemarker"/>
</mvc:freemarker-configurer>

或者,您也可以声明​​FreeMarkerConfigurer​​ bean以完全控制所有属性,如下例所示:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

您的模板需要存储在前面示例中所示的​​FreeMarkerConfigure​​​指定的目录中。根据前面的配置,如果控制器返回一个视图名​​welcome​​​,解析器将查找​​/WEB-INF/freemarker/welcome.ftl​​模板。

② FreeMarker Configuration

通过在​​FreeMarkerConfigurer​​​ bean上设置适当的bean属性,可以将FreeMarker“​​Settings​​​”和“​​SharedVariables​​​”直接传递给​​FreeMarker Configuration​​​ 对象(由Spring管理)。​​freemarkerSettings​​​ 属性需要​​java.util.Properties​​​对象,而​​freemarkerVariables​​​属性需要​​java.util.Map​​。以下示例显示如何使用FreeMarker配置程序:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape"/>
</map>
</property>
</bean>

<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>

参考博文:
​SpringMVC中使用FreeMarker实践


举报

相关推荐

0 条评论