Тема доклада: Service Workers
- Описание проблемы оффлайна и плохого интернета
- Возможные решения
- Описание, цели, поддержка этой технологии
- Примеры
Артур Пархисенко / Livestream / Front-end Engineer
Talk about Spring Boot Internals
* Spring Ripper retrospective
* how to build spring boot project. Maven/Gradle plugins
** DependencyManagement in gradle and maven
** Executable artifacts (war or jar)
** War and Jar anatomy
** Embeded tomcat and standalone tomcat integration – SPI. WebApplicationInitializer and ServletContainerInitializer
** Tomcat in Tomcat like a Crank
** Executable jar anatomy
** Main Class and Start-Class. Java MANIFEST.MF anatomy
** Jar like a War, but Jar – JarCraft
** Runtime ClassPath in spring boot applications
* SpringApplication.run ...
** Arguments
** Sources types
** Two general context type in spring boot app
** Starters and autoconfiguration
** spring.factories and SpringFactoriesLoader
** Merge app sources
** Environment and EnvironmentPostProcessor
** ConfigFileApplicationListener mistakes
** Spring Events vs Spring Boot Events
** Application Initializers
** Context prepare
** BeanDefinitionLoader
* @SpringBootApplication anatomy
** @Import – Three types of arguments
*** ImportSelector
*** @Configuration
*** ImportBeanDefinitionRegistrar
** Who is your boss starters? @EnableAutoConfiguration anatomy
** Ugly internal spring boot starter
** ConfigurationClassParser
*** Configuration and Lite Configuration
** Conditional and shouldSkip in different context initialisation steps
Тема доклада: Service Workers
- Описание проблемы оффлайна и плохого интернета
- Возможные решения
- Описание, цели, поддержка этой технологии
- Примеры
Артур Пархисенко / Livestream / Front-end Engineer
Talk about Spring Boot Internals
* Spring Ripper retrospective
* how to build spring boot project. Maven/Gradle plugins
** DependencyManagement in gradle and maven
** Executable artifacts (war or jar)
** War and Jar anatomy
** Embeded tomcat and standalone tomcat integration – SPI. WebApplicationInitializer and ServletContainerInitializer
** Tomcat in Tomcat like a Crank
** Executable jar anatomy
** Main Class and Start-Class. Java MANIFEST.MF anatomy
** Jar like a War, but Jar – JarCraft
** Runtime ClassPath in spring boot applications
* SpringApplication.run ...
** Arguments
** Sources types
** Two general context type in spring boot app
** Starters and autoconfiguration
** spring.factories and SpringFactoriesLoader
** Merge app sources
** Environment and EnvironmentPostProcessor
** ConfigFileApplicationListener mistakes
** Spring Events vs Spring Boot Events
** Application Initializers
** Context prepare
** BeanDefinitionLoader
* @SpringBootApplication anatomy
** @Import – Three types of arguments
*** ImportSelector
*** @Configuration
*** ImportBeanDefinitionRegistrar
** Who is your boss starters? @EnableAutoConfiguration anatomy
** Ugly internal spring boot starter
** ConfigurationClassParser
*** Configuration and Lite Configuration
** Conditional and shouldSkip in different context initialisation steps
The document discusses SQL SELECT statements and their capabilities. It explains how to write basic SELECT statements to retrieve data from one or more tables, including selecting specific columns, filtering rows, sorting results, and performing calculations. It also covers JOIN operations, including inner joins to combine data from multiple tables and self joins to join a table to itself.
This document provides an overview and introduction to Spring Data JPA, including:
- Refactoring a plain JPA and Spring application to use Spring Data JPA repositories to reduce boilerplate code.
- The Spring Data repository abstraction and how it simplifies data access layers.
- Advanced topics like JPA specifications and QueryDSL for more complex queries.
- Configuring Spring Data JPA in Spring applications.
Spring Data provides abstractions and implementations for accessing relational and NoSQL data stores. It includes modules for specific databases like Spring Data JPA. Repositories provide basic CRUD operations and can define custom query methods. Entities represent database tables with annotations for properties, relationships, and inheritance. The EntityManager manages persistence contexts and entity instances.
This document discusses different types of waits in Selenium, including implicit waits, explicit waits, and fluent waits. It provides examples of using implicit waits to wait for an element to be displayed or throw an exception if not found. Explicit waits allow setting a customizable timeout and waiting for specific events like an element's presence, visibility, or a page loading. The document advises against using implicit and explicit waits together and provides a custom wait example. It also outlines steps for a test using explicit waits to wait for a page header to be visible and a search button to be clickable.
This document discusses different types of waits in Selenium: implicit waits, explicit waits, and fluent waits. Implicit waits globally apply to all elements on a page, while explicit waits allow waiting for specific elements and conditions. It is recommended to use explicit waits over implicit waits to avoid mixing the two. An example is provided to demonstrate implementing an explicit wait to check for an element's visibility before proceeding with a test.
2. Что такое Servlet?
• Сервлет является классом Java, который используется
для расширения возможностей серверов, предназначенных
для размещения приложений. Сервлеты могут отвечать на
запросы и генерировать отклики.
• Базовым классом для всех сервлетов является
javax.servlet.GenericServlet. Этот класс определяет
обобщенный, независимый от протокола сервлет.
• Наиболее распространенный тип сервлета – HTTP-
сервлет. Этот тип сервлета используется в обработке
HTTP-запросов и генерировании HTTP-откликов. HTTP-
сервлет представляет собой класс, который расширяет
класс javax.servlet.http.HttpServlet, являющийся подклассом
базового класса javax.servlet.GenericServlet.
3. Контейнер сервлетов
Servlet Container
• Контейнер сервлетов – это часть Web сервера.
• Контейнер сервлетов обеспечивает сетевые сервисы,
посредством которых отправляются запросы (requests) и
ответы (responses), декодирует запросы основанные на
MIME, и форматирует основанные на MIME ответы.
• Контейнер сервлетов также управляет сервлетами на
протяжении их жизненного цикла.
5. HTTP запросы
• Сервлет должен реализовывать один или более методов для ответов на
определенные HTTP-запросы.
• Эти переопределяемые методы определены в родительском классе
HttpServlet.
• Эти методы названы таким образом, чтобы можно было интуитивно
понять, какой метод использовать в том или ином случае:
HTTP-запрос Метод HTTP-сервлета
GET doGet(HttpServletRequest request, HttpServletResponse response)
POST doPost(HttpServletRequest request, HttpServletResponse response)
PUT doPut(HttpServletRequest request, HttpServletResponse response)
DELETE doDelete(HttpServletRequest request, HttpServletResponse response)
Разработчики приложений никогда не вызывают эти методы напрямую.
Их автоматически вызывает сервер приложений всякий раз, когда получает
соответствующий HTTP-запрос.
6. HTTP запросы
• HTTP-запрос GET генерируется всякий раз, когда пользователь вводит
URL сервлета в адресной строке обозревателя, либо щелкает по
ссылке, указывающей на URL сервлета, либо отправляет HTML-форму с
использованием метода GET, в которой атрибут action указывает на URL
сервлета.
• В любом из этих случаев код сервлета внутри метода doGet()
запускается на выполнение.
• HTTP-запрос POST обычно генерируется, когда пользователь
отправляет HTML-форму с использованием метода POST и ее атрибут
action указывает на URL сервлета. В этом случае код сервлета внутри
метода doPost()запускается на выполнение.
7. Простой сервлет
public class SimpleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) {
try {
response.setContentType(”text/html”);
PrintWriter printWriter = response.getWriter();
printWriter.println(”<h2>”);
printWriter.println(
”Если вы читаете это, ваш сервер приложений работает нормально!”);
printWriter.println(”<h2>”);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
9. Простой сервлет
Сервлет 3.0 делает дескриптор развертывания приложения, файл web.xml,
необязательным.
Сервлеты могут быть сконфигурированы с помощью аннотаций вместо
использования XML.
Если веб-приложение конфигурируется и с помощью аннотаций и с помощью дескриптора
развертывания web.xml, то настройки, указанные в файле web.xml, имеют приоритет.
@WebServlet(name=”simpleservlet”, urlPatterns = {”/simple”})
10. Простая JSP
• JSP – это страница, содержащая и статическую HTML-разметку, и
динамический контент.
• Динамический контент может быть сгенерирован путем
использования фрагментов кода Java, называемых
скриптлетами(scriptlets), или путем использования стандартных или
пользовательских JSP-тегов.
<%@ page language=”java” contentType=”text/html; charset=UTF-8”
pageEncoding=”UTF-8” %>
<%@ page import=”java.util.Date” %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”>
<title>Дата и время сервера</title>
</head>
<body>
<h1>Дата и время сервера: <% out.print(new Date()); %></h1>
</body>
</html>
11. Жизненный цикл JSP
1. Translation
2. Compilation
3. Class Loading
4. Instantiation
5. Initialization
6. Request Processing
7. Destroy
12. Жизненный цикл JSP
1. Translation – JSP контейнер проверяет код
JSP страницы, парсит ее для создания кода
сервлета.
2. Compilation – JSP контейнер компилирует
исходный код jsp класса и создает класс на этой
фазе.
3. Class Loading – контейнер загружает классы
в память на этой фазе.
4. Instantiation – внедрение конструкторов без
параметров созданных классов для
инициализации в памяти классов.
13. Жизненный цикл JSP
5. Initialization – в контейнере вызывается init
метод объекта JSP класса и инициализируется
конфигурация сервлета с init параметрами,
которые указаны в дескрипторе развертывания
(web.xml). После этой фазы JSP способен
обрабатывать запросы клиентов.
Обычно фазы 1-5 происходят после первого
запроса клиента (т.е. ленивая загрузка), но
можно настроить загрузку и инициализацию JSP
на старте приложения по аналогии с
сервлетами.
14. Жизненный цикл JSP
6. Request Processing – длительный этап
жизненного цикла - обработка запросов клиента
JSP страницей.
Обработка является многопоточной и
аналогична сервлетам — для каждого запроса
создается новый поток, создаются
объекты ServletRequest и ServletResponse и
происходит внедрение сервис методов JSP.
7. Destroy – последняя фаза жизненного цикла
JSP на которой JSP класс удаляется из памяти.
Обычно это происходит при выключении
сервера или андеплое приложения.
16. Реализация MVC при помощи
RequestDispatcher
1. Разработать JavaBeans-объекты, которые будут
представлять данные
2. Использовать сервлет для обработки запросов
– Сервлет считывает параметры запроса, проверяет
входные данные и т.д.
3. Поместить данные в JavaBeans-объекты
– Сервлет тем или иным способом вызывает код бизнес-
логики приложения. Результаты помещаются в
JavaBeans-объекты
4. Сохранить JavaBean в объекте request, session, или
servletContext
– Сервлет вызывает метод setAttribute объекта request,
session, или servletContext, чтобы сохранить ссылку на
бин
17. Реализация MVC при помощи
RequestDispatcher
5. Перенаправить (forward) запрос к JSP-странице
– Сервлет определяет, какая JSP –страница нужна в
данной ситуации и использует метод forward() объекта
RequestDispatcher для передачи управления этой
странице.
6. Извлечь данные из JavaBeans.
– JSP страница извлекает данные из бинов при помощи
директивы jsp:useBean с соответствующим параметром
scope. Затем страница использует jsp:getProperty или
выражения Expression Language, чтобы вывести
свойства бина
– JSP не создает и не изменяет бин; она просто
извлекает и отображает данные, созданные сервлетом