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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值