diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebConfiguration.java b/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebConfiguration.java
deleted file mode 100644
index 90f4f48f50..0000000000
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebConfiguration.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-import org.thymeleaf.spring4.SpringTemplateEngine;
-import org.thymeleaf.spring4.view.ThymeleafViewResolver;
-import org.thymeleaf.templatemode.TemplateMode;
-import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
-
-import javax.servlet.ServletContext;
-
-@Configuration
-@ComponentScan("com.baeldung.enterprise.patterns.dispatcher.servlet.web")
-@EnableWebMvc
-public class WebConfiguration extends WebMvcConfigurerAdapter {
- @Bean
- public ServletContextTemplateResolver templateResolver(ServletContext servletContext) {
- ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
- templateResolver.setPrefix("/WEB-INF/views/");
- templateResolver.setSuffix(".html");
- templateResolver.setTemplateMode(TemplateMode.HTML);
- return templateResolver;
- }
-
- @Bean
- public SpringTemplateEngine templateEngine(ServletContextTemplateResolver templateResolver) {
- SpringTemplateEngine templateEngine = new SpringTemplateEngine();
- templateEngine.setTemplateResolver(templateResolver);
- return templateEngine;
- }
-
- @Bean
- public ThymeleafViewResolver viewResolver(SpringTemplateEngine templateEngine) {
- ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
- viewResolver.setTemplateEngine(templateEngine);
- return viewResolver;
- }
-}
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html b/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html
deleted file mode 100644
index 1a333ed641..0000000000
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Welcome to TaskTools!
-
-
- TaskTools
-
-
-
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html b/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html
deleted file mode 100644
index 70f010e58d..0000000000
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html b/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html
deleted file mode 100644
index 2fe628456f..0000000000
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
- Home
- Add new
-
-
-
diff --git a/enterprise-patterns/spring-dispatcher-servlet/pom.xml b/spring-dispatcher-servlet/pom.xml
similarity index 77%
rename from enterprise-patterns/spring-dispatcher-servlet/pom.xml
rename to spring-dispatcher-servlet/pom.xml
index e7220eec59..646db663db 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/pom.xml
+++ b/spring-dispatcher-servlet/pom.xml
@@ -5,12 +5,11 @@
4.0.0
spring-dispatcher-servlet
- 1.0.0-SNAPSHOT
war
- com.baeldung.enterprise.patterns
- enterprise-patterns-parent
+ com.baeldung
+ parent-modules
1.0.0-SNAPSHOT
..
@@ -25,22 +24,27 @@
org.springframework
spring-webmvc
- 4.3.2.RELEASE
+ 4.3.3.RELEASE
org.thymeleaf
thymeleaf-spring4
- 3.0.1.RELEASE
+ 3.0.2.RELEASE
- org.apache.logging.log4j
- log4j-slf4j-impl
- 2.6.2
+ org.slf4j
+ slf4j-api
+ 1.7.21
org.apache.logging.log4j
log4j-core
- 2.6.2
+ 2.7
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ 2.7
@@ -49,6 +53,11 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+ 1.8
+
org.apache.maven.plugins
@@ -61,7 +70,7 @@
org.eclipse.jetty
jetty-maven-plugin
- 9.4.0.M1
+ 9.3.12.v20160915
/
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/RootConfiguration.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/RootConfiguration.java
similarity index 78%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/RootConfiguration.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/RootConfiguration.java
index 9b22e411c5..48281c5e5d 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/RootConfiguration.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/RootConfiguration.java
@@ -1,6 +1,6 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet;
+package com.baeldung.spring.dispatcher.servlet;
-import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
+import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebConfiguration.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebConfiguration.java
new file mode 100644
index 0000000000..5bfde3fb6b
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebConfiguration.java
@@ -0,0 +1,114 @@
+package com.baeldung.spring.dispatcher.servlet;
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.ResourceBundleMessageSource;
+import org.springframework.ui.context.support.ResourceBundleThemeSource;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.ThemeResolver;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+import org.springframework.web.servlet.theme.CookieThemeResolver;
+import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
+import org.thymeleaf.spring4.SpringTemplateEngine;
+import org.thymeleaf.spring4.view.ThymeleafViewResolver;
+import org.thymeleaf.templatemode.TemplateMode;
+import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
+
+import javax.servlet.ServletContext;
+import java.util.Locale;
+
+@Configuration
+@ComponentScan("com.baeldung.enterprise.patterns.dispatcher.servlet.web")
+@EnableWebMvc
+public class WebConfiguration extends WebMvcConfigurerAdapter {
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry
+ .addResourceHandler("/public/**")
+ .addResourceLocations("/public/");
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(localeChangeInterceptor());
+ registry.addInterceptor(themeChangeInterceptor());
+ }
+
+ @Bean
+ public ServletContextTemplateResolver templateResolver(ServletContext servletContext) {
+ ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
+ templateResolver.setPrefix("/WEB-INF/views/");
+ templateResolver.setSuffix(".html");
+ templateResolver.setTemplateMode(TemplateMode.HTML);
+ return templateResolver;
+ }
+
+ @Bean
+ public SpringTemplateEngine templateEngine(ServletContextTemplateResolver templateResolver) {
+ SpringTemplateEngine templateEngine = new SpringTemplateEngine();
+ templateEngine.setTemplateResolver(templateResolver);
+ return templateEngine;
+ }
+
+ @Bean
+ public ThymeleafViewResolver viewResolver(SpringTemplateEngine templateEngine) {
+ ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
+ viewResolver.setTemplateEngine(templateEngine);
+ return viewResolver;
+ }
+
+ @Bean
+ public MessageSource messageSource() {
+ ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
+ messageSource.setBasename("messages");
+ return messageSource;
+ }
+
+ @Bean
+ public LocaleResolver localeResolver() {
+ CookieLocaleResolver localeResolver = new CookieLocaleResolver();
+ localeResolver.setDefaultLocale(Locale.ENGLISH);
+ localeResolver.setCookieName("locale");
+ localeResolver.setCookieMaxAge(-1);
+ return localeResolver;
+ }
+
+ @Bean
+ public LocaleChangeInterceptor localeChangeInterceptor() {
+ LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
+ localeChangeInterceptor.setParamName("lang");
+ localeChangeInterceptor.setIgnoreInvalidLocale(true);
+ return localeChangeInterceptor;
+ }
+
+ @Bean
+ public ResourceBundleThemeSource themeSource() {
+ ResourceBundleThemeSource themeSource = new ResourceBundleThemeSource();
+ themeSource.setBasenamePrefix("theme-");
+ themeSource.setFallbackToSystemLocale(false);
+ return themeSource;
+ }
+
+ @Bean
+ public ThemeResolver themeResolver() {
+ CookieThemeResolver themeResolver = new CookieThemeResolver();
+ themeResolver.setDefaultThemeName("robotask");
+ themeResolver.setCookieName("theme");
+ themeResolver.setCookieMaxAge(-1);
+ return themeResolver;
+ }
+
+ @Bean
+ public ThemeChangeInterceptor themeChangeInterceptor() {
+ ThemeChangeInterceptor themeChangeInterceptor = new ThemeChangeInterceptor();
+ themeChangeInterceptor.setParamName("theme");
+ return themeChangeInterceptor;
+ }
+}
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebInitializer.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebInitializer.java
similarity index 62%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebInitializer.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebInitializer.java
index a544b2cbac..34e7ce6fc9 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/WebInitializer.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/WebInitializer.java
@@ -1,7 +1,10 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet;
+package com.baeldung.spring.dispatcher.servlet;
+import com.baeldung.spring.dispatcher.servlet.web.filters.RequestLoggingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
+import javax.servlet.Filter;
+
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class>[] getRootConfigClasses() {
@@ -15,6 +18,11 @@ public class WebInitializer extends AbstractAnnotationConfigDispatcherServletIni
@Override
protected String[] getServletMappings() {
- return new String[]{"/example/*"};
+ return new String[]{"/*"};
+ }
+
+ @Override
+ protected Filter[] getServletFilters() {
+ return new Filter[]{new RequestLoggingFilter()};
}
}
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/models/Task.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/models/Task.java
similarity index 91%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/models/Task.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/models/Task.java
index dfe4aed4e1..d672948112 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/models/Task.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/models/Task.java
@@ -1,4 +1,4 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet.models;
+package com.baeldung.spring.dispatcher.servlet.models;
import org.springframework.format.annotation.DateTimeFormat;
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java
similarity index 93%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java
index 0c44d0a5e7..f25fe11b53 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/GlobalDefaultExceptionHandler.java
@@ -1,4 +1,4 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
+package com.baeldung.spring.dispatcher.servlet.web;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/HomeController.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/HomeController.java
similarity index 76%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/HomeController.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/HomeController.java
index 6e4e437a44..0a7d81958e 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/HomeController.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/HomeController.java
@@ -1,16 +1,18 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
+package com.baeldung.spring.dispatcher.servlet.web;
-import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
+import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Controller
+@RequestMapping("/")
public class HomeController {
@Autowired
private Map> taskMap;
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/TaskController.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/TaskController.java
similarity index 82%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/TaskController.java
rename to spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/TaskController.java
index 6930464f81..2450e9244d 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/java/com/baeldung/enterprise/patterns/dispatcher/servlet/web/TaskController.java
+++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/spring/dispatcher/servlet/web/TaskController.java
@@ -1,15 +1,12 @@
-package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
+package com.baeldung.spring.dispatcher.servlet.web;
-import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
+import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
@Controller
@@ -24,7 +21,7 @@ public class TaskController {
@PathVariable("username") String username
) {
List tasks = taskMap.get(username).stream()
- .sorted((t1, t2) -> t1.getDue().compareTo(t2.getDue()))
+ .sorted(Comparator.comparing(Task::getDue))
.collect(Collectors.toList());
model.addAttribute("username", username);
model.addAttribute("tasks", tasks);
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/resources/log4j2.xml b/spring-dispatcher-servlet/src/main/resources/log4j2.xml
similarity index 100%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/resources/log4j2.xml
rename to spring-dispatcher-servlet/src/main/resources/log4j2.xml
diff --git a/spring-dispatcher-servlet/src/main/resources/messages.properties b/spring-dispatcher-servlet/src/main/resources/messages.properties
new file mode 100644
index 0000000000..63f0c63a4d
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/messages.properties
@@ -0,0 +1,10 @@
+home.title=Welcome to TaskTools!
+task.add.description=description
+task.add.due=due
+task.add.header=Adding a task to {0}''s list:
+task.add.submit=Submit
+task.add.title={0}: task add
+task.list.add-new=Add new
+task.list.header={0}''s tasks:
+task.list.home=Home
+task.list.title={0}: task list
diff --git a/spring-dispatcher-servlet/src/main/resources/messages_de.properties b/spring-dispatcher-servlet/src/main/resources/messages_de.properties
new file mode 100644
index 0000000000..8bda8fa698
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/messages_de.properties
@@ -0,0 +1,10 @@
+home.title=Willkommen bei TaskTools!
+task.add.description=Beschreibung
+task.add.due=f\u00e4llig
+task.add.header=F\u00fcge eine Aufgabe zu {0}''s Liste hinzu:
+task.add.submit=Senden
+task.add.title={0}: Task hinzuf\u00fcgen
+task.list.add-new=Neuer Task
+task.list.header={0}''s Tasks:
+task.list.home=Startseite
+task.list.title={0}: Task Liste
diff --git a/spring-dispatcher-servlet/src/main/resources/theme-post_it.properties b/spring-dispatcher-servlet/src/main/resources/theme-post_it.properties
new file mode 100644
index 0000000000..d2998e2bdf
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/theme-post_it.properties
@@ -0,0 +1 @@
+stylesheet=/public/css/themes/post_it.css
diff --git a/spring-dispatcher-servlet/src/main/resources/theme-robotask.properties b/spring-dispatcher-servlet/src/main/resources/theme-robotask.properties
new file mode 100644
index 0000000000..68fe270b64
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/theme-robotask.properties
@@ -0,0 +1 @@
+stylesheet=/public/css/themes/robotask.css
diff --git a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html
similarity index 73%
rename from enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html
rename to spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html
index c1b362e51a..cc1ea12789 100644
--- a/enterprise-patterns/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html
+++ b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/error.html
@@ -2,6 +2,7 @@
Error
+
Error:
diff --git a/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html
new file mode 100644
index 0000000000..e26079de96
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/home.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ TaskTools
+
+
+
diff --git a/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html
new file mode 100644
index 0000000000..68b9b233c5
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-add.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html
new file mode 100644
index 0000000000..cc5e0a396d
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/webapp/WEB-INF/views/task-list.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-dispatcher-servlet/src/main/webapp/public/css/themes/post_it.css b/spring-dispatcher-servlet/src/main/webapp/public/css/themes/post_it.css
new file mode 100644
index 0000000000..578781ec83
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/webapp/public/css/themes/post_it.css
@@ -0,0 +1,8 @@
+@import url('https://fonts.googleapis.com/css?family=Indie+Flower');
+
+* {
+ font-family: 'Indie Flower', sans-serif;
+ font-size: 18px;
+ color: #ffeb3b;
+ background-color: #212121;
+}
diff --git a/spring-dispatcher-servlet/src/main/webapp/public/css/themes/robotask.css b/spring-dispatcher-servlet/src/main/webapp/public/css/themes/robotask.css
new file mode 100644
index 0000000000..8c0121b536
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/webapp/public/css/themes/robotask.css
@@ -0,0 +1,8 @@
+@import url('https://fonts.googleapis.com/css?family=Roboto');
+
+* {
+ font-family: Roboto, sans-serif;
+ font-size: 1em;
+ color: #212121;
+ background-color: #fafafa;
+}