内容简介:Spring MVC 之使用 Freemarker
Freemarker 是使用比较广泛的模板,本文介绍如何使用 Spring 集成 Freemarker,并提供完整实例进行演示。代码结构如下:
代码结构
定义 Freemarker 视图解析器
和其它 web 应用一样,我们可以在 WebMvcConfigurerAdapter 定义 ViewResolver(视图解析器),这里通过子类 WebConfig 来实现:
@Configuration @EnableWebMvc @ComponentScan("tantanit.web") public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { super.addResourceHandlers(registry); } @Bean public ViewResolver viewResolver() { FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setCache(true); resolver.setPrefix("/WEB-INF/templates/"); resolver.setSuffix(".ftl"); resolver.setContentType("text/html; charset=UTF-8"); return resolver; } @Bean public FreeMarkerConfigurer getFreemarkerConfig() throws IOException, TemplateException { FreeMarkerConfigurer result = new FreeMarkerConfigurer(); result.setTemplateLoaderPaths("/"); return result; } }
其中,viewResolver 定义了一个 FreeMarkerViewResolver 类型的解析器,并且配置模板路径、后缀,以及页面编码。同时,必须定义一个 FreeMarkerConfigurer,至少指定加载路径,由于 WebConfig 类加了 @Configuration 注解,这个 FreeMarkerConfigurer 将会被 FreeMarkerView 使用以下代码从应用上下文中自动查找。
//FreeMarkerView 类中相关代码 protected FreeMarkerConfig autodetectConfiguration() throws BeansException { try { return BeanFactoryUtils.beanOfTypeIncludingAncestors( getApplicationContext(), FreeMarkerConfig.class, true, false); } catch (NoSuchBeanDefinitionException ex) { throw new ApplicationContextException( "Must define a single FreeMarkerConfig bean in this web application context" + "(may be inherited): FreeMarkerConfigurer is the usual implementation." + "This bean may be given any name.", ex); } }
要使 WebConfig 生效,还需要实现 AbstractAnnotationConfigDispatcherServletInitializer,以初始化 DispatcherServlet,代码如下:
public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
DispatcherServlet 是 Spring MVC 的核心,它负责接收 request,并且决定 request 将转给哪个组件。您可以在我写的这篇文章 《Spring MVC 的基础配置》 中了解更多内容。
由于 RootConfig 是处理非 web 配置的,在这里,我们在 RootConfig 中排除 web 目录。
@Configuration @ComponentScan(basePackages={"tantanit"}, excludeFilters={ @Filter(type=FilterType.CUSTOM, value=WebPackage.class) }) public class RootConfig { public static class WebPackage extends RegexPatternTypeFilter { public WebPackage() { super(Pattern.compile("tantanit\\.web")); } } }
到这里,Spring 与 Freemarker 的配置就完成了,下面对页面进行渲染。
渲染页面
主页的 controller 如下:
@Controller public class HomeController { @RequestMapping(value = "/",method = GET) public String home(Model model) { return "home"; } }
home.ftl 如下:
<h1>关于谈谈 IT</h1> <p>谈谈 IT,是一个专注于计算机技术、互联网、搜索引擎、SEO、优秀软件、网站架设与运营的原创 IT 科技博客。</p> <p>欢迎访问<a href="http://tantanit.com">tantanit.com</a></p>
渲染后效果如下:
小结
本文介绍如何将 Spring 和 Freemarker 进行集成。本文相关的配置,在之前写的这几篇文章中有更详细的介绍:
此外,之前的这两篇文章讲解了 Spring 与其它几个主流模板的集成:
谈谈 IT的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/spring-freemarker-integration/
欢迎关注官方微信公众号获取最新原创文章
以上所述就是小编给大家介绍的《Spring MVC 之使用 Freemarker》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript & jQuery
David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99
You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!