
- •Жизненный цикл сервлета
- •Шаблон Модель-Представление-Контроллер. Роли компонент и зависимости между ними. Пример на одной из Java-реализаций.
- •Задачи mvc
- •Типовая структура Enterprise приложения. Слои, зоны ответственности и зависимости между слоями. Пример (названия классов и методов слоев).
- •Технологии работы с базой данных из Java. Особенности работы с соединениями с базой данных из Web-приложения. Пример.
- •Технология Hibernate
- •Аспектно ориентированное программирование: основные понятия, назначение, пример.
- •Основные концепции
- •Технологии интеграции приложений. Типы интеграции (общий ресурс, удаленный вызов процедур, обмен сообщениями) , сравнение.
- •Типы интеграции
- •Цели интеграции
- •Преимущества веб-интеграции
- •Технологии интеграции приложений. Enterprise Java Beans. Пример Stateless Session Bean.
Технология Hibernate
Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом (open source), распространяемое на условиях GNU Lesser General Public License. Данная библиотека предоставляет лёгкий в использовании каркас (фреймворк) для отображения объектно-ориентированной модели данных в традиционные реляционные базы данных.
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
Безопасность в веб приложениях. Аутентификация и Авторизация: определение и используемые технологии.
Authentication (auth) – Идентификация пользователя
Authorization (authz) – проверка прав пользователя
Типы Auth в веб-приложении
-Basic
-Form
-SSO (NTLMv2, OpenID, Custom)
Где хранить данные для auth/authz
Своя база данных (на уровне приложения)
LDAP
Корпоративный LDAP
MS Active Directory
Способы реализации
С использованием стандарта JEE Security
Контейнер реализует механизмы auth/authz
Администратор настраивает сервер приложений для своей инфраструктуры
Своя реализация или Spring Security
Большая гибкость в логике
Независимость от сервера приложений
Средства диагностики приложений. Протоколирование: назначение, основные понятия (Logger, Level, Appender) и реализации. Пример.
Логгер
Логгер представляет собой объект класса org.apache.log4j.Logger, который используется для вывода данных и управления уровнем (детализацией) вывода. В текущей версии – 1.2.16 – Log4Jподдерживает следующие уровни вывода, в порядке возрастания:
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
OFF
Установка логгеру определенного уровня означает следующее – сообщения, выводимые с этим или более высоким уровнем, попадут в лог. Сообщения, выводимые с уровнем ниже установленного в лог не попадут. И в этом заключается вся прелесть – можно вставлять в программный код вывод информации на различных уровнях (об ошибках – на уровне ERROR, о нормальном ходе выполнения – на уровнеINFO, отладочную – на уровне DEBUG), а потом гибко регулировать, что именно будет выводиться. Как именно регулировать – мы рассмотрим дальше.
Необходимо упомянуть еще о таком понятии как категория (org.apache.log4j.Category). Фактически это тот же логгер, я, честно сказать, не вижу разницы между ними, тем более что программно логгер наследует категорию. Рекомендуется использовать логгер, потому категорий я не касаюсь. Хотя в некоторых старых библиотеках типа Hibernate используются именно категории. Да и терминологически имя логгера чаще всего в документации называется категорией.
Другим важным свойством логгеров является то, что они организованы иерархично. Каждый логгер имеет имя, описывающее иерархию, к которой он принадлежит. Разделитель – точка. Принцип полностью аналогичен формированию имени пакета в Java.
public class Main { public static void main(String[] args) throws FileNotFoundException, IOException { 1:String nameFile = "log4j.properties"; 2:PropertyConfigurator.configure(nameFile); /*1*/Logger LOG = Logger.getRootLogger(); /*2*/Logger localLog2 = Logger.getLogger("logfile"); /*3*/Enumeration append = LOG.getAllAppenders(); /*3*/while (append.hasMoreElements()) { /*3*/LOG.info("Available appender " + append.nextElement()); /*3*/} LOG.info("Hi Logger info!"); localLog2.warn("logfile write!"); System.out.println("LOG.equals(localLog) is " + LOG.equals(localLog)); } }