java сервлеты и jsp сборник рецептов java сервлеты и jsp
Сервлеты и JSP в Java
Web – это система интернет-серверов, которая поддерживает форматированные документы. Документы форматируются с использованием языка разметки, называемого HTML (HyperText Markup Language), который поддерживает ссылки на другие документы, такие как графические, аудио- и видеофайлы и т. д.
HTTP (протокол передачи гипертекста)
HTTP используется клиентами и серверами для общения в сети. Он считается протоколом без сохранения состояния, поскольку поддерживает только один запрос на соединение. С помощью HTTP клиенты подключаются к серверу для отправки одного запроса, а затем отключаются. И этот механизм позволяет большему количеству пользователей подключаться к данному серверу в течение определенного периода времени. Здесь клиент отправляет HTTP-запрос, а сервер отвечает клиенту с помощью HTML-страницы, используя HTTP.
Введение в сервлеты
Сервлет – это программный модуль Java на стороне сервера, который обрабатывает запросы клиентов и реализует интерфейс сервлета. Могут отвечать на любые запросы, и они обычно используются для расширения приложений, размещаемых на веб-серверах.
Жизненный цикл
Весь жизненный цикл сервлета управляется контейнером сервлета, который использует интерфейс javax.servlet.Servlet для понимания объекта сервлета и управления им.
Жизненный цикл сервлета проходит в основном четыре этапа:
Загрузка
Когда сервер запускается, контейнер сервлета развертывается и загружает все сервлеты.
Инициализация
Затем сервлет инициализируется путем вызова метода init(). Метод Servlet.init() вызывается контейнером Servlet для уведомления о том, что этот экземпляр Servlet успешно создан и готов к запуску.
Обработка запросов
Затем сервлет вызывает метод service() для обработки запроса клиента и вызывается для информирования сервлета о клиентских запросах.
Уничтожение
Наконец, сервлет завершается вызовом destroy(). Метод запускается только один раз за время существования сервлета и сообщает об окончании экземпляра сервлета.
Методы init() и destroy() вызываются только один раз. Наконец, сервлет – это сборщик мусора сборщиком мусора JVM. Итак, на этом завершается жизненный цикл сервлета.
Шаги по созданию
Чтобы создать сервлет, нам нужно выполнить несколько шагов по порядку. Они заключаются в следующем:
Теперь, основываясь на вышеописанных шагах, давайте создадим программу, чтобы лучше понять, как работает сервлет.
Для запуска программы сервлета у нас должен быть установлен и настроен сервер Apache Tomcat. Eclipse для Java EE предоставляет встроенный Apache Tomcat. Как только сервер настроен, вы можете начать с вашей программы. Следует отметить один важный момент – для любой программы сервлета вам нужно 3 файла – файл index.html, файл классов Java и файл web.xml. Самый первый шаг – создать динамический веб-проект, а затем продолжить.
Теперь давайте рассмотрим пример, в котором будем создавать простой сервлет входа в систему и отображать вывод в браузере.
Сначала создадим файл index.html.
Далее закодируем файл класса Java.
В приведенном выше коде установили условие – если имя пользователя и пароль равны edureka, только тогда он будет отображаться успешно вошли в систему, в противном случае вход будет отказано. После написания файла класса Java последний шаг – добавить сопоставления в файл web.xml. Давайте посмотрим, как это сделать.
Файл web.xml будет присутствовать в папке WEB-INF вашего веб-контента. Если его нет, вы можете щелкнуть по дескриптору развертывания и нажать «Создать заглушку дескриптора развертывания». Как только вы подготовите файл web.xml, нужно добавить в него сопоставления. Давайте посмотрим, как выполняется сопоставление на следующем примере:
Универсальные
Это независимый от протокола сервлет, который должен переопределять метод service() для обработки клиентского запроса. Метод service() принимает два аргумента: объект ServletRequest и объект ServletResponse. Работа объекта запроса состоит в том, чтобы информировать сервлет о запросе, сделанном клиентом, в то время как объект ответа возвращает ответ клиенту. GenericServlet является абстрактным классом, и у него есть только один абстрактный метод – service(). В этом вся концепция, когда мы создаем универсальный сервлет путем расширения класса GenericServlet, мы должны переопределить метод service().
Теперь давайте посмотрим, как создать и вызвать универсальный сервлет. Будем кодировать 3 файла, как показано ниже:
HTML-файл
Мы создаем файл HTML, который будет вызывать сервлет, как только нажмем на ссылку на веб-странице. Создайте этот файл в папке WebContent. Путь к этому файлу должен выглядеть следующим образом: WebContent / index.html
Файл класса Java
Здесь мы будем создавать универсальный сервлет, расширяя класс GenericServlet. При создании GenericServlet необходимо переопределить метод service(). Щелкните правой кнопкой мыши на папке src и создайте новый файл класса и назовите файл как общий. Путь к файлу должен выглядеть следующим образом: Java Resouces / src / default package / generic.java
web.xml
Этот файл можно найти по этому пути. WebContent / WEB-INF / web.xml. В этом файле мы сопоставим сервлет с конкретным URL. Поскольку вызываем страницу приветствия после нажатия на ссылку в index.html, она отобразит страницу приветствия в класс Servlet, который уже создали выше.
После этого запустите сервер Tomcat и запустите сервлет. Вы получите желаемый результат. Так что это все о универсальных сервлетов. Теперь давайте двигаться дальше и понять концепцию отслеживания сеансов.
Отслеживание сеансов
Сессия просто означает определенный интервал времени. Отслеживание сеанса – это метод поддержания состояния (данных) пользователя, также известный как управление сеансом в сервлете. Таким образом, каждый раз, когда пользователь запрашивает сервер, сервер обрабатывает запрос как новый запрос.
Чтобы распознать конкретного пользователя, нам нужно отслеживать сеанс.
Файлы cookie
Файл cookie – это небольшой фрагмент информации, который сохраняется между несколькими клиентскими запросами. Имеет имя, одно значение и дополнительные атрибуты, такие как комментарий, путь и квалификаторы домена, максимальный возраст и номер версии.
Как работает Cookie?
Поскольку это метод отслеживания сеансов, по умолчанию каждый запрос рассматривается как новый запрос.
Теперь, когда вы поняли, как работают файлы cookie, давайте рассмотрим небольшой пример, иллюстрирующий использование файлов cookie.
Давайте посмотрим пример создания файла cookie, добавления ответа и получения результатов.
Пример
Теперь давайте создадим простую HTML-форму для файлов cookie.
Теперь последний шаг – создать файл XML и добавить в него все сопоставления.
Теперь вы готовы к казни. Вы можете запустить код и получить желаемый результат. Вот как работает cookie.
Страницы сервера Java
JSP или Java Server Pages – это технология, которая используется для создания веб-приложений точно так же, как технология сервлетов. Это расширение Servlet – поскольку оно предоставляет больше функциональных возможностей, чем сервлет, такой как язык выражений, JSTL и т. Д. Страница JSP состоит из тегов HTML и тегов JSP. Страницы JSP легче поддерживать, чем сервлет, потому что мы можем разделить проектирование и разработку.
Элементы сценариев
Элементы сценариев предоставляют возможность вставлять Java-код в JSP. Существует три типа элементов сценариев:
Тег скриптлета
Используется для выполнения исходного кода Java в JSP.
В этом примере мы создали два файла index.html и welcome.jsp. Файл index.html получает имя пользователя от пользователя, а файл welcome.jsp печатает имя пользователя с приветственным сообщением. Теперь давайте посмотрим на код.
Тег выражения
Код, помещенный в тег выражения JSP, записывается в выходной поток ответа. Поэтому вам не нужно записывать out.print() для записи данных. Он в основном используется для печати значений переменной или метода.
Теперь давайте возьмем небольшой пример отображения текущего времени. Чтобы отобразить текущее время, мы использовали метод getTime() класса Calendar. GetTime() является методом экземпляра класса Calendar, поэтому мы вызвали его после получения экземпляра класса Calendar методом getInstance().
Тег объявления
Используется для объявления полей и методов. Код, написанный внутри тега объявления JSP, размещается вне метода service() автоматически сгенерированного сервлета. Так что он не получает память при каждом запросе.
В приведенном ниже примере тега объявления JSP мы определяем метод, который возвращает куб с заданным числом, и вызываем этот метод из тега выражения JSP. Но мы также можем использовать тег скриптлета JSP для вызова объявленного метода. Посмотрим как. Файл: index.jsp
Объекты запросов и ответов
Запрос JSP – это неявный объект типа HttpServletRequest, который создается для каждого запроса JSP веб-контейнером. Он может использоваться для получения информации запроса, такой как параметр, информация заголовка, удаленный адрес, имя сервера, порт сервера, тип содержимого, кодировка символов и т. Д. Он также может использоваться для установки, получения и удаления атрибутов из области запроса JSP.
Пример неявного объекта запроса JSP
Неявный объект ответа JSP
В JSP ответ является неявным объектом типа HttpServletResponse. Экземпляр HttpServletResponse создается веб-контейнером для каждого запроса JSP. Он может использоваться для добавления или манипулирования ответами, такими как перенаправление ответа на другой ресурс, ошибка отправки и т. д.
Пример ответа неявного объекта
1 комментарий к “Сервлеты и JSP в Java”
Понимаю все. Только что такое есть создать структуру каталогов? Какая она?
Создаём веб-приложение с Java Servlets
Авторизуйтесь
Создаём веб-приложение с Java Servlets
Одной из самых приятных особенностей Java является её многогранная природа. Конечно, создание традиционных десктопных и даже мобильных приложений — это здорово. Но что, если вы хотите уйти с проторенных дорожек и зайти на территорию разработки web приложений на Java? Для вас есть хорошая новость: в комплекте с языком идёт полноценный Servlet API, который позволяет вам создавать надёжные веб-приложения без особых хлопот.
Это статья для продолжающих. Если вы только начинаете знакомство с Java, советуем пройти быстрый старт, посмотреть видеокурс и выбрать одну из книг для новичков.
Создание приложений на Java с помощью Servlets
Встречайте сервлеты, особый тип Java-программ, выполняемый в пределах веб-контейнера (также называемый контейнером сервлетов, как, например, Tomcat и Jelly), которые позволяют обрабатывать запросы клиентов и ответы сервера просто и эффективно. Сейчас не время и не место дотошно объяснять вам, что из себя представляет сервлет. Достаточно сказать, что сервлеты создаются и уничтожаются их контейнерами, а не разработчиком, и действуют как промежуточный уровень между клиентами (как правило, веб-браузерами) и другими приложениями, запущенными на сервере (например, базами данных).
Сервлет — классная штука, которая помимо всего прочего может принимать данные от клиента, как правило через GET и POST-запросы, работать с cookie и параметрами сеанса. А ещё она обрабатывает данные через дополнительные уровни приложений и отправляет выходные данные клиенту как в текстовом, так и в бинарном форматах (HTML, XML, PDF, JPG, GIF и т.д.), во многих случаях используя Java Server Pages (JSP) файлы.
Лучше всего начинать работу с сервлетами через конкретный пример. Мы создадим простое веб-приложение, которое позволит клиентам регистрироваться с помощью простой HTML-формы. Данные, предоставленные клиентами, будут собираться сервлетом и проверяться валидаторами.
Разбираемся с конфигурационными файлами
Чтобы вы понимали структуру нашего будущего приложения, вот как она будет выглядеть:
Первым шагом к созданию приложения является определение так называемого дескриптора развёртывания. Он указывает, как приложение должно быть развёрнуто в определенной среде. Когда дело касается веб-приложений, дескриптор развёртывания представляет собой простой XML-файл, называемый web.xml и является частью стандартной спецификации Java EE. В нашем случае он будет выглядеть так:
Так как наше приложение будет использовать Servlet API и Java Servlet Pages (JSP) для отображения данных клиента, нам нужно загрузить все необходимые JAR. Maven сделает за нас трудную работу, вот как будет выглядеть файл POM:
Если говорить просто, pom.xml определяет все зависимости, необходимые для работы с сервлетами: JSP, Java Standard Tag Library (JSTL) и Java Expression Language (JEL).
Итак, мы уже создали конфигурационные файлы приложения. Однако в текущем состоянии оно буквально ничего не делает. Мы хотим, чтобы клиенты могли регистрироваться с помощью HTML-формы, поэтому следующее, что нам нужно сделать, — это создать JSP-файлы, которые будут отображать вышеупомянутую форму и данные клиента после успешного завершения регистрации. Этим мы сейчас и займёмся.
Работаем над внешним видом
Внешний вид приложения будет определяться двумя JSP-файлами — в контексте MVC они называются представлениями. Первый будет отвечать за отображение формы регистрации и возможных ошибок, вызванных после проверки введённых данных. Второй будет обычной страницей приветствия, в которой будут показаны данные, введённые клиентом, после успешного завершения процесса регистрации.
Вот первый JSP-файл:
Скоро мы увидим, как сервлет связывается с URL processcustomer и как он взаимодействует с введёнными данными. А пока давайте посмотрим на JSP-файл, который отвечает за страницу приветствия:
Теперь, когда мы разобрались с отображением страниц, следующим шагом будет создание сервлета, ответственного за сбор данных клиента из POST-запросов и подтверждение данных простым способом.
Пишем контроллер
Написать сервлет, способный получить данные из формы регистрации, проще простого. Всё, что нам нужно сделать, — это написать подкласс для класса HttpServlet и реализовать его методы doGet() или doPost() (или оба, если надо). В данном случае сервлет будет взаимодействовать с данными, поступающими из POST-запросов.
Вот как он выглядит:
Валидаторы — это простые классы, которые проверяют определённые свойства, например, является ли строка пустой и выглядит ли email как email. На GitLab автора можно посмотреть на их реализацию.
Результат валидации влияет на дальнейший ход событий: если данные не валидны, клиент перенаправляется через объект RequestDispatcher на страницу регистрации, где отображаются соответствующие ошибки. Если всё в порядке, то отображается страница приветствия.
Итак, мы создали целое веб-приложение на Java, которое позволяет зарегистрировать клиентов с помощью HTML-формы, базового сервлета и нескольких JSP-файлов. Пора его запустить.
Запускаем приложение
Для запуска приложения нужно проделать следующие шаги:
Заключение
Итак, вы приобрели все навыки, необходимые для создания собственного веб-приложения на Java без необходимости прибегать к сложным фреймворкам. Всё, что вам нужно, — Servlet API, технология вроде JSP для отображения и встроенные средства Java. Здорово, правда?
Стоит отметить, что реализация класса CustomerController подчеркивает достоинства и недостатки сервлетов: с одной стороны, он вкратце показывает, насколько легко обрабатывать параметры запроса и отправлять ответы клиенту в разных форматах. Но эта функциональность имеет свою цену: обе реализации интерфейсов HttpServletResponse и HttpServletResponse являются обычными локаторами служб. Нельзя сказать, что это плохо, поскольку локаторы просто содержат данные. Однако нужно помнить, что эти реализации будут всегда привязаны к сервлету.
Учебник по сервлетам – Java
Учебник по сервлетам. Учебник по сервлетам Java для начинающих. CGI против сервлета. Пример Проекта Входа в Сервлет. Иерархия Сервлетов. Сервлет 3 Аннотации, Атрибуты
Учебник по сервлетам
Учебник по сервлету направлен на предоставление более подробной информации о сервлете java, основных интерфейсах в API сервлета Java, аннотациях сервлета 3.0, жизненном цикле сервлета, и в конце мы создадим простое приложение для примера сервлета входа.
Учебник по сервлетам – Обзор
Сервлет-это управляемая сервером Java EE технология для создания веб-приложений на java. Пакеты javax.servlet и javax.servlet.http предоставляют интерфейсы и классы для написания наших собственных сервлетов.
В большинстве случаев доступ к веб-приложениям осуществляется по протоколу HTTP, и именно поэтому мы в основном расширяем класс HttpServlet.
Общий интерфейс шлюза (CGI)
До внедрения Java Servlet API технология CGI использовалась для создания динамических веб – приложений. Технология CGI имеет множество недостатков, таких как создание отдельного процесса для каждого запроса, код, зависящий от платформы (C, C++), высокое использование памяти и низкая производительность.
CGI против сервлета
Технология сервлетов Java была внедрена для преодоления недостатков технологии CGI.
Иерархия API сервлетов
javax.сервлет.Сервлет является базовым интерфейсом API сервлета. Существуют некоторые другие интерфейсы и классы, о которых мы должны знать при работе с сервлетами. Также в спецификациях Servlet 3.0 API servlet ввел использование аннотаций, а не всю конфигурацию сервлета в дескрипторе развертывания. В этом разделе мы рассмотрим важные интерфейсы API сервлетов, классы и аннотации, которые мы будем использовать в дальнейшем при разработке нашего приложения. На приведенной ниже диаграмме показана иерархия API сервлетов.
Интерфейс Сервлета
Интерфейс ServletConfig
javax.сервлет.ServletConfig используется для передачи информации о конфигурации сервлету. Каждый сервлет имеет свой собственный объект ServletConfig, и контейнер сервлета отвечает за создание экземпляра этого объекта. Мы можем предоставить параметры инициализации сервлета в web.xml файл или с помощью WebInitParam аннотации. Мы можем использовать метод getServletConfig() для получения объекта ServletConfig сервлета.
Важными методами интерфейса ServletConfig являются:
Интерфейс ServletContext
javax.сервлет.Интерфейс ServletContext предоставляет сервлету доступ к переменным веб-приложения. ServletContext является уникальным объектом и доступен для всех сервлетов в веб-приложении. Если мы хотим, чтобы некоторые параметры инициализации были доступны нескольким или всем сервлетам в веб-приложении, мы можем использовать объект ServletContext и определить параметры в web.xml используя элемент. Мы можем получить объект ServletContext с помощью метода getServletContext() ServletConfig. Механизмы сервлетов также могут предоставлять объекты контекста, уникальные для группы сервлетов и привязанные к определенной части пространства имен URL-адресов хоста.
Некоторые из важных методов ServletContext являются:
Примечание : В идеале имя этого интерфейса должно быть ApplicationContext, потому что оно предназначено для приложения и не относится к какому-либо сервлету. Также не путайте его с контекстом сервлета, переданным в URL-адресе для доступа к веб-приложению.
Интерфейс ServletRequest
Интерфейс ServletRequest используется для предоставления информации о запросе клиента сервлету. Контейнер сервлета создает объект ServletRequest из запроса клиента и передает его методу servlet service() для обработки.
Некоторые из важных методов интерфейса ServletRequest являются:
Интерфейс ответа сервлету
Интерфейс ServletResponse используется сервлетом при отправке ответа клиенту. Контейнер сервлета создает объект ServletResponse и передает его методу servlet service (), а затем использует объект response для создания HTML-ответа для клиента.
Некоторые из важных методов в HttpServletResponse являются:
Интерфейс диспетчера запросов
Интерфейс RequestDispatcher используется для пересылки запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же контексте. Мы также можем использовать это для включения содержимого другого ресурса в ответ. Этот интерфейс используется для связи сервлетов в том же контексте.
В этом интерфейсе определены два метода:
Мы можем получить RequestDispatcher в сервлете, используя ServletContext getRequestDispatcher(путь к строке) метод. Путь должен начинаться с/и интерпретироваться как относительно текущего корневого контекста.
Класс GenericServlet
Одним из важных методов в классе GenericServlet является метод без аргумента init (), и мы должны переопределить этот метод в нашей программе сервлета, если нам нужно инициализировать некоторые ресурсы перед обработкой любого запроса от сервлета.
Класс HttpServlet
HttpServlet-это абстрактный класс, который расширяет GenericServlet и обеспечивает основу для создания веб-приложений на основе HTTP. Существуют методы, определенные для переопределения подклассами для различных методов HTTP.
Атрибуты Сервлета
Атрибуты сервлета отличаются от параметров инициализации, определенных в web.xml для ServletConfig или ServletContext.
Аннотации в сервлете 3
До сервлета 3 все отображение сервлета и его параметры инициализации использовались для определения в web.xml, это было неудобно и более подвержено ошибкам, когда в приложении огромное количество сервлетов.
Сервлет 3 представил использование аннотаций java для определения сервлета, фильтра и прослушивателя сервлетов и параметров инициализации.
Некоторые из важных аннотаций сервлета являются:
Примечание: Мы рассмотрим фильтры и прослушиватели сервлетов в будущих статьях, в этой статье мы сосредоточимся на изучении базовых интерфейсов и классов API сервлетов.
Пример входа в сервлет Java
Теперь мы готовы создать наш пример сервлета входа в систему, в этом примере я буду использовать простой HTML, JSP и сервлет, который будет проверять подлинность учетных данных пользователя. Мы также увидим использование параметров инициализации ServletContext, атрибутов, параметров инициализации ServletConfig и функции RequestDispatcher, включая() и использование функции sendRedirect ().
Наш окончательный Динамический веб-проект будет выглядеть так, как показано на рисунке ниже. Я использую Eclipse и Tomcat для приложения, процесс создания динамического веб-проекта представлен в Веб-приложениях Java учебник.
Вот наша HTML-страница входа в систему, мы поместим ее в список файлов приветствия в web.xml так что, когда мы запустим приложение, оно откроет страницу входа в систему.
Если вход в систему будет успешным, пользователю будет представлена новая страница JSP с сообщением об успешном входе в систему. Код страницы JSP выглядит так, как показано ниже.
Вот это web.xml файл дескриптора развертывания, в котором мы определили параметры инициализации servletcontext и страницу приветствия.
Вот наш последний класс сервлета для аутентификации учетных данных пользователя, обратите внимание на использование аннотаций для конфигурации сервлета и параметров инициализации ServletConfig.
Ниже на скриншотах показаны различные страницы нашего примера проекта сервлета, основанные на комбинациях паролей пользователей для успешного входа в систему и неудачных входов в систему.
Это все для руководства по сервлетам для начинающих, в следующем уроке мы рассмотрим Управление сеансами, фильтры сервлетов и прослушиватели.
Учебник по сервлету Java — ULTIMATE Guide (PDF Download)
Java Servlets — это веб-технология на основе Java. Технология Java Servlet предоставляет веб-разработчикам простой и согласованный механизм для расширения функциональности веб-сервера и для доступа к существующим бизнес-системам.
Сервлет почти можно рассматривать как апплет, который работает на стороне сервера — без лица. Java-сервлеты делают возможным множество веб-приложений.
Сервлеты Java составляют основную часть Java Enterprise Edition (Java EE). Обратите внимание, что для работы Java-сервлеты должны выполняться внутри Servlet-совместимого «контейнера сервлетов (например, веб-сервера)».
Это руководство представляет собой исчерпывающее руководство по запуску кода на основе Java-сервлета.
Содержание
1. Введение
Сервлет — это класс языка программирования Java, часть Java Enterprise Edition (Java EE). Sun Microsystems разработала свою первую версию 1.0 в 1997 году. Текущая версия — Servlet 3.1.
Сервлеты используются для создания динамических веб-приложений в Java, расширяя возможности сервера. Он может работать на любом веб-сервере, интегрированном с контейнером сервлетов.
1.1 Процесс сервлета Java
Процесс сервлета показан ниже:
Рисунок 1: сервлетная обработка пользовательских запросов
1.2 Достоинства
2. Жизненный цикл
Жизненный цикл сервлета описывает, как контейнер сервлета управляет объектом сервлета.
Рисунок 2: Жизненный цикл сервлета
3. Контейнер
Он известен как механизм сервлетов, который управляет компонентами Java-сервлетов поверх веб-сервера для запроса, отправляемого клиентом.
3.1 Услуги
Сервлет Контейнер предоставляет следующие услуги:
3.2 Контейнер сервлетов
Контейнер сервлета может быть настроен с веб-сервером для управления сервлетами тремя способами, перечисленными ниже:
Автономный контейнер : в этом типе функциональность веб-сервера берется контейнером сервлета. Здесь контейнер тесно связан с веб-сервером.
Контейнер Out-Process : в этом типе необходимо настроить контейнер сервлета для запуска вне процесса веб-сервера. Он используется в некоторых случаях, например, в случае необходимости запуска сервлетов и контейнеров сервлетов в разных процессах / системах.
4. Демо: для начала
Вот пример, демонстрирующий демонстрационный сервлет. Выполните следующие действия, чтобы начать работу с первым приложением сервлета в NetBeansIDE.
Рисунок 3: Создание нового проекта WebApplication в NetBeansIDE: WebApplicationServletDemo
Шаг 2: Теперь нажмите Next>, как показано выше. Это создаст новый проект со следующей структурой каталогов.
Рисунок 4: Каталог проектов после создания нового проекта
Рисунок 5: Добавление файла сервлета
Рисунок 6: Добавление имени класса сервлета
Рисунок 7: Настройка развертывания сервлета
Шаг 6: Нажмите Finish, как показано выше, это добавит сервлет ServletDemo.java в директорию проекта. Проверьте изменения в структуре каталогов:
Рисунок 8: Изменения в каталоге проекта после настройки