【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实践