X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeproxy%2FApplication.java;h=b5a38cd1f1f12486107401c0253ed0b7b3be3439;hb=23bc7e913d4e1afbda0805eea6371f36cf045b6d;hp=a12205e2da4cd0da235e6c18f5512a3d4be8fcba;hpb=1d1c67b1565e50a5db350660e368cde7af1fe581;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 a12205e..b5a38cd 100644 --- a/src/main/java/de/juplo/thymeproxy/Application.java +++ b/src/main/java/de/juplo/thymeproxy/Application.java @@ -1,30 +1,48 @@ package de.juplo.thymeproxy; -import java.util.Collections; +import de.juplo.thymeleaf.JuploDialect; +import java.util.HashMap; +import java.util.Map; import org.apache.http.impl.client.CloseableHttpClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.core.Ordered; import org.springframework.core.env.Environment; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.mvc.UrlFilenameViewController; +import org.thymeleaf.resourceresolver.IResourceResolver; +import org.thymeleaf.resourceresolver.UrlResourceResolver; +import org.thymeleaf.spring4.SpringTemplateEngine; +import org.thymeleaf.spring4.view.ThymeleafView; +import org.thymeleaf.templateresolver.TemplateResolver; @SpringBootApplication -public class Application +public class Application extends WebMvcConfigurerAdapter { @Bean public RegexUrlHandlerMapping proxiedHandlerMapping( - ProxyHttpRequestHandler handler + ProxyHttpRequestHandler proxy, + UrlFilenameViewController views ) { RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping(); mapping.setOrder(Ordered.HIGHEST_PRECEDENCE); - mapping.setUrlMap(Collections.singletonMap(".*\\.html$", handler)); + Map mappings = new HashMap<>(); + mappings.put("/thymeleaf/.*\\.html", proxy); + 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 ) @@ -36,9 +54,81 @@ public class Application return handler; } + @Bean + public UrlFilenameViewController urlFilenameViewController() + { + return new UrlFilenameViewController(); + } + + @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 ThymeleafView error(SpringTemplateEngine templateEngine) + { + return new ErrorThymeleafView(templateEngine, "/thymeleaf/error.html"); + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) + { + registry.addViewController("/").setViewName("forward:index.html"); + } + public static void main(String[] args) { SpringApplication.run(Application.class, args); } + + + static class ErrorThymeleafView extends ThymeleafView + { + ErrorThymeleafView(SpringTemplateEngine templateEngine, String templateName) + { + super(templateName); + setTemplateEngine(templateEngine); + } + } } \ No newline at end of file