Московский государственный университет имени М.В.Ломоносова
Опубликован: 18.09.2006 | Доступ: свободный | Студентов: 1758 / 66 | Оценка: 4.32 / 3.36 | Длительность: 27:14:00
ISBN: 978-5-9556-0067-3
Лекция 14:

Разработка различных уровней web приложений в J2EE и .NET

Уровень модели данных в .NET

В среде .NET нет средств, полностью аналогичных тем, которые предоставляются в J2EE для разработки компонентов EJB. Уровень бизнес-логики в .NET-приложениях предлагается реализовывать с помощью обычных классов, что значительно проще, чем реализовывать специальные наборы классов и интерфейсов для компонентов EJB. С другой стороны, связь с базой данных в .NET не реализуется в виде аналогичного EJB объектного интерфейса, если, конечно, не разрабатывать его целиком самостоятельно (или с использованием библиотек компонентов от третьих партий). Вместо этого предлагается для связи с базой данных использовать набор компонентов ADO.NET [4], представляющих собой объектные обертки реляционной структуры данных.

Классы ADO.NET располагаются в сборке System.Data (дополнительные классы можно найти в System.Data.OracleClient и System.Data.SqlXml ) и пространстве имен System.Data, вместе с вложенными в него пространствами.

Основным классом, с помощью которого представляются данные из базы данных, является System.Data.DataSet. Он представляет набор таблиц, связанных между собой некоторыми связями и выполняющими определенные ограничения. Каждая таблица представляется объектом класса System.Data.DataTable, каждая связь — объектом класса System.Data.Relation, каждое ограничение — объектом класса System.Data.Constraint. Структура таблиц описывается с помощью их полей (представляемых объектами System.Data.DataColumn ). Содержимое одной таблицы представлено как набор объектов-записей, имеющих тип System.Data.DataRow.

Из перечисленных классов только DataSet и DataTable являются сериализуемыми, т.е. только их объекты могут быть переданы в другой процесс или на другую машину.

Объект класса DataSet может представлять собой и набор данных документа XML. Получить такой объект можно с помощью класса System.Xml.XmlDataDocument.

Само взаимодействие с источником данных происходит с помощью объектов классов DataAdapter, DataReader, DbConnection, DbTransaction, DbCommand и производных от них, специфичных для того или иного вида источников данных (в рамках поставляемых в составе среды Visual Studio .NET библиотек имеются специфичные классы для работы с источниками ODBC, OleDB, MS SQL Server, Oracle). Все перечисленные классы находятся в пространстве имен System.Data.Common, а их производные для данного вида источников данных — в соответствующем этому виду источников подпространстве System.Data.

Объекты классов DataAdapter и DataReader служат для чтения и записи данных в виде объектов DataSet. Остальные классы используются для определения соединений, организации транзакций, определения и выполнения SQL-команд по чтению или изменению данных.

Ниже приводится простой пример работы с данными с помощью библиотек ADO.NET.

DbConnection connection = new SqlConnection("Data Source=localhost;" +
    "Integrated Security=SSPI;Initial Catalog=DBCatalog");

DbCommand command = new SqlCommand("SELECT ID, Title, ISBN FROM Book",
    connection);

DataAdapter adapter = new SqlDataAdapter();
Adapter.SelectCommand = command;

connection.Open();

DataSet dataset = new DataSet();
adapter.Fill(dataset, "Book");

connection.Close();

Протокол HTTP

Прежде чем перейти к построению интерфейса пользователя в Web-приложениях на основе J2EE и .NET, стоит рассмотреть основные элементы протокола HTTP, используемого для передачи данных между серверами и клиентами в таких приложениях. Поскольку основная функциональность компонентов интерфейса Web-приложений связана с обработкой и созданием сообщений HTTP, знание элементов этого протокола необходимо для понимания технологий разработки приложений такого рода.

HTTP (Hypertext Transfer Protocol, протокол передачи гипертекста) представляет собой протокол прикладного уровня, использующий для пересылки данных протокол транспортного уровня. Достаточно подробное описание его можно найти в [5,6].

Сообщения HTTP бывают двух видов: запросы клиента и ответы сервера.

Запрос HTTP состоит из идентификации метода запроса, универсального идентификатора запрашиваемого ресурса (Universal Resource Identifier, URI), указания версии протокола и, возможно, набора заголовков с дополнительной информацией, а также поля данных общего вида.

<Request> ::= GET <URI> CrLf
            | <Method> <URI> <HTTP-Version> CrLf
              <Req-Header>* ( <Data> )?
<Req-Header>  ::= <Field> : <Value> CrLf
CrLf      ::= '\r''\n'

Основные методы протокола HTTP следующие.

  • GET

    Служит для получения любой информации по URI запроса, обычно — документа, хранящегося по указанному адресу или генерируемого по запросу с таким URI. Может иметь заголовок If-Modified-Since, который предписывает не посылать тело запрашиваемого ресурса, если он не изменялся с указанной даты.

  • POST

    Служит для создания нового ресурса, связанного с указанным по URI. Чаще всего используется для аннотации ресурсов, добавления сообщений в группы новостей, дистанционной работы с базами данных. Реальная обработка такого запроса зависит от содержащегося в нем URI.

Остальные методы — HEAD, PUT, DELETE, LINK, UNLINK — используются гораздо реже.

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

  • From

    Содержит e-mail адрес пользователя, под чьим именем работает клиент.

    Пример: From: webmaster@yandex.ru

  • Accept, Accept-Encoding, Accept-Charset и Accept-Language

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

    Пример: Accept: text/plain, text/html, text/x-dvi; q=.8; mxb=100000; mxt=5.0

  • User-Agent

    Содержит название используемой клиентской программы.

  • Referer

    Используется для указания адреса ресурса, с которого был получен данный запрос.

  • If-Modified-Since

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

  • Authorization

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

  • ChargeTo

    Содержит информацию о том, куда выставить счет за обработку запроса.

  • Pragma

    Содержит дополнительные директивы для промежуточных серверов, например, прокси-серверов.

Пример запроса.

GET /locate?keywords=HTTP+description HTTP/1.1
Date: Mon, 15 Dec 2004 12:18:15 GMT
Accept: image/gif, image/jpg, */*
Accept-Charset: iso-8859-1, *, utf-8
Accept-Language: en
Connection: keep-Alive
User-Agent: Mozilla/4.7 [en] (Win98; u)
Таблица 14.1. Некоторые коды статуса ответа HTTP и их объяснение
Группа кодов Код Фраза-объяснение, следующая за кодом Значение кода
1xx Информационное сообщение
2xx Успешная обработка
200 OK Вcе нормально
201 Created Документ создан
3xx Перенаправление запроса
301 Moved Permanently Ресурс перемещен
302 Moved Temporarily Ресурс перемещен временно
4xx Ошибка клиента
400 Bad Request Некорректно составленный запрос
401 Unauthorized Нужна аутентификация клиента
403 Forbidden Доступ к ресурсу запрещен
404 Not Found Запрашиваемый ресурс отсутствует
5xx Ошибка сервера
500 Internal Server Error Внутренняя ошибка сервера

Ответ сервера на HTTP-запрос состоит либо только из запрашиваемого клиентом документа, либо в дополнение к нему содержит код статуса ответа и, возможно, несколько заголовков ответа.

<Response>    ::= ( <Content> )?
                | <HTTP-Version> <Code> <Explanation> CrLf
                  <Resp-Header>* ( <Content> )? 
<Resp-Header> ::= <Field> : <Value> CrLf
CrLf      ::= '\r''\n'

Некоторые коды статуса ответа поясняются в табл. 12.

Возможны следующие заголовки ответа:

  • Allowed

    Перечисляются через пробел доступные для пользователя методы запросов по данному URI.

  • Public

    Перечисляет доступные всем методы запросов.

  • Content-Length, Content-Type, Content-Encoding и Content-Language

    Задают размер содержимого в байтах (подразумевается, что содержимое имеет бинарный формат и не должно разбиваться на строки при чтении), его формат или MIME-тип, кодировку и язык.

  • Date

    Дата создания содержащегося документа или объекта.

  • Last-Modified

    Дата последнего изменения содержащегося объекта.

  • Expires

    Дата, после которой содержащийся объект считается устаревшим.

  • URI

    URI содержащегося объекта.

  • Title

    Заголовок содержащегося документа.

  • Server

    Описывает серверную программу.

  • Retry-After

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

Пример HTTP-ответа.

HTTP/1.0 200 OK
Content-Length: 2109
Content-Type: text/html
Expires: 0
Last-Modified: Thu, 08 Feb 2001 09:23:17 GMT
Server: Apache/1.3.12
<HTML> <HEAD> <TITLE> … </TITLE> </HEAD>
<BODY> …
</BODY>
</HTML>
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?