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

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


以上所述就是小编给大家介绍的《Spring MVC 之使用 Freemarker》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Text Processing in Python

Text Processing in Python

David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99

Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具