Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6d25ad5

Browse files
Added Util folder in the MVCPracticeAdvanced section of a small course on Java EE
1 parent 0b0b8da commit 6d25ad5

File tree

4 files changed

+173
-0
lines changed

4 files changed

+173
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package AirportSimulatorTwo.Util;
2+
3+
import java.sql.Connection;
4+
import java.sql.DriverManager;
5+
import java.sql.SQLException;
6+
7+
public final class ConnectionManager {
8+
private static final String URL_KEY = "db.url";
9+
private static final String USER_KEY = "db.user";
10+
private static final String PASS_KEY = "db.pass";
11+
12+
static {
13+
loadPostgreSqlDriver();
14+
}
15+
16+
private static void loadPostgreSqlDriver() {
17+
/*
18+
Метод forName() класса java.lang.Class возвращает объект Class,
19+
связанный с классом или интерфейсом с заданным строковым именем.
20+
Вызов этого метода эквивалентен:
21+
22+
Class.forName(className, true, currentLoader)
23+
24+
, где currentLoader обозначает определяющий загрузчик класса текущего
25+
класса. Например, следующий фрагмент кода возвращает дескриптор класса
26+
среды выполнения для класса с именем java.lang.Thread:
27+
28+
Class t = Class.forName("java.lang.Thread")
29+
30+
Вызов forName("XYZ") приводит к инициализации класса с именем XYZ.
31+
32+
Параметры: className — полное имя вызываемого класса.
33+
Возвращает: объект Class для класса с указанным именем.
34+
35+
Исключения:
36+
- LinkageError - если связь не удалась
37+
- ExceptionInInitializerError - если инициализация, спровоцированная
38+
этим методом, не удалась.
39+
- ClassNotFoundException - если класс не может быть расположен
40+
41+
В нашем случае метод Class.forName загружает класс драйвера,
42+
который мы будем использовать.
43+
*/
44+
try {
45+
Class.forName("org.postgresql.Driver");
46+
} catch (ClassNotFoundException e) {
47+
throw new RuntimeException(e);
48+
}
49+
}
50+
51+
private ConnectionManager(){
52+
}
53+
54+
public static Connection getBaseConnection(){
55+
try {
56+
return DriverManager.getConnection(
57+
PropertiesUtil.get(URL_KEY),
58+
PropertiesUtil.get(USER_KEY),
59+
PropertiesUtil.get(PASS_KEY));
60+
} catch (SQLException exp) {
61+
throw new RuntimeException(exp);
62+
}
63+
}
64+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package AirportSimulatorTwo.Util;
2+
3+
import lombok.experimental.UtilityClass;
4+
@UtilityClass
5+
public class JspPathHelper {
6+
private static final String JSP_FORMAT = "/WEB-INF/jsp/%s.jsp";
7+
private static final String JSTL_FORMAT = "/WEB-INF/JstlDemo/%s.jsp";
8+
private static final String JST_FORMS_FORMAT = "/WEB-INF/jspForms/%s.jsp";
9+
public static String getJspPath (String jspPageName){
10+
return String.format(JSP_FORMAT, jspPageName);
11+
}
12+
13+
public static String getJstlDemoPath (String jstlPageName){
14+
return String.format(JSTL_FORMAT, jstlPageName);
15+
}
16+
17+
public static String getJspFormPath (String jstFormPage){
18+
return String.format(JST_FORMS_FORMAT, jstFormPage);
19+
}
20+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package AirportSimulatorTwo.Util;
2+
3+
import lombok.experimental.UtilityClass;
4+
5+
import java.time.LocalDate;
6+
import java.time.format.DateTimeFormatter;
7+
import java.time.format.DateTimeParseException;
8+
9+
@UtilityClass
10+
public class LocalDateFormatter {
11+
private static final String PATTERN = "yyyy-MM-dd";
12+
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(PATTERN);
13+
14+
public LocalDate format(String date) {
15+
return LocalDate.parse(date, FORMATTER);
16+
}
17+
18+
public boolean isValid(String date) {
19+
try{
20+
format(date);
21+
return true;
22+
} catch (DateTimeParseException exception) {
23+
return false;
24+
}
25+
}
26+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package AirportSimulatorTwo.Util;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.util.Properties;
6+
7+
public final class PropertiesUtil {
8+
private static final Properties PROPERTIES = new Properties();
9+
10+
static {
11+
loadProperties();
12+
}
13+
private static void loadProperties() {
14+
/*
15+
В блоке try -with-resources получаем (открываем)
16+
входящий поток данных из файла свойств.
17+
18+
1. Метод getClassLoader() класса java.lang.Class
19+
используется для получения classLoader текущего
20+
объекта. Этот объект может быть классом, массивом,
21+
интерфейсом и т. д. Метод возвращает classLoader
22+
этого объекта.
23+
24+
classLoader - это объект, отвечающий за загрузку
25+
классов. Класс ClassLoader является абстрактным
26+
классом. Учитывая двоичное имя класса, загрузчик
27+
класса должен попытаться найти или сгенерировать
28+
данные, составляющие определение класса. Типичная
29+
стратегия состоит в том, чтобы преобразовать имя в
30+
имя файла, а затем прочитать «файл класса» с этим
31+
именем из файловой системы.
32+
33+
2. Метод getResourceAsStream() класса java.lang.Class
34+
используется для получения ресурса с указанным ресурсом
35+
текущего класса. Метод возвращает указанный ресурс
36+
данного класса в виде объекта InputStream.
37+
38+
Метод принимает параметр resourceName, который является
39+
ресурсом для получения данных (например, пары KEY-VALUE,
40+
как у нас).
41+
*/
42+
try(InputStream inputStream =
43+
PropertiesUtil.class.
44+
getClassLoader().
45+
getResourceAsStream("application.properties")){
46+
/*
47+
Метод *.load() считывает список свойств
48+
(пары ключей и элементов) из входного
49+
потока байтов.
50+
*/
51+
PROPERTIES.load(inputStream);
52+
} catch (IOException exception){
53+
throw new RuntimeException(exception);
54+
}
55+
}
56+
57+
private PropertiesUtil() {
58+
}
59+
60+
public static String get(String key) {
61+
return PROPERTIES.getProperty(key);
62+
}
63+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /