/* * Copyright (C) 2008-2017, Juick * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package com.juick.www.configuration; import com.mitchellbosecke.pebble.PebbleEngine; import com.mitchellbosecke.pebble.extension.FormatterExtension; import com.mitchellbosecke.pebble.loader.Loader; import com.mitchellbosecke.pebble.loader.ServletLoader; import com.mitchellbosecke.pebble.spring4.PebbleViewResolver; import com.mitchellbosecke.pebble.spring4.extension.SpringExtension; import org.apache.commons.codec.CharEncoding; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.http.CacheControl; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.servlet.resource.PathResourceResolver; import javax.inject.Inject; import javax.servlet.ServletContext; import java.util.concurrent.TimeUnit; /** * Created by vitalyster on 28.06.2016. */ @Configuration @ComponentScan(basePackages = {"com.juick.www.controllers"}) @PropertySource("classpath:juick.conf") public class WwwServletConfiguration extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.setOrder(0); registry.addResourceHandler( "/scripts*.js*", "/style*.css*", "/*.png", "/favicon.ico") .addResourceLocations("classpath:/") .setCacheControl(CacheControl.maxAge(30, TimeUnit.DAYS).mustRevalidate().cachePublic()) .resourceChain(true) .addResolver(new PathResourceResolver()); registry.addResourceHandler("/static/**") .addResourceLocations("/static/") .setCacheControl(CacheControl.maxAge(30, TimeUnit.DAYS).mustRevalidate().cachePublic()); } @Override public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping result = super.requestMappingHandlerMapping(); result.setOrder(1); return result; } @Inject private ServletContext servletContext; @Bean public Loader templateLoader(){ return new ServletLoader(servletContext); } @Bean public SpringExtension springExtension() { return new SpringExtension(); } @Bean public PebbleEngine pebbleEngine() { return new PebbleEngine.Builder() .loader(this.templateLoader()) .extension(springExtension()) .extension(new FormatterExtension()) .strictVariables(true) .build(); } @Bean public ViewResolver viewResolver() { PebbleViewResolver viewResolver = new PebbleViewResolver(); viewResolver.setPrefix("/WEB-INF/"); viewResolver.setSuffix(".html"); viewResolver.setPebbleEngine(pebbleEngine()); viewResolver.setCharacterEncoding(CharEncoding.UTF_8); return viewResolver; } }