X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeproxy%2FApplication.java;h=6a3d7da06f5544605e081c0443f1693ac5112e68;hb=53d411dcd6f52a22ec4513a9d43b3b5f737655a1;hp=c0293cd1cc0180f19760a46072fabe4725cb5a54;hpb=97326cdf207133f9aba1a73c8a755aca7f1bf0da;p=maven-thymeleaf-skin diff --git a/src/main/java/de/juplo/thymeproxy/Application.java b/src/main/java/de/juplo/thymeproxy/Application.java index c0293cd..6a3d7da 100644 --- a/src/main/java/de/juplo/thymeproxy/Application.java +++ b/src/main/java/de/juplo/thymeproxy/Application.java @@ -1,40 +1,57 @@ package de.juplo.thymeproxy; -import java.util.Collections; +import de.juplo.thymeleaf.JuploDialect; import java.util.HashMap; import java.util.Map; +import java.util.Properties; import org.apache.http.impl.client.CloseableHttpClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.web.ErrorAttributes; +import org.springframework.boot.autoconfigure.web.ErrorController; +import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.core.Ordered; import org.springframework.core.env.Environment; -import org.springframework.web.HttpRequestHandler; -import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; +import org.springframework.http.HttpStatus; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.resourceresolver.IResourceResolver; +import org.thymeleaf.resourceresolver.UrlResourceResolver; +import org.thymeleaf.templateresolver.TemplateResolver; @SpringBootApplication -public class Application +public class Application extends WebMvcConfigurerAdapter { + @Autowired + private ServerProperties properties; + + @Bean - public SimpleUrlHandlerMapping proxiedHandlerMapping( - ProxyHttpRequestHandler handler + public RegexUrlHandlerMapping proxiedHandlerMapping( + ProxyHttpRequestHandler proxy, + UrlThymeleafViewController views ) { - SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); + RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping(); mapping.setOrder(Ordered.HIGHEST_PRECEDENCE); - Map mappings = new HashMap<>(); - mappings.put("/*.html", handler); - mappings.put("/*/", handler); - mappings.put("/*/*.html", handler); - mappings.put("/**/", handler); - mappings.put("/**/*.html", handler); + Map mappings = new HashMap<>(); + mappings.put("/img/.+", proxy); + mappings.put("/css/.+", proxy); + mappings.put("/js/.+", proxy); + mappings.put("/fonts/.+", proxy); + mappings.put("/.*\\.html", views); mapping.setUrlMap(mappings); return mapping; } @Bean - public ProxyHttpRequestHandler proxiedRequestHandler( + public ProxyHttpRequestHandler proxyHttpRequestHandler( CloseableHttpClient client, Environment env ) @@ -46,6 +63,97 @@ public class Application return handler; } + @Bean + public UrlThymeleafViewController urlThymeleafViewController( + TemplateEngine engine + ) + { + return new UrlThymeleafViewController(engine); + } + + @Bean + public TemplateResolver defaultTemplateResolver( + IResourceResolver resources, + Environment env + ) + { + TemplateResolver resolver = new TemplateResolver(); + resolver.setResourceResolver(resources); + resolver.setPrefix("http://localhost:8080/thymeleaf/"); + resolver.setSuffix(".html"); + resolver.setTemplateMode("HTML5"); + resolver.setCharacterEncoding("UTF-8"); + resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable"))); + return resolver; + } + + @Bean + public TemplateResolver jsonTemplateResolver( + IResourceResolver resources, + Environment env + ) + { + TemplateResolver resolver = new TemplateResolver(); + resolver.setResourceResolver(resources); + resolver.setPrefix("http://localhost:8080/thymeleaf/"); + resolver.setSuffix(".json"); + resolver.setTemplateMode("JSON"); + resolver.setCharacterEncoding("UTF-8"); + resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable"))); + return resolver; + } + + @Bean + public UrlResourceResolver thymeleafResourceResolver() + { + return new UrlResourceResolver(); + } + + @Bean + public JuploDialect juploDialect() + { + return new JuploDialect(); + } + + @Bean + public SimpleMappingExceptionResolver simpleMappingExceptionResolver() + { + SimpleMappingExceptionResolver resolver = + new SimpleMappingExceptionResolver(); + + Properties mappings = new Properties(); + mappings.setProperty("TemplateInputException", "templates/404"); + + resolver.setExceptionMappings(mappings); + resolver.setDefaultErrorView("templates/error"); + resolver.setWarnLogCategory("exception"); + return resolver; + } + + @Bean + public ErrorController errorController( + ApplicationContext context, + ErrorAttributes errorAttributes + ) + { + ExceptionResolverErrorController controller = + new ExceptionResolverErrorController( + context, + errorAttributes, + properties.getError() + ); + controller.addErrorMapping(HttpStatus.NOT_FOUND, "templates/404"); + controller.setDefaultErrorView("templates/error"); + return controller; + } + + + @Override + public void addViewControllers(ViewControllerRegistry registry) + { + registry.addViewController("/").setViewName("forward:index.html"); + } + public static void main(String[] args) {