aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules2
-rw-r--r--juick-spring-www/build.gradle12
-rw-r--r--juick-spring-www/src/main/java/com/juick/www/configuration/WwwInitializer.java43
-rw-r--r--juick-spring-www/src/main/java/com/juick/www/configuration/WwwServletConfiguration.java112
m---------juick-spring-www/src/main/resources/help0
-rw-r--r--juick-spring-www/src/main/resources/messages.properties0
6 files changed, 165 insertions, 4 deletions
diff --git a/.gitmodules b/.gitmodules
index 5b7ebbf7..54466eb1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -3,4 +3,4 @@
url = https://github.com/juick/help.git
[submodule "juick-spring-www/src/main/resources/help"]
path = juick-spring-www/src/main/resources/help
- url = https://github.com/juick/help.git \ No newline at end of file
+ url = https://github.com/juick/help.git
diff --git a/juick-spring-www/build.gradle b/juick-spring-www/build.gradle
index 2f8c0377..fb403337 100644
--- a/juick-spring-www/build.gradle
+++ b/juick-spring-www/build.gradle
@@ -19,13 +19,19 @@ apply plugin: 'org.akhikhl.gretty'
apply plugin: 'com.github.ben-manes.versions'
def springFrameworkVersion = '4.3.4.RELEASE'
+def thymeleafVersion = '3.0.2.RELEASE'
dependencies {
compile project(':juick-server')
- compile 'com.sun.mail:javax.mail:1.5.6'
+ compile "com.sun.mail:javax.mail:1.5.6"
+ compile "org.pegdown:pegdown:1.6.0"
compile "org.springframework:spring-webmvc:${springFrameworkVersion}"
- providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
- providedRuntime 'mysql:mysql-connector-java:5.1.40'
+ compile "org.thymeleaf:thymeleaf:${thymeleafVersion}"
+ compile "org.thymeleaf:thymeleaf-spring4:${thymeleafVersion}"
+ compile "org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.0.RELEASE"
+ testRuntime "org.thymeleaf:thymeleaf-spring4:${thymeleafVersion}"
+ providedCompile "javax.servlet:javax.servlet-api:3.1.0"
+ providedRuntime "mysql:mysql-connector-java:5.1.40"
}
compileFrontend.dependsOn 'npmInstall'
diff --git a/juick-spring-www/src/main/java/com/juick/www/configuration/WwwInitializer.java b/juick-spring-www/src/main/java/com/juick/www/configuration/WwwInitializer.java
new file mode 100644
index 00000000..852ec554
--- /dev/null
+++ b/juick-spring-www/src/main/java/com/juick/www/configuration/WwwInitializer.java
@@ -0,0 +1,43 @@
+package com.juick.www.configuration;
+
+import com.juick.configuration.DataConfiguration;
+import com.juick.configuration.SearchConfiguration;
+import org.springframework.web.filter.CharacterEncodingFilter;
+import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
+
+import javax.servlet.Filter;
+
+/**
+ * Created by aalexeev on 11/20/16.
+ */
+public class WwwInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ @Override
+ protected Class<?>[] getRootConfigClasses() {
+ return new Class<?>[]{DataConfiguration.class, SearchConfiguration.class};
+ }
+
+ @Override
+ protected Class<?>[] getServletConfigClasses() {
+ return new Class<?>[]{WwwServletConfiguration.class};
+ }
+
+ @Override
+ protected String[] getServletMappings() {
+ return new String[]{"/"};
+ }
+
+ @Override
+ protected Filter[] getServletFilters() {
+ CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
+ characterEncodingFilter.setEncoding("UTF-8");
+
+ return new Filter[]{characterEncodingFilter};
+ }
+
+ @Override
+ protected String getServletName() {
+ return "WWW-spring dispatcher servlet";
+ }
+}
+
diff --git a/juick-spring-www/src/main/java/com/juick/www/configuration/WwwServletConfiguration.java b/juick-spring-www/src/main/java/com/juick/www/configuration/WwwServletConfiguration.java
new file mode 100644
index 00000000..8edc1b6c
--- /dev/null
+++ b/juick-spring-www/src/main/java/com/juick/www/configuration/WwwServletConfiguration.java
@@ -0,0 +1,112 @@
+package com.juick.www.configuration;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+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.context.support.ReloadableResourceBundleMessageSource;
+import org.springframework.context.support.ResourceBundleMessageSource;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+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.thymeleaf.spring4.SpringTemplateEngine;
+import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
+import org.thymeleaf.spring4.view.ThymeleafViewResolver;
+import org.thymeleaf.templatemode.TemplateMode;
+
+import java.util.List;
+
+/**
+ * Created by vitalyster on 28.06.2016.
+ */
+@Configuration
+@ComponentScan(basePackages = {"com.juick.www.controllers"})
+@PropertySource("classpath:juick.conf")
+public class WwwServletConfiguration extends WebMvcConfigurationSupport {
+
+ @Bean
+ public SpringResourceTemplateResolver templateResolver() {
+ // SpringResourceTemplateResolver automatically integrates with Spring's own
+ // resource resolution infrastructure, which is highly recommended.
+ SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
+ templateResolver.setApplicationContext(getApplicationContext());
+ templateResolver.setPrefix("/WEB-INF/templates/");
+ templateResolver.setSuffix(".html");
+ // HTML is the default value, added here for the sake of clarity.
+ templateResolver.setTemplateMode(TemplateMode.HTML);
+ // Template cache is true by default. Set to false if you want
+ // templates to be automatically updated when modified.
+ templateResolver.setCacheable(true);
+ return templateResolver;
+ }
+
+ @Bean
+ public SpringTemplateEngine templateEngine() {
+ // SpringTemplateEngine automatically applies SpringStandardDialect and
+ // enables Spring's own MessageSource message resolution mechanisms.
+ SpringTemplateEngine templateEngine = new SpringTemplateEngine();
+ templateEngine.setTemplateResolver(templateResolver());
+ // Enabling the SpringEL compiler with Spring 4.2.4 or newer can
+ // speed up execution in most scenarios, but might be incompatible
+ // with specific cases when expressions in one template are reused
+ // across different data types, so this flag is "false" by default
+ // for safer backwards compatibility.
+ templateEngine.setEnableSpringELCompiler(true);
+ return templateEngine;
+ }
+
+ @Bean
+ public ThymeleafViewResolver viewResolver() {
+ ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
+ viewResolver.setTemplateEngine(templateEngine());
+ // NOTE 'order' and 'viewNames' are optional
+ viewResolver.setOrder(1);
+ viewResolver.setViewNames(new String[]{".html", ".xhtml"});
+ return viewResolver;
+ }
+
+ @Override
+ public RequestMappingHandlerMapping requestMappingHandlerMapping() {
+ RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping();
+ mapping.setUseSuffixPatternMatch(false);
+ return mapping;
+ }
+
+ @Override
+ protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+ Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
+ .serializationInclusion(JsonInclude.Include.NON_DEFAULT)
+ .serializationInclusion(JsonInclude.Include.NON_NULL)
+ .serializationInclusion(JsonInclude.Include.NON_ABSENT)
+ .serializationInclusion(JsonInclude.Include.NON_EMPTY);
+
+ MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(builder.build());
+ converter.getObjectMapper().registerModule(new Jdk8Module());
+ converters.add(converter);
+
+ super.configureMessageConverters(converters);
+ }
+
+ @Override
+ protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.setOrder(0);
+ registry.addResourceHandler("/scripts.js").addResourceLocations("/");
+ registry.addResourceHandler("/style.css").addResourceLocations("/");
+ }
+
+ @Bean
+ public ResourceBundleMessageSource messageSource() {
+ ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
+
+ messageSource.setBasename("messages");
+ messageSource.setDefaultEncoding("UTF-8");
+ messageSource.setFallbackToSystemLocale(false);
+
+ return messageSource;
+ }
+}
diff --git a/juick-spring-www/src/main/resources/help b/juick-spring-www/src/main/resources/help
new file mode 160000
+Subproject 491a2f167939a81fc6da354c67a1efdb7d60845
diff --git a/juick-spring-www/src/main/resources/messages.properties b/juick-spring-www/src/main/resources/messages.properties
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/juick-spring-www/src/main/resources/messages.properties