Содержание
-
Введение
-
Лабораторная работа №1
-
Лабораторная работа №2
-
Лабораторная работа №3
-
Лабораторная работа №4
Лабораторная работа №2 Создание веб-приложения на базе Servlets и JSP
Цель работы 1. Познакомиться со средствами создания веб-приложений Java EE при помощи технологии Servlets и JSP. 2. Создать веб-приложение используя технологии Servlets и JSP. 3. Запустить приложение в серверной среде и проверить его работу. Программное обеспечение 1. Eclipse 2. Maven 3 3. JDK 1.6 4. Jetty Необходимая теоретическая подготовка- Разобраться в основе технологии Servlets из Java EE.
- Разобраться в технологии JSP.
- Необходимо понимать процесс и этапы создания веб-приложения.
Сервлет – диспетчер процесса, который находится на веб-сервере и обрабатывает различные входящие запросы и выдаёт исходящие ответы на них.
Можно использовать сервлет для записи в поток, который добавляет содержимое к веб-странице, но при этом, как правило, происходит смешение логики представления и бизнес-логики. Большинство Java-сервлетов, с которыми работают программисты, предназначены для ответов на различные HTTP-запросы в рамках текущего веб-приложения. Следовательно, каждому разработчику системы следует знать HTTP-классы из пакетов javax.servlet и javax.servlet.http. При создании Java-сервлета обычно создается подкласс класса HttpServlet. Ниже приведен экземпляр создания сервлета.import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet { private ServletConfig config; public void init(ServletConfig config) throws ServletException { this.config = config; } public void destroy() { } public ServletConfig getServletConfig() { return config; } public String getServletInfo() { return «A Simple Servlet»; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(«text/html»); PrintWriter out = resp.getWriter(); out.println(«<html><head>»); out.println(«<title>A Sample Servlet!</title>»); out.println(«</head>»); out.println(«<body>»); out.println(«<h1>Hello, World!</h1>»); out.println(«</body></html>»); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(req, resp); } }
Сам HTTP-протокол, не связан с Java. HTTP-протокол это просто спецификация, которая определяет, какими должны быть запросы к серверу и его ответы. Сервлет заключают эти конструкции протокола в Java-классы, имеющие удобные методы и которые облегчают работу с этими конструкциями в рамках языка Java. Когда пользователь посылает запрос через URL сервлету, сервер преобразуют их в HttpServletRequest и передают адресату, как это настроено в конфигурационных файлах контейнера сервлетов или сервера, который используется в данный момент. Когда сервер заканчивает работу с запросом, JRE упаковывает и собирает результаты в HttpServletResponse и передает HTTP-ответ назад клиенту, пославшему текущий запрос. При обычном взаимодействии с веб-приложением посылается несколько запросов и, соответственно, на них приходит несколько ответов. Все они обрабатываются в контексте сессии, которая в Java хранится в объект класса HttpSession. Так же можно обратиться к этому объекту при обработке запросов в классе и провести необходимые изменения, если требуется. Контейнер, такой например как Jetty, управляет средой исполнения сервлетов. Имеется возможность по настройке способов функционирования J2EE-сервера, который необходимо настроить для функционирования сервлетов с внешним миром. Как будет описано далее, используя различные конфигурации файлов контейнера, это обеспечивает мост от URL, введенного пользователем в браузере, к сервлетам, обрабатывающим запросы пользователей, в который транслируется URL. Во время работы приложения сервер загружает и инициализирует сервлеты, а так же управляет их жизненным циклом. Простыми словами, для любого создаваемого сервлета всегда будут вызываться определенные методы в определенном порядке. Ниже приведен обычный сценарий работы сервелетов на сервере. Жизненный цикл сервлета состоит из следующих шагов: 1. Если отсутствует сервлет в контейнере, тогда Класс сервлета загружается самим контейнером. Далее Контейнер используя класс сервлета создает его экземпляр. Создание происходит вызовом метода init(). Этот метод инициализирует сам сервлет и всегда вызывается первым, до того, как сервлет начинает обслуживать запросы пользователей. За весь цикл жизни сервлета метод init() вызывается только один раз. 2. Далее происходит обслуживание клиентских запросов. Запросы обрабатываются в своих отдельных потоках. Сервер вызывает метод service() для каждого запроса из запросов. Данный метод определяет тип запроса и отправляет его в соответствующий этому типу метод для обработки. Разработчик должен предоставить реализацию для всех этих методов, если есть такая необходимость. Если поступил запрос, метод для которого не был разработан, будет вызван метод родительского класса и завершается возвращением ошибки инициатору. 3. В случае если серверу необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. JSP (JavaServer Pages)JSP (JavaServer Pages) – это технология, которая позволяет разработчикам легко и просто создавать содержимое, которое имеет статические, динамические компоненты.
По сути, любая JSP страница является простым текстовым документом, который содержит текст двух определённых типов: 1. статические данные, которые оформляются в виде одного из текстового формата HTML, XML; 2. JSP теги и элементы, конструируют динамическое содержимое страницы. Кроме этого могут использоваться различные библиотеки JSP-тегов, для добавления Java-кода в статичное содержимое JSP-страниц. Это одна из наиболее применимых технологий, так как весь код страницы транслируется в java-код сервлета с помощью компилятора JSP-страниц, а далее компилируется в байт-код виртуальной машины. Контейнеры сервлетов (Jetty или Tomcat), способные исполнять JSP-страницы, написаны на языке Java, который может работать на различных платформах. Пример JSP-страницы приведен ниже.<html> <head> <title> Очень простая страница JSP </title> </head> <body> <h1> Очень простая страница JSP </h1> <НЗ> Этот пример показывает, как работать с выражениями JSP</H3> Текущая дата: <%= new java.util.Date()%> <br> Значение переданного параметра «param»: <%= request.getParameter(«param»)%> </body> </html>
Для настройки работы сервлета и JSP страниц на сервере необходимо описать его в дескрипторе развертывания, который в технологии Java EE, является файл web.xml. В веб-приложениях Java используют файл дескриптора развертывания для определения способа сопоставления URL с сервлетами, URL которых требуют аутентификации и других сведений. Этот файл называется web.xml и находится в WAR приложения в каталоге WEB-INF/. Это XML-файл, корневым элементом которого является <web-app>. Файл web.xml является частью стандарта сервлета для веб-приложений. Пример дескриптора представлен ниже.<?xml version=»1.0″ encoding=»ISO-8859-1″?> <!DOCTYPE web-app PUBLIC «-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN» «http://java.sun.com/j2ee/dtds/web-app_2.2.dtd»> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
Дескриптор развертывания веб-приложения описывает различные классы, ресурсы и конфигурационные файлы. Но и их использование вебсервером для обработки веб-запросов и ответов на них.
При получении сервером запроса для приложения используется дескриптор развертывания, который и сопоставляет URL запроса с кодом, который и обработавает запрос. Практическая часть 1. Необходимо открыть ранее созданное веб-приложение и провести разбор каталога создаваемого проекта. Структура каталога должна быть примерно такой, как представлено на рисунке ниже.
Рисунок 13. Структура каталога создаваемого проекта
- В каталоге src/main – будут располагаться исходники(/java) Java и файлы настройки создаваемого приложения(/resources).
- Каталог webapp является носителем всей служебной информации по настройке создаваемого веб-приложения. В данном каталоге будут храниться jsp-файлы, а также конфигурационные настройки для корректного функционирования приложения на сервере.
- Web.xml – является дескриптором веб-приложения.
- В каталоге /target будут собираться и храниться до следующей сборки файлы создаваемого приложения, в том числе и собранный архив проекта, подготовленный для установки на сервер.
- принимает 3 входящих параметра: имя, фамилию, отчество;
- создает новый файл в любом заданном каталоге на жестком диске
- создает новый файл по фамилии и записывает все переданные параметры в каждую строку в файле.
- в качестве параметра принимает имя картинки-файла, по которому, он должен открыть из заранее заданного каталога с картинками;
- необходимо считать картинку в память выдать ее в качестве ответа на запрос. Если картинка с переданными именем файла не была найдена, требуется отобразить html-страницу с ошибкой.