【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>
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"/>