Skip to content

Commit 1e77946

Browse files
committed
Add date and time app
1 parent 9e1da01 commit 1e77946

12 files changed

Lines changed: 684 additions & 0 deletions

File tree

SpringDateTime/pom.xml

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>ru.alishev.springcourse</groupId>
8+
<artifactId>spring-date-time</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
<packaging>war</packaging>
11+
12+
<name>spring-mvc-app1 Maven Webapp</name>
13+
<!-- FIXME change it to the project's website -->
14+
<url>http://www.example.com</url>
15+
16+
<properties>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
<maven.compiler.source>1.7</maven.compiler.source>
19+
<maven.compiler.target>1.7</maven.compiler.target>
20+
21+
<spring.version>5.3.5</spring.version>
22+
<hibernate.version>5.4.28.Final</hibernate.version>
23+
</properties>
24+
25+
<dependencies>
26+
<dependency>
27+
<groupId>junit</groupId>
28+
<artifactId>junit</artifactId>
29+
<version>4.11</version>
30+
<scope>test</scope>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>org.springframework</groupId>
35+
<artifactId>spring-core</artifactId>
36+
<version>${spring.version}</version>
37+
</dependency>
38+
39+
<dependency>
40+
<groupId>org.springframework</groupId>
41+
<artifactId>spring-context</artifactId>
42+
<version>${spring.version}</version>
43+
</dependency>
44+
45+
<dependency>
46+
<groupId>org.springframework</groupId>
47+
<artifactId>spring-web</artifactId>
48+
<version>${spring.version}</version>
49+
</dependency>
50+
51+
<dependency>
52+
<groupId>org.springframework</groupId>
53+
<artifactId>spring-webmvc</artifactId>
54+
<version>${spring.version}</version>
55+
</dependency>
56+
57+
<dependency>
58+
<groupId>org.springframework</groupId>
59+
<artifactId>spring-jdbc</artifactId>
60+
<version>${spring.version}</version>
61+
</dependency>
62+
63+
<dependency>
64+
<groupId>org.thymeleaf</groupId>
65+
<artifactId>thymeleaf-spring5</artifactId>
66+
<version>3.0.11.RELEASE</version>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>javax.servlet</groupId>
71+
<artifactId>javax.servlet-api</artifactId>
72+
<version>4.0.1</version>
73+
<scope>provided</scope>
74+
</dependency>
75+
76+
<dependency>
77+
<groupId>org.hibernate.validator</groupId>
78+
<artifactId>hibernate-validator</artifactId>
79+
<version>6.1.6.Final</version>
80+
</dependency>
81+
82+
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
83+
<dependency>
84+
<groupId>org.postgresql</groupId>
85+
<artifactId>postgresql</artifactId>
86+
<version>42.2.18</version>
87+
</dependency>
88+
89+
<!--ORM Related dependencies -->
90+
91+
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
92+
<dependency>
93+
<groupId>org.hibernate</groupId>
94+
<artifactId>hibernate-core</artifactId>
95+
<version>${hibernate.version}</version>
96+
</dependency>
97+
98+
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
99+
<dependency>
100+
<groupId>org.springframework</groupId>
101+
<artifactId>spring-orm</artifactId>
102+
<version>${spring.version}</version>
103+
</dependency>
104+
105+
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
106+
<dependency>
107+
<groupId>org.springframework.data</groupId>
108+
<artifactId>spring-data-jpa</artifactId>
109+
<version>2.4.7</version>
110+
</dependency>
111+
</dependencies>
112+
113+
<build>
114+
<finalName>spring-mvc-app1</finalName>
115+
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
116+
<plugins>
117+
<plugin>
118+
<artifactId>maven-clean-plugin</artifactId>
119+
<version>3.1.0</version>
120+
</plugin>
121+
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
122+
<plugin>
123+
<artifactId>maven-resources-plugin</artifactId>
124+
<version>3.0.2</version>
125+
</plugin>
126+
<plugin>
127+
<artifactId>maven-compiler-plugin</artifactId>
128+
<version>3.8.0</version>
129+
</plugin>
130+
<plugin>
131+
<artifactId>maven-surefire-plugin</artifactId>
132+
<version>2.22.1</version>
133+
</plugin>
134+
<plugin>
135+
<artifactId>maven-war-plugin</artifactId>
136+
<version>3.2.2</version>
137+
</plugin>
138+
<plugin>
139+
<artifactId>maven-install-plugin</artifactId>
140+
<version>2.5.2</version>
141+
</plugin>
142+
<plugin>
143+
<artifactId>maven-deploy-plugin</artifactId>
144+
<version>2.8.2</version>
145+
</plugin>
146+
</plugins>
147+
</pluginManagement>
148+
<plugins>
149+
<plugin>
150+
<groupId>org.apache.maven.plugins</groupId>
151+
<artifactId>maven-compiler-plugin</artifactId>
152+
<configuration>
153+
<source>8</source>
154+
<target>8</target>
155+
</configuration>
156+
</plugin>
157+
</plugins>
158+
</build>
159+
</project>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package ru.alishev.springcourse.config;
2+
3+
import org.springframework.web.filter.CharacterEncodingFilter;
4+
import org.springframework.web.filter.HiddenHttpMethodFilter;
5+
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
6+
7+
import javax.servlet.DispatcherType;
8+
import javax.servlet.FilterRegistration;
9+
import javax.servlet.ServletContext;
10+
import javax.servlet.ServletException;
11+
import java.util.EnumSet;
12+
13+
/**
14+
* @author Neil Alishev
15+
*/
16+
public class MySpringMvcDispatcherSerlvetIntitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
17+
@Override
18+
protected Class<?>[] getRootConfigClasses() {
19+
return null;
20+
}
21+
22+
@Override
23+
protected Class<?>[] getServletConfigClasses() {
24+
return new Class[]{SpringConfig.class};
25+
}
26+
27+
@Override
28+
protected String[] getServletMappings() {
29+
return new String[]{"/"};
30+
}
31+
32+
@Override
33+
public void onStartup(ServletContext aServletContext) throws ServletException {
34+
super.onStartup(aServletContext);
35+
registerCharacterEncodingFilter(aServletContext);
36+
registerHiddenFieldFilter(aServletContext);
37+
}
38+
39+
private void registerHiddenFieldFilter(ServletContext aContext) {
40+
aContext.addFilter("hiddenHttpMethodFilter",
41+
new HiddenHttpMethodFilter()).addMappingForUrlPatterns(null, true, "/*");
42+
}
43+
44+
private void registerCharacterEncodingFilter(ServletContext aContext) {
45+
EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD);
46+
47+
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
48+
characterEncodingFilter.setEncoding("UTF-8");
49+
characterEncodingFilter.setForceEncoding(true);
50+
51+
FilterRegistration.Dynamic characterEncoding = aContext.addFilter("characterEncoding", characterEncodingFilter);
52+
characterEncoding.addMappingForUrlPatterns(dispatcherTypes, true, "/*");
53+
}
54+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package ru.alishev.springcourse.config;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.context.ApplicationContext;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.ComponentScan;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.context.annotation.PropertySource;
9+
import org.springframework.core.env.Environment;
10+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
11+
import org.springframework.jdbc.datasource.DriverManagerDataSource;
12+
import org.springframework.orm.jpa.JpaTransactionManager;
13+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
14+
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
15+
import org.springframework.transaction.PlatformTransactionManager;
16+
import org.springframework.transaction.annotation.EnableTransactionManagement;
17+
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
18+
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
19+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
20+
import org.thymeleaf.spring5.SpringTemplateEngine;
21+
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
22+
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
23+
24+
import javax.sql.DataSource;
25+
import java.util.Properties;
26+
27+
/**
28+
* @author Neil Alishev
29+
*/
30+
@Configuration
31+
@ComponentScan("ru.alishev.springcourse")
32+
@PropertySource("classpath:hibernate.properties")
33+
@EnableTransactionManagement
34+
@EnableJpaRepositories("ru.alishev.springcourse.repositories")
35+
@EnableWebMvc
36+
public class SpringConfig implements WebMvcConfigurer {
37+
38+
private final ApplicationContext applicationContext;
39+
40+
private final Environment env;
41+
42+
@Autowired
43+
public SpringConfig(ApplicationContext applicationContext, Environment env) {
44+
this.applicationContext = applicationContext;
45+
this.env = env;
46+
}
47+
48+
@Bean
49+
public SpringResourceTemplateResolver templateResolver() {
50+
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
51+
templateResolver.setApplicationContext(applicationContext);
52+
templateResolver.setPrefix("/WEB-INF/views/");
53+
templateResolver.setSuffix(".html");
54+
templateResolver.setCharacterEncoding("UTF-8");
55+
return templateResolver;
56+
}
57+
58+
@Bean
59+
public SpringTemplateEngine templateEngine() {
60+
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
61+
templateEngine.setTemplateResolver(templateResolver());
62+
templateEngine.setEnableSpringELCompiler(true);
63+
return templateEngine;
64+
}
65+
66+
@Override
67+
public void configureViewResolvers(ViewResolverRegistry registry) {
68+
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
69+
resolver.setTemplateEngine(templateEngine());
70+
resolver.setCharacterEncoding("UTF-8");
71+
72+
registry.viewResolver(resolver);
73+
}
74+
75+
@Bean
76+
public DataSource dataSource() {
77+
DriverManagerDataSource dataSource = new DriverManagerDataSource();
78+
79+
dataSource.setDriverClassName(env.getRequiredProperty("hibernate.driver_class"));
80+
dataSource.setUrl(env.getRequiredProperty("hibernate.connection.url"));
81+
dataSource.setUsername(env.getRequiredProperty("hibernate.connection.username"));
82+
dataSource.setPassword(env.getRequiredProperty("hibernate.connection.password"));
83+
84+
return dataSource;
85+
}
86+
87+
private Properties hibernateProperties() {
88+
Properties properties = new Properties();
89+
properties.put("hibernate.dialect", env.getRequiredProperty("hibernate.dialect"));
90+
properties.put("hibernate.show_sql", env.getRequiredProperty("hibernate.show_sql"));
91+
92+
return properties;
93+
}
94+
95+
@Bean
96+
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
97+
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
98+
em.setDataSource(dataSource());
99+
em.setPackagesToScan("ru.alishev.springcourse.models");
100+
101+
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
102+
em.setJpaVendorAdapter(vendorAdapter);
103+
em.setJpaProperties(hibernateProperties());
104+
105+
return em;
106+
}
107+
108+
@Bean
109+
public PlatformTransactionManager transactionManager() {
110+
JpaTransactionManager transactionManager = new JpaTransactionManager();
111+
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
112+
113+
return transactionManager;
114+
}
115+
}

0 commit comments

Comments
 (0)