
- •1. Жизненный цикл приложения Java. Компиляция. JiTкомпиляция. Исполнение.
- •2. Классы. Абстрактные классы. Интерфейсы. Наследование.
- •3. Классы и интерфейсы стандартной библиотеки. Списки. Сортировка.
- •4. Классы и интерфейсы стандартной библиотеки. Ассоциированные массивы. Словари.
- •5. Классы и интерфейсы стандартной библиотеки. Потоки ввода-вывода. Файловый ввод-вывод.
- •6. Параллельные процессы. Синхронизация.
- •Синхронизация по ресурсам и событиям
- •Синхронизация по ресурсам
- •Синхронизация по событиям
- •7. Параллельные процессы. Управление потоками.
- •Создание и запуск потока выполнения
- •Поля и методы, заданные в классе Thread
- •Важнейшие константы и методы класса Thread:
- •Важнейшие методы объектов типа Thread:
- •8. Параллельные процессы. Управление памятью потока.
- •Хранение переменных в памяти
- •Блокировки
- •9. Jdbc, драйверы строка соединения, класс DriverManager, интерфейс Connection.
- •10. Jdbc, создание sql запросов, интерфейсы Statement, PreparedStatement Класс Statement.
- •Выполнение запроса через объект Statement
- •Закрытие объектов Statement
- •11. Jdbc, обработка полученных результатов, интерфейсы ResultSet, ResultSetMetaData.
- •Строки и курсоры
- •Колонки
- •Типы данных и их преобразование
- •Использование потоков для очень больших значений
- •Значения null в результатах
- •12. Объектно-реляционное отображение. Создание персистентных классов при помощи jpa
- •13. Объектно-реляционное отображение. Подключаемы провайдеры персистенции.
- •14. Кастомизация мэппинга персистентных классов на поля и таблички бд.
- •15. Объектно-реляционное отображение. Отображение реляционных связей many-to-many, one-to-many, one-to-one.
- •16. Объектно-реляционное отображение. Жизненный цикл персистентных объектов (entity lifecycle)
- •17. Объектно-реляционное отображение. Интерфейс EntityManager.
- •18. Объектно-реляционное отображение. Создание запросов на jpql, sql
- •19. Работа с xml в Java. Правильно сформированные (well-formed) и корректные (valid) xml документы
- •Понятие корректно сформированных (well-formed) xml-документов
- •Создание действительных (valid) xml-документов. Определение типа документа (dtd)
- •20. Jaxp, основные группы api.
- •21. Работа с xml документами посредством sax.
- •22. Работа с xml документами посредством dom.
- •23. Сравнение sax и dom подходов к обработке xml документов.
- •24. Jaxb, отображение Java класса, отображаемого на xml.
- •25. Создание jaxb контекста, маршалинг и демаршалинг.
- •26. Сервлеты, создание, жизненный цикл
- •27. Http запросы get, post, put, delete, head
- •28. Интерфейс servlet, класс HttpServlet
- •29. Создание rest сервисов, jax rs
- •30. Связка jaxb и jax rs, переключение типов возвращаемого контента (xml, json)
- •33. Оптимизация jvm
24. Jaxb, отображение Java класса, отображаемого на xml.
JAXB (Java API for XML Binding) – позволяет сохранять поля класса в виде xml-файла (аналог сериализации).
При описании класса используются ключевые слова: @XmlElement() (будет сохранен как элемент), @XmlAttribute() (будет сохранен как атрибут).
import java.io.FileWriter;
import java.util.*;
import javax.xml.bind.*;
public class Java2XML {
public Java2XML() {
}
public static void main(String args[]) throws Exception{
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Person person = new Person(
"Anonymous", 32, new Date(1970, 1, 10), "employee");
marshaller.marshal(person, new FileWriter(".\\src\\Person.xml"));
}
}
В итоге получим xml-файл следующего вида
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person type="employee">
<age>32</age>
<dateOfBirth>1970-01-10 T00:00:00+05:30</dateOfBirth>
<name>Anonymous</name>
</person>
25. Создание jaxb контекста, маршалинг и демаршалинг.
JAXB предлагает быстрый и удобный способ создания двухстороннего преобразования между XML документами и классами языка Java. Задавая DTD, компилятор JAXB создает набор классов Java, содержащий весь код, который необходим для анализа XML документов, основанных на данной схеме. Разработчик, использующий созданные классы, может строить дерево объектов Java, изображающих XML документ, обрабатывать содержимое этого дерева и заново создавать XML документы из него.
Класс javax.xml.bind.JAXBContext - "точка входа" в JAXB API
Демаршаллизация: Процесс преобразования XML-данных в Java-класс (или классы).
Маршаллизация: Процесс преобразования Java-данных в XML-документ (в противоположность демаршаллизации).
Простой пример JAXB: rules.xml
<rules> <rule> <name>test1</name> </rule> <rule> <name>test2</name> </rule> <rule> <name>test3</name> </rule> </rules>
Rule.java
public class Rule { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } Rules.java
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlElement; import java.util.List; @XmlRootElement public class Rules { @XmlElement(name = "rule") List<Rule> rules; }
Демаршализация:
JAXBContext jaxbContext = JAXBContext.newInstance(new Class[] {Rules.class}); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Rules rules = (Rules) unmarshaller.unmarshal(new File("rules.xml"));
Маршализация:
// marshal to System.out
Marshaller m = jaxbContext.createMarshaller();
m.marshal( rules, System.out );
26. Сервлеты, создание, жизненный цикл
Сервлет является Java-программой, выполняющейся на стороне сервера и расширяющей функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.
Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.
The service() method отправляет запросы к следующим методам doGet(), doPost(), doPut(), doDelete(), etc., в соответствии с HTTP запросами.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class NewServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Параметр
String parameter = request.getParameter("parameter");
// Старт HTTP сессии
if (request.getSession() == null) {
HttpSession session = request.getSession(true);
session.setAttribute("parameter", parameter);
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Заголовок</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Пример сервлета"+parameter+"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
public String getServletInfo() {
return "Пример сервлета";
}
}
Жизненный цикл Сервлета
-
В случае отсутствия сервлета в контейнере.
-
Класс сервлета загружается контейнером.
-
Контейнер создает экземпляр класса сервлета.
-
Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только однажды.
-
-
Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
-
В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.