Главная страница
Навигация по странице:

  • Joinpoint

  • Pointcut

  • Target object

  • SPRING MVC , Servlet

  • Директивы

  • Скриптлеты

  • Compilation

  • Хочешь, хорошо работать пользуйся Спрингом. Хочешь, чтобы работало хорошо знай его кишки. Навигация


    Скачать 4.45 Mb.
    НазваниеХочешь, хорошо работать пользуйся Спрингом. Хочешь, чтобы работало хорошо знай его кишки. Навигация
    Анкорjjjava
    Дата27.03.2023
    Размер4.45 Mb.
    Формат файлаdocx
    Имя файла2023 Java_Pre-project_2_and_3_module.docx
    ТипДокументы
    #1018551
    страница5 из 8
    1   2   3   4   5   6   7   8
    1   2   3   4   5   6   7   8

    Например транзакции: вспоминаем что благодаря аннотации @Transaction у нас нет кучи повторяющихся rollback, commit и begin по всей программе и все транзакции , отделены от логики вашего бизнеса. Это одна из концепций Aspect Oriented Programming.(AOP).

    Например логирование:

    - У использования АОП подхода к логированию есть несколько преимуществ по сравнению с ручной вставкой логирования:

    - Код для логирования легко внедрять и удалять: всего-то нужно добавить или удалить пару конфигураций некоторого аспекта.

    - Весь исходный код для логирования хранится в одном месте и не нужно находить вручную все места использования.

    - Код, предназначенный для логирования, можно добавить в любое место, будь то уже написанные методы и классы или же новый функционал. Это уменьшает количество ошибок разработчика.

    - Также при удалении аспекта из конфигурации конструкции можно быть абсолютно уверенным, что весь код трассировки удалён и ничего не пропущено.

    - Аспекты — это вынесенный отдельно код, который можно многократно переиспользовать и улучшать.



    1) Аспект (Aspect) — Это модуль, который имеет набор программных интерфейсов, обеспечивающих сквозные требования. К примеру, модуль логирования будет вызывать АОП аспект для логирования. В зависимости от требований, приложение может иметь любое количество аспектов.

    2) Объединённая точка (Joinpoint) — Это такая точка в приложении, где мы можем подключить аспект. Другими словами, это место, где начинаются определённые действия модуля АОП в Spring.

    3) Совет (Advice) — Это фактическое действие, которое должно быть предпринято до и/или после выполнения метода. Это конкретный код, который вызывается во время выполнения программы.

    4) Срез точек (Pointcut) - Срезом называется несколько объединённых точек (join points), в котором должен быть выполнен совет.

    5) Введение (Introduction) — Это сущность, которая помогает нам добавлять новые атрибуты и/или методы в уже существующие классы.

    6) Целевой объект (Target object) — Это объект, на который направлены один или несколько аспектов.

    7) Плетение (Weaving) — Это процесс связывания аспектов с другими объектами приложения для создания совета. Может быть вызван во время компиляции, загрузки или выполнения приложения.

    Как ещё проще объяснить эту парадигму я просто не знаю. Последнее что хочу посоветовать.

    4. Сколько типов Советов (Advice) существует в Spring? (5 типов)

    1) before - Запускает совет перед выполнением метода.

    2) after - Запускает совет после выполнения метода, независимо от результата его работы (кроме случая остановки работы JVM).

    3) after-returning - Запускает совет после выполнения метода, только в случае его успешного выполнения.

    4) after-throwing - Запускает совет после выполнения метода, только в случае, когда этот метод “бросает” исключение.

    5) around - Запускает совет до и после выполнения метода.

    5. Сколько видов Плетения (Weaving) существует в Spring? (3 вида)

    1) Плетение во время компиляции — если у вас есть исходный код аспекта и код, в котором вы используете аспекты, вы можете скомпилировать исходный код и аспект напрямую с помощью компилятора AspectJ;

    2) посткомпиляционное плетение (бинарное плетение) — если вы не можете или не хотите использовать преобразования исходного кода для вплетения аспектов в код, вы можете взять уже скомпилированные классы или jar-файлы и внедрить аспекты;

    3) плетение во время загрузки — это просто бинарное плетение, отложенное до момента, когда загрузчик классов загрузит файл класса и определит класс для JVM.

    Для поддержки этого требуется один или несколько «загрузчиков классов плетения». Они либо явно предоставляются средой выполнения, либо активируются с помощью «агента плетения.

    6. Подходы к реализации AOP в Spring?

    1) Основанный на XML - Применяется конфигурация с помощью конфигурационного XML-файла.

    2) Основанный на аннотациях @AspectJ - Применяется конфигурация с помощью аннотации.

    7. В чём разница между Spring AOP и AspectJ АОП?

    AspectJ де-факто является стандартом реализации АОП. Реализация АОП от Spring имеет некоторые отличия:

    1) Spring AOP немного проще, т.к. нет необходимости следить за процессом связывания.

    2) Spring AOP поддерживает аннотации AspectJ, таким образом мы можем работать в спринг проекте похожим образом с AspectJ проектом.

    3) Spring AOP поддерживает только proxy-based АОП и может использовать только один тип точек соединения – Method Invocation. AspectJ поддерживает все виды точек соединения.

    4) Недостатком Spring AOP является работа только со своими бинами, которые существуют в Spring Context.


    SPRING MVC, Servlet В НАЧАЛО ДОКУМЕНТА

    1. Что такое MVC?

    Шаблон проектирования MVC предполагает разделение данных приложения(model), пользовательского интерфейса(view) и управляющей логики(controller) на три отдельных компонента: Модель, Представление и Контроллер – таким образом, что модификация каждого компонента может осуществляться независимо.

    М одель служит для извлечения и манипуляций данными приложения, Представление отвечает за видимое пользователю отображение этих данных (то есть, в применении к вебу, формирует отдаваемый сервером, браузеру пользователя HTML/CSS), а Контроллер управляет всем этим оркестром.

    Пользователь делает запрос – Контроллер проверяет его корректность и передаёт в Модель – Модель возвращает Контроллеру запрошенные данные или результаты вычислений – Контроллер передаёт Представлению данные, полученные от Модели – Представление приводит данные в читаемый для пользователя вид и показывает ему.

    2. Схема работы Spring MVC?

    1) Клиент отправляет запрос к веб-сервису.

    2) Запрос перехватывается DispatcherServlet, который ищет Handler Mappings и соответствующий тип.

    3) Запрос обрабатывается контроллером, результат передаётся DispatcherServlet, а потом перенаправляется view.

    3. Spring MVC? (DispatcherServlet)

    1) Model (Модель) инкапсулирует (объединяет) данные приложения, в целом они будут состоять из POJO («Старых добрых Java-объектов», или бинов).

    2) View (Отображение, Вид) отвечает за отображение данных Модели, — как правило, генерируя HTML, которые мы видим в своём браузере.

    3) Controller (Контроллер) обрабатывает запрос пользователя, создаёт соответствующую Модель и передаёт её для отображения в Вид.

    Spring MVC построен вокруг центрального сервлета, который распределяет запросы по контроллерам. DispatcherServlet – полностью интегрированный сервлет в Spring IoC контейнер и получает доступ ко всем возможностям Spring. Является также основным контроллером.

    1 ) После получения HTTP-запроса DispatcherServlet обращается к интерфейсу HandlerMapping, который определяет, какой Контроллер должен быть вызван, после чего, отправляет запрос в нужный Контроллер.

    2) Контроллер принимает запрос и вызывает соответствующий служебный метод, основанный на GET или POST. Вызванный метод определяет данные Модели, основанные на определённой бизнес-логике, и возвращает в DispatcherServlet имя Вида (View).

    3) При помощи интерфейса ViewResolver, DispatcherServlet определяет, какой Вид нужно использовать на основании полученного имени.

    4) После того, как Вид (View) создан, DispatcherServlet отправляет данные Модели в виде атрибутов в Вид, который в конечном итоге отображается в браузере.

    Компоненты, HandlerMapping, Controller и ViewResolver, являются частями интерфейса WebApplicationContext extends ApplicationContext.

    4. Конфигурирование DispatcherServlet?

    Вам будет необходимо связать (замапить) запросы, которые Вы хотите обработать при помощи DispatcherServlet, путём указания URL в файле web.xml. Стандартная конфигурация Java EE для настройки DispatcherServlet:

    В се запросы, начинающиеся с /example будут обработаны в диспетчере с именем example.


    Также можно настроить его с помощью аннотаций:



    WebApplicationInitializer – предоставляемый Spring MVC, гарантирует инициализацию при старте контейнера.

    5. Отличие Контроллера от Сервлета?

    Контроллер — это часть шаблона Model-View-Controller.

    Сервлет — это часть сервера (обычно веб-контейнера) и может быть контроллером.
    Сервлет и контроллер Spring MVC можно использовать для выполнения того же самого действия, но они действуют на разных уровнях приложения Java.

    Сервлет является частью структуры J2EE, и каждый сервер приложений Java (Tomcat, Jetty и т.д.) создан для запуска сервлета. Сервлет — это уровень "низкого уровня" в стеке J2EE. Вам не нужен сервлет .jar для запуска приложения, поскольку он предварительно упакован с сервером приложений.

    A Spring MVC-контроллер — это библиотека, построенная на сервлете, чтобы упростить задачу. Spring MVC предлагает встроенные функции, такие как параметр формы для сопоставления параметров метода контроллера, упрощение обработки представлений двоичной формы (т.е. когда ваша форма может загружать файлы). Вам необходимо упаковать необходимые банки в ваше приложение, чтобы запустить Spring MVC Controller.

    6. Что такое Сервлет? (интерфейс HttpServlet)

    Сервлет является интерфейсом Java, реализация которого расширяет функциональные возможности сервера.

    Сервлет — это класс, расширяющий HttpServlet, он умеет получать запросы от клиента и возвращать ему ответы. Да, сервлеты в Java — именно те элементы, с помощью которых строится клиент-серверная архитектура.

    Сервлеты имеют три метода:

    1) void doGet(HttpServletRequest request, HttpServletResponse response){}

    2) void doPost(HttpServletRequest request, HttpServletResponse response){}

    3) void processRequest(HttpServletRequest request, HttpServletResponse response){}

    processRequest будет обрабатывать и геты и посты, приходящие к сервлету.

    Параметры запроса мы вытаскиваем из request, результат записываем в response. Респонс уходит к браузеру клиента.

    Пройдя по этой ссылке, можно посмотреть остальные методы.
    Всем сервлеты хороши, но только один сервлет может быть на странице. Два сервлета не влезут — слишком важные персоны. Как же быть, если очень хочется на одну страницу поместить сервлет-калькулятор и сервлет-переводчик? (Portlet)

    Очень просто — написать два портлета, один будет считать, второй — переводить. Два, три, много портлетов можно поселить на одной странице. Классический портлет в редакции Sun имеет три режима: view, edit, help. Первый — основной, его видит пользователь. В случае калькулятора, в режиме view (просмотр) будут доступны кнопки. В режиме edit (настройки), например, можно задавать тип калькулятора: обычный или научный, с синусами, косинусами и прочими мудрёными вещами. В режиме help (справка)? как вы уже догадались, будет справка по калькулятору.

    7. Жизненный цикл сервлета состоит из? (три метода, init, service, destroy)

    Жизненный цикл сервлета управляется контейнером.

    1) В случае отсутствия сервлета в контейнере.

    1. Класс сервлета загружается контейнером.

    2. Контейнер создает экземпляр класса сервлета.

    3. Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только один раз.

    2) Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Данный метод проверяет тип запроса (POST, GET и т.д.) и вызывает соответствующий метод (doPost, doGet и т.д.). Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.

    3) В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета. Используется, для таких задач, как запись данных в cookie, закрытие соединения с базой данных и т.д.

    4) Полное уничтожение сервлета сборщиком мусора Java (Garbage Collector).

    8. Что такое контейнер сервлетов?

    Это программа, которая запускается на сервере и умеет взаимодействовать с созданными нами сервлетами. Если мы хотим запустить наше веб-приложение на сервере, мы сначала разворачиваем контейнер сервлетов, а потом помещаем в него сервлеты. Кроме маршрутизации запросов, контейнер сервлетов выполняет и другие функции:

    1) Динамически генерирует HTML-страницы с JSP-файлов;

    2) Зашифровывает/расшифровывает HTTPS-сообщения;

    3) Организация клиентских сессий;

    4) Идентификация и авторизация клиентов;

    5) Создание программной среды для функционирования сервлета;

    6) В большинстве случаев — управление метаданными (заголовки, методы и прочее).

    Самый популярный контейнер сервлетов — Apache Tomcat. Он имеет открытый исходный код, и его можно использовать бесплатно. Ещё есть: GlassFish, WildFly, Jetty, WebLogic, WebSphere. Подробнее тут!

    9. Динамическая генерация HTML-страниц в контейнер сервлетов? JSP (Java Server Pages)

    Браузер понимает HTML язык. Для того чтобы взаимодействовать с браузером нам нужно этот html выучить.

    А теперь представь идеальный мир, где вместо HTML-кода можно писать JAVA-код, используя привычные переменные, циклы, массивы и другие конструкции языка. Речь идет о технологии JSP (Java Server Pages). Если коротко, это технология, которая позволяет вставлять в HTML-страницу куски JAVA-кода. Правда, потом этот код всё равно превращается в HTML перед отправкой клиенту, но он будет динамически сгенерирован с учётом различных факторов.

    Превращение JAVA-кода из JSP в HTML-код осуществляет контейнер сервлетов. Когда сервлет собирается вернуть в качестве ответа JSP-контент, контейнер обращает на это внимание, и перед отправкой такого контента клиенту, сначала превращает его в понятную для браузера HTML-страницу.

    Известно много аналогов технологии JSP — Thymeleaf, FreeMarket, Mustache и другие. Все они работают по схожему принципу. Какой из них выбирать для работы — дело вкуса.

    10. Расскажи немного о Thymeleaf?

    Thymeleaf это библиотека, которая позволяет хранить html шаблоны на стороне сервера и выдавать их по вызову определённого кода.

    Когда пользователь сидит в Интернете (через браузер), то, что ему показывается — это html страница, которую он запросил, когда ввёл в поисковую строку запрос. Всё, что находится на странице, оформлено в виде файла, который имеет расширение html и который состоит из html тегов. Вот такой файл и позволяет хранить на сервере Thymeleaf движок. Он не просто позволяет его хранить там, но также имеет функционал для управления контентом этого файла.

    Информация тут.

    11. Какие типы шаблонов может обрабатывать Thymeleaf?

    Thymeleaf позволяет работать с шестью типами шаблонов, они называются «Формат шаблона/Template Mode»:

    1) HTML, 2) XML, 3) TEXT, 4) JAVASCRIPT, 5) CSS, 6) RAW

    Итого: два markup формата (HTML and XML), три текстовых (TEXT, JAVASCRIPT и CSS) и простой формат (RAW).

    Подробнее тут! Посмотреть синтаксис можно здесь! и ЗДЕСЬ!

    12. Что такое Java Server Pages (JSP)?

    Java Server Pages – технология, которая позволяет создавать динамические веб-страницы для Java приложений, является платформопереносимой поэтому может выполняться на любом сервере.

    JSP – позволяет отделить динамическую часть Web-страниц от статического HTML. Вы, пишете обычный код в HTML, используя для этого любую программу для создания Web страниц. Затем заключаете динамическую часть кода в специальные теги, большинство которых начинаются с "<%" и завершаются "%>". Примеры синтаксиса.

    JSP транслируется в код Java-сервлета.

    Технология JSP использует следующие компоненты :

    1) Директивы (JSP directive) для определения параметров страницы, подключения ресурсов, использования нестандартных библиотек тегов.

    2) Действия (JSP actions) для воздействия на стандартный поток вывода, использования, модификации и создания объектов, динамического подключения файла и компонентов JavaBeans, перенанаправления на другую страницу.

    3) Скриптлеты (JSP scriptlets) для использования кода Java на странице JSP.

    4) Библиотеки тегов (tag library) для расширения свойств библиотеки.

    Смотри сюда! и вот сюда!

    13. Фазы жизненного цикла JSP (7 фаз)

    Исходный код JSP страницы ближе к HTML, чем к java-классу (сервлету). Конвертацию JSP страницы в java-код осуществляет сервер приложений типа Tomcat, который при первом обращении к JSP странице создает исходный код сервлета (java-класса). Сервлет размещается в директории /webapp/org/apache/jsp. Полный путь директории TOMCAT/work/Catalina/localhost/WEBAPP/org/apache/jsp. В исходном коде сервлета определён путь (пакет) package org.apache.jsp.

    Жизненный цикл JSP страницы практически совпадает с жизненным циклом сервлета :

    1) Translation Cервер приложений "парсит" код JSP страницы и формирует java-класс сервлета. Если страница JSP называется index.jsp, то созданный сервлет обычно будет иметь имя index_jsp.java.

    2) Compilation Cервер приложений компилирует исходный код JSP класса и создает класс (class).

    3) Class Loading Контейнер JSP загружает class сервлет в память.

    4) Instantiation Внедрение конструкторов без параметров для инициализации класса в памяти.

    5) Initialization вызывается метод init объекта JSP и выполняется инициализация сервлета параметрами, указанными в дескрипторе приложения web.xml. После этой фазы JSP сервлет "загружен в память" и готов для обработки запросов пользователей.

    Обычно это происходит при первом запросе, т.е. выполняется "ленивая загрузка". Но можно настроить загрузку и инициализацию JSP по аналогии с сервлетами на старте приложения;

    6) Request Processing Обработка запросов клиента JSP страницей. Обработка является многопоточной, аналогично сервлетам — для каждого запроса создается отдельный Thread, объекты ServletRequest и ServletResponse.

    7) Destroy Удаление JSP класса из памяти. Обычно это происходит при остановке сервера или выгрузки из контейнера JSP приложения.

    14. Методы жизненного цикла JSP (3 метода)

    Сервер приложений (например, Tomcat, GlassFish) создает из JSP-страницы класс сервлета, наследующего свойства org.apache.jasper.runtime.HttpJspBase и включающего следующие методы :

    1) jspInit() Метод вызывается в жизненном цикле JSP один раз для инициализации конфигурационных параметров, указанных в дескрипторе приложения;

    2) jspService(HttpServletRequest, HttpServletResponse) Метод вызывается сервером приложений при каждом обращении пользователя к странице с передачей объектов запроса и ответа;

    3) jspDestroy() Метод вызывается сервером приложений для удаления объекта из памяти на последней фазе жизненного цикла JSP.

    15. Отличия JSP от сервлета?

    Ключевое отличие: «JSP (Java Server Pages)» — это технология на стороне сервера, тогда как «Servlet» — это небольшая программа, работающая на сервере. Обе эти технологии Java используются для создания динамических веб-страниц.




    JSP

    Servlet

    Кто они такие

    JSP — это язык сценариев веб-страниц, обычно используемый для создания динамического веб-контента.

    Сервлеты — это Java-программы, которые уже скомпилированы и которые также создают динамический веб-контент.

    типично

    JSP обычно больше ориентирован на отображение информации.

    Сервлет больше ориентирован на обработку информации.

    Роль в MVC

    JSP действует как зритель.

    Сервлет действует как контроллер.

    Применимо во время

    Они, как правило, предпочтительны, когда не требуется много обработки данных.

    Обычно они предпочтительнее, когда требуется больше обработки и манипуляций.

    Скорость

    JSP работает медленнее чем сервлет. JSP компилируется в сервлеты Java.

    Сервлеты работают быстрее чем JSP.

    Кодовые сложности

    Программирование кода легко по сравнению с сервлетами.

    Программирование кода сложнее, чем в JSP.

    объект

    Здесь мы можем создавать собственные теги, которые могут напрямую вызывать Java-бины.

    В сервлетах такого объекта нет.

    Состоит из

    JSP — это Java-представление HTML, смешанное с скриптлетами JAVA.

    Сервлет — это полнофункциональный Java-код.

    Примеры

    Для отображения отчёта.

    Для обработки, пользователь отправил форму.




    16. Как создать свой сервлет?

    Чтобы создать свой первый сервлет, нужно использовать библиотеку servlet-api.jar, который поставляется вместе с Tomcat (можно найти в папке lib).

    Чтобы из обычного класса сделать http-сервлет, его нужно унаследовать от класса HttpServlet. Над классом указываем аннотацию @WebServlet(), в которой привязываем (мапим) сервлет к конкретному пути (“/hello”) и переопределяем один метод — doGet.

    1 ) Метод setContentType важен для тех, кто использует русский язык — прежде чем показывать страницу с русским текстом браузер должен быть проинформирован, что мы собираемся выводить именно русский текст на экран и браузер должен использовать кодировку, которая нам подходит.

    2) Получение Writer-класса для вывода данных. Здесь очень важно отметить следующий момент — вывод может осуществляться как посимвольно, так и побайтно. Для вывода текста используется посимвольный вывод, для вывода двоичных файлов используется побайтный. Reader/Writer — чтение/запись символов. InputStream/OutputStream — чтение/запись байтов.

    17. Что делать если вылезает 404 ошибка в root пути?

    Создадим сервлет и замапим его на начальную страницу @WebServlet("/"). Задача этого сервлета — перенаправлять запросы на путь “/hello”. Сделать это можно двумя способами: с помощью forward или redirect.



    1) forward — делегирует обработку запроса другому сервлету на сервере, клиент при этом не задействуется. Для этого в метод doGet() нового сервлета нужно добавить такой код:



    Мы обращаемся к контексту сервлетов, из него достаем диспетчер запросов нужного сервлета и просим его обработать конкретный запрос с указанными параметрами (req, resp).

    2) redirect — возвращает клиенту адрес, по которому нужно обратиться для обработки его запроса. Большинство браузеров переходит на переданную ссылку автоматически. Для реализации редиректа нужно добавить этот код:



    18. В чём разница между Model, ModelMap, ModelAndView?

    M odel – это интерфейс. Он предназначен для добавления атрибутов в модель. Содержит четыре метода addAttribute и один метод merAttribute.




    ModelMap – класс содержащий модель. Для использования с UI tools.Supports цепными вызовами и генерацией имен атрибутов модели. Реализует интерфейс LinkedHashMap. Он также содержит его методы.
    M odelAndView – это просто контейнер. Содержит модель и имя представления. Это позволяет контроллеру возвращать и то, и другое как одно значение.

    19. Где должны располагаться статические (css, js, html) ресурсы в Spring MVC приложении?

    Расположение статических ресурсов можно настроить. В документации Spring Boot рекомендуется использовать /static, или /public, или /resources, или /META-INF/resources

    Apache Tomcat В НАЧАЛО ДОКУМЕНТА

    1. Что такое Tomcat?

    Tomcat — это контейнер сервлетов: именно он обрабатывает входящие запросы извне и передаёт их нашему приложению. Имеет открытый исходный код, и выполняет функцию веб-сервера.

    Tomcat представляет собой Java-приложение, которое заботится об открытии порта для взаимодействия с клиентом, настройке сессий, количестве запросов, длине заголовка и ещё многих операциях.

    2. Из чего состоит Tomcat?

    Tomcat имеет компоненты, выполняющие определенные функции, и о них стоит знать.


    написать администратору сайта