Spring MVC 之使用 Freemarker

栏目: Java · 发布时间: 7年前

内容简介:Spring MVC 之使用 Freemarker

Freemarker 是使用比较广泛的模板,本文介绍如何使用 Spring 集成 Freemarker,并提供完整实例进行演示。代码结构如下:

代码结构

Spring MVC 之使用 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 MVC 之使用 Freemarker

小结

本文介绍如何将 Spring 和 Freemarker 进行集成。本文相关的配置,在之前写的这几篇文章中有更详细的介绍:

此外,之前的这两篇文章讲解了 Spring 与其它几个主流模板的集成:

谈谈 IT的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/spring-freemarker-integration/

Spring MVC 之使用 Freemarker

欢迎关注官方微信公众号获取最新原创文章


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解C++11

深入理解C++11

Michael Wong、IBM XL编译器中国开发团队 / 机械工业出版社 / 2013-6 / 69.00元

《深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。 《深入理解C++11:C++11新特性解析与应用》一共8章:第1章从设计......一起来看看 《深入理解C++11》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具