- •Вопрос 1. Особенности языка java, принципы ооп, реализация принципов в языке java.
- •Вопрос 2. Понятие класса, объекта, поля, метода; области видимости. Простейшие программы.
- •Вопрос 3. Типы данных, простые, классы, преобразования типов.
- •Вопрос 4. Ключевые слова: static, this, super, final. Примеры использования
- •Вопрос 5. Спецификаторы доступа к классам, полям и методам.
- •Вопрос 6. Системы ввода-вывода в java. Работа с файлами.
- •Вопрос 10. Исключительные ситуации. Обработка исключений.
- •Вопрос 7. Апплеты, структура и методы жизненного цикла.
- •Вопрос8. Программирование отношений типа является, имеет, использует и создает.
- •Вопрос 9. Интерфейсы. Реализация интерфейсов.
- •Вопрос 11. Реализация многопоточности. Создание и запуск потока. Синхронизация потоков.
- •Вопрос 12. Апплеты с многопоточностью.
- •Вопрос 14. Библиотека jdbc. Подключение к базе данных.
- •Вопрос 16. Работа с сетью. Классы InetAddress, Socket, ServeSocket.
- •Вопрос 17. Работа с сетью. Классы DatagramSocket, DatagramPacket.
- •Вопрос 18. Сервлеты. Структура и организация. Методы жизненного цикла.
- •Вопрос 19. Jsp. Структура и организация. Работа с бинами. Класс Session.
- •Вопрос 20. Основы технологии ejb. Основные цели. Ejb компоненты, объект, контейнер. Типы бинов. Home и Remote интерфейсы.
- •Вопрос 21. Жизненный цикл Entity Bean.
Вопрос 17. Работа с сетью. Классы DatagramSocket, DatagramPacket.
Работа с сетью
Java.net – для работы с сетью
состоит из следующих классов:
InetAddress
Socket
ServerSocket
DatagramSocket
DatagramPacket
Классы DatagramSocket и DatagramPacket
Класс DatagramSocket использует протокол UDP для реализации клиентских и серверных сокетов. Протокол передачи UDP пользователя является протоколом без установления соединения при передечи даннных. Протокол UDP менее надежен, чем TCP, поскольку не гарантирует доставку данных по адресу приемника.
В отличие от сокетов при передачи пакетов по UDP используется один класс DatagramSocket. В этом классе имеется два конструктора:
конструктор, используемый по умолчанию, без параметров, применяется для создания клиента.
DatagramSocket sock = new DatagramSocket()
второй конструктор использует задаваемый порт для создания серверной части.
DatagramSocket sock = new DatagramSocket(65000);
Методы класса:
отправка и прием пакетов данных – send и receive
public void send (DatagramPacket p)
public void receive (DatagramPacket p)
Метод close закрывает сокет
close( );
Класс DatagramPacket используется в качестве параметров send и receive. Используется объектами класса DatagramSocket для хранения посылаемых и принимаемых Datagram. В этом классе имеется 2 конструктора:
для принимаемых Datagram:
DatagramPacket(byte [] “buf,int length)
для создания Datagram для отправки:
DatagramPacket (byte [] b, int length, InetAddress ia, int port)
Методы класса DatagramPacket:
//возвращает адрес подключения
public synchronized InetAddress getAddress( );
//возвращает порт подключения
public synchronized int getPort( );
//возвращает размер Datagram
public synchronized int getLength( );
Пример серверной части:
puclic void StartServer( )
{ try{
DatagramSocket sock = new DatagramSocket(65000);
byte[] buf = new byte[256];
DatagramPacket p = new DatagramPacket (buf, buf.length);
sock.receive(p);
System.out.println(“Пришел запрос от “ + p.getAddress( ).getHostAddress( ));
System.out.println(“запрос: “ + newString(buf, 0, buf.length);
InetAddress ia = p.getAddress( ); int port = p.getPort( );
String s = “ответ “;
p = new DatagramPacket(s.getBytes( ), s.length( ), ia, port);
sock.send(p);
. . .
Пример клиентской части:
public void startClient( )
{ try{
DatagramSocket sock = new DatagramSocket( );
byte[] b;
String s = “Hello from Client”; buf = s.getBytes( );
DatagramPacket p = new DatagramPacket(b, b.length, InetAddress.getByName(“comp1”), 65000);
sock.send(p);
String ss;
While (true)
{
sock.receive(p);
s = new String(p.getData( ), 0, p.getlength( ));
if (ss.equals(“end”)) break; else
System.out.println(s);}
. . .
Вопрос 18. Сервлеты. Структура и организация. Методы жизненного цикла.
Сервлет – программа, работающая на стороне сервера. Так же как и апплеты динамически расширяют функциональные возможности веб-браузера. Динамически расщиряют функциональные возможности веб-сервера. Сервлеты – JAVA классы, динамически загружаемые на веб-серверах для обработки клиентских запросов. Традиционным решением такой проблемы, как изменение интернет клиентом БД было создание HTML страницы с текстовыми полями и кнопкой типа submit (кнопка, по которой данные отправляются на сервер). Пользователь вводил информацию в текстовое поле и нажимал кнопку submit, после чего данные отправлялись по соответствующему адресу для обработки. Сервлет представляет собой программу, которая обрабатывает данную информацию, после чего сервлет создает соответствующую веб-страницу, которая будет возвращена клиенту. Сервлеты обеспечивают решение задачи на стороне сервера и имеют следующие приемущества:
Переносимость – сервлет – программа на языке JAVA, поэтому является платформа независимым.
Мощные функциональные возможности. Поддержка сетевых концепций, многопоточность, обработка изображений, сжатие данных, поддержка соединений с БД.
Эффективность – однократно загруженные, они постоянно остаются в памяти сервера, т.о. сверлет поддверживает и сохраняет свое состояние. В том числе и соединения с БД. Сервлет может одноверменно обрабатывать многочисленные запросы с помощью потоков.
Безопасность – сервлеты наследуют все функции обеспечения безопасности JAVA. Автоматический механизм сборки мусора языка JAVA защищает сервлеты от проблем с управлением памятью, таких как некорректные ссылки и указатели на неиспользуемую память.
Сервлет реализуется как класс, производный от класса javax.servlet.http.HttpServlet.
Жизненный цикл сервлета можно представить следующим образом:
Пользователь вводит адрес сервлета в браузер. Конфигурационный файл веб-сервера указывает, что этот адрес предназначен для сервлета, управляемого контейнером сервлетов на данном сервере. В этом случае контейнер перехватывает запрос клиента.
Если экземпляр сервлета еще не был создан, то контейнер загружает класс и создает экземпляр объекта. Контейнер вызывает метод init сервлета. Сервлет инициализируется только однажды путем вызова метода init. При загрузке сервлета, после того, как загрузится контейнер сервлетов, если экземпляр сервлета уже существует, то переходим к следующему этапу.
Контейнер вызывает метод service (. . .) сервлета с параметрами: HttpServletRequest req и HttpServletResponse res. Главная функция метода service состоит во взаимодействии с Http запросом и построении Http ответа. Сервлет обычно обращается к эклементам запроса, передает запрос другим серверным класса для выполнения запрошенной службы и для доступа к таким ресурсам как БД, а затем создает ответ, используя эту информацию.
При необходимости, когда сервлет выполнил полезную работу, контейнер вызывает метод destroy для его уничтожения. Этот метод вызывается для освобождения всех ресурсов перед выгрузкой сервлета.
Пример простого сервлета:
import java.io;
import javax.Servlet.*;
import.javax.Servlet.http.*;
public class NewServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response)
{ response.setContentType(“text/html; charset=UTF-8”);
printWriter out respons.getWriter( );
out.println(“<html>”);
. . .
}
}
Каждый запрос от клиента приводит к одному вызову метода service. Этот метод читает запрос и формирует ответное сообщение при помощи двух своих аргументов – HttpServletRequest и HttpServletResponse. Объект класса HttpServletRequest содержит данные от клиента. Данные состоят из пар имя-значение. Получить эти данные можно с помощью метода getPatameter.
String name = (String) request.getParameter(“name”);
Объект класса HttpServletResponse содержит ответ сервлета клиенту. Во время подготовки ответа прежде всего вызывается метод setContentType для установки типа ответа. Затем могут использоваться метода, например, getwriter, для получения объекта printwriter для передачи данных обратно клиенту.
Форму для отправки данных сервлету можно представить следующим образом:
<html> <body>
<form name = “form1” action = “…/NewServlet method = “post”>
<input type = “text” name = “login” value = “”/>
<input type = “password” name=”password” value=”” />
<input type = “submit” value=”OK” name =”OK” />
</form>
</body>
</Html>
Значения и список всех параметров можно получить следующим образов:
Enumeration e = req.getParameterNames( );
while (e.hasMoreElements( ))
{ String paramName = (String) e.nextElement( );
String paramVal = req.getParameter(ParamName);
. . .
}
Основное различие методов get и post состоит в способе передачи вем-формы, а именно метод get отпралвяет всю собранную информацию формы как часть URL, а метод post передает данные таким образом, что пользователь не видит передаваемые данные.
Методы класса HttpServletRequest:
String host = request.getRemoteHost( ); - возвращает имя хоста клиентской машины, пославшей данный запрос.
String ip = request.getRemoteAddr( ); - возвращает IP адрес клиента.
HttpSession session = request.getSession( ); - возвращает объект HttpSession текушего сеанса клиента.
Cookie[] c = request.getCookies( ); - получение массива объектов Cookie, сохраненных на компьютере клиента. Cookie могут быть использованы для уникальной идентификации клиента сервером.
Понятия:
Сессия – серия запросов к серверу, сделанных одним пользователем в заданный промежуток времени.
Например, при покупке товара онлайн сессия длжна быть подтверждеа с момента помещения первого элемента в корзину, до окончания работы с корзиной. При каждом добавлении в корзину создается новое Http соединение, которое дожно иметь информацию о предыдущих соединениях.
Для того, чтобы следить за сессией на стороне сервера создается объект HttpSession. Он предназначен для сбора информации о клиенте. Это может быть информация об авторизации, которая была выполнена при первом заходе на сайт и которую не нужно выполнять повторно. Сбор информации о сессии ведется методами:
session.setAttribute(“user”,”Korolev”);
String user = (String) session.getAttribute(“user”);
Информацию о номере сессии можно получить следующим образом:
String name = session.getId( );
Cookie – небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя. Веб-клиент (браузер) всякий раз при попытке открыть страницу соответствующего сайта пересылает этот фрагмент данных веб-серверу в виде Http запроса.
Сессии и cookie предназначены для хранения сведений о пользователях при переходах между несколькими страницами. На практике обычно cookie используются для аутентификации пользователя, хранения настроек пользователя, отслеживания состояния сессии, ведения статистики о пользователях.
Аутентификация происходит следующим образом:
Пользователь вводит имя и пароль в текстовых полях и отправляет их на сервер.
Сервер получает имя и пароль, проверяет и при их правильности отправляет страницу успешного входа, прикрепив cookie с некоторым идентификатором сессии. Cookie могут быть действительными только для текущей сессии браузера, но может быть настроен и на длительное хранение.
Каждый раз, когда пользователь запрашивает страницу сервера, браузер автоматически отправляет Cookie с идентификатором сессии серверу. Сервер проверяет идентификатор и узнает клиента.
Многие браузеры путем редактирования свойства Cookie могут управлять поведением веб-сайтов, изменив срок действия Cookie можно получить формально неограниченную сессию, после авторизации на каком-либо сайте. Однако, серверное ПО может отслеживать такие попытки. Для этого сервер выдает Cookie на определенный срок и записывает дату окончания у себя. Если Cookie, присланый браузером имеет дату годности отличную от той, что хранится на сервере, то сервер может попросить повторную авторизацию. Имеется возможность просмотра содержимого Cookie:
Cookie[] cookies = request.getCookie();
