Теория и практика построения баз данных (1088289), страница 133
Текст из файла (страница 133)
Изиенений не произведено."): гз, с)оде () ; зтвг. с1озе () : оопп. с1озе (): геьигп; // Можно добавлять новые данные чаг50 = "1И5ЕИТ 1ИТО С05ТОМЕй (Иаве. АгеаСобе, РлопеИивЬег)"; чаг501 = чаг50С + " ЧАСОЕ5 ('" ш чагнаве чаг50С = чаг5ОС + чагАгеаСобе + "', '"; чаг50С = чаг50Е + чагЕоса)Иивбег + "')"/' тп1 гези)т = з1вт.ехеситеОрбате (чаг50С): 1Т (геви)ь == 0) ( 5уятев сит ргтпт1п (" Ошибка при вставке"); гз.с1ояе () ; 51вт.с)озе () сопл.с1озе (): геьигп; // Обновление прошло успешно; теперь нужно добавить строки в таблицу // пересечений.
Для этого получаеи идентификатор нового клиента чаг50С = "5ЕЕЕСТ Сизтовег10" + чагшбеге; гз = в1вт.ехесисеОиегу(чаг50С) : 5тг1пд чагС(г1 ="": ыб11е (гя.пехт ()) чагС)б = гз.де151г)пд(1): 1Т (чагС)б == "0" ) 5узтев.оит.рг(п11п("Не удается найти идентификатор нового клиента") гз,с105е() // Теперь добавляеи строки в таблицу пересечений чаг50С = "5ЕЕЕСТ Аг11з110 ГНОМ АйТ15Т ЫНЕйЕ Иас)опа)1ьу = '" + чагна11опа)тьУ 5тг(пд чаг1пзег15ьаг1 = "1И5ЕИТ 1ИТО С05ТОНЕй АйТ15Т 1ИТ (Сизтовег10, Агттз110) ЧАСОЕ5 (" -++ чагС1б +". 51г1пд чаг1пяегтЕпб = ")"; гз - зтвт.ехеситеОиегу (чаг50С); 5увтев.сит.рг1п11п("Добавляются записи в таблицу пересечений для клиента" "+ чагСтб) . ыб()е (гз.пех1 () ) ( гези11 = зтвт.ехеситеОрбасе (чаг1пзегт5гаг1 + гв.дет51г1пд(1 ) + чаг(пзег(Епб) ; Как вы помните, зта процедура имеет четыре параметра: имя нового клиента, код региона, местный номер телефона и национальность всех художников, работами которых интересуется данный клиент.
Эти параметры принимаются процедурой гпа(п и передаются методу 1пвегЬОата. В принципе, метод 1пвегЬОа1а здесь не нужен: мы могли бы вместить все в один метод, как в предыдущем примере, Отдельный метод создается потому, что в следующем разделе мы будем преобразовывать его в класс (ача Ьезп. Это преобразование будет легче выполнить, если данный метод будет выделен. Сначала метод 1пзег(0ата загружает драйверы и создает строку соединения с базой данных чг1 для пользователя г))г1. Затем он производит проверку иа предмет присутствия записи о данном клиенте в базе данных, запрашивая из чг1 строки с заданным именем, кодом региона и номером телефона. Если такая строка находится, выводится сообщение, и набор строк, оператор и соединение закрыватотся.
В противном случае в таблицу С05ТОМЕй вставляется новая строка. Столбец Сия(ощег10, являющийся суррогатным ключом таблицы С05ТОМЕй, определен в базе данных ключевым словом АОТО 1ИСИЕМЕИТ. Таким образом, значение етого столбца задавать не требуется: СУБД МуЗЯТ задаст его сама. 618 Глава 16. ЮВС, зача Яеогег Радея и )ч)у80С дача Зешег Радея 619 Если вставка оказалась успешной, переменная гезий не должна равняться нулю; если это не так, значит, во время обновления произошла ошибка. В этом случае выводится предупреждающее сообщение и все объекты очищаются.
Если ошибок не произошло, значение Спягошег10 считывается из базы данных, а затем в таблицу С05ТОМВВ АВТ15Т 1НТ вставляются строки. Логика здесь весьма напоминает логику хранимой процедуры Сиятошег1пяегС в версии для Огас1е и 5Я1. 5егчег. На этом этапе переменная геяпсС не проверяется на нулевое значение; в более совершенной версии этой програмлгы такая проверка производилась бы. А если вы программируете на 1ача, то знаете, что все выводы сообнсений об ошибках и очистку объектов нужно выполнять с помощью исключений.
Здесь мы опустим обсуждение этих вопросов и сосредоточимся на том, что непосредственно связано с базами данных. Теперь, после краткого введения в 11)ВС, мы обсудим использование атой технологии в 1ача 5егчег Радея. дача Вегчег Раяев )ача дегчег Радея С.) 5Р) — это продукт, предоставляющий возможность создания динамических лчеЬ-страниц с помощью НТМ1., ХМ). и языка программирования 1ача. 1ача 5егчег Радея внешне очень походит на АсВче 5егчег Радея, но это сходство обманчиво, поскольку в основе этого продукта лежит совсем другая технология, 15Р и А5Р схожи в том, что в обоих случаях НТМ1. смешивается с программным кодом.
Но в АВР программирование ограничено сценарными языками, подобными л/Вдсг)рс нли 15сг)рс, а в )БР программирование осуществляется на 1ача и только на 1ача. Таким образолг, разработчик лчеЬ-страниц получает в свое распоряжение всю мощь полноценного объектно-ориентированного языка программирования. Поскольку Зача является машинно-независимым языком, 15Р-страницы также машинно-независимы. Используя З5Р, вы не ограничены рамками Ъл/спг)олчя 2000 и П5. Одну и ту же ЗВР-страницу можно запустить на сервере под управлением 1лпнх, Ъ%пг)озчя и других операционных систем. Официальную спецификацию 15Р можно найти по адресу Ьсср:/Дача.яцп.сов/ р го и н с С яД яр.
48Р-страницы и сервлеты 15Р-страницы преобразуются в стандартный язык 1ача и затем компилируются как обычные 1ача-программы. В частности, они преобразуются в сервлеты 1ача, то есть в подклассы класса НССр5егч!еС, Таким образом, код ЗВР-страницы имеет доступ к объектам, представляющим НТТР-запросы и их результаты, к их методам и другим функциям НТТР. Поскольку 15Р-страницьг преобразуются в подклассы сервлетов, в них не требуется создавать полноценные 1ача-классьг или методы. Вы можете просто вставлять фрагменты Зача-кода там, где пожелаете, а при синтаксическом анали- зе страницы они будут корректным образом помещены в подкласс сервлета.
Так, например, следующий фрагмент будет отлично работать в 15Р-странице без всякого дополнительного Тача-кода: <С 5Сг1пд рагСу/«аае="иариавал": рагСуйаае - раггуцаае.СодррегСаяе(); оиг.рг1пг!п ( Приходите иа иаш " + раггуца пе); 1> В рез льтате обработки этой части 15Р-страницы в окне браузера появится р у надпись «Приходите на наш КАРНАВАЛ». Кстати, обратите внимание, что )ача-код помещается между «<'/»» и «'/»», как и код на Т/Вдсгсрг или Здсгсрс в АВР-страницах. Чтобы использовать 15Р-страницы, лчеЬ-сервер должен поддерживать спецификации Зача яегч1ес 2.1+ и )ача Бегчег Радея 1.0«-.
Список серверов, поддерживающих эти спецификации, вы можете найти по адресу ьсср:/Дачалшп.сош/ргойисся/ яегч1еС/1п8цяСгу.ЬСшс Есть по крайней мере пять-шесть подходящих вариантов. В оставшейся части главы мы будем использовать для этих целей сервер р А ас1)е Топкас. Арас11е Тотса1 По состоянию на декабрь 2000 года лчеЬ-сервер АрасЬе не поддерживает сервлеты. Однако фонд Арас!ге и корпорация дцп выступили совместными спонсорами проекта 1акагса, в рамках которого был создан обработчик сервлетов под названием АрасЬе Тогпсас. Исходные тексты и двоичный вариант Тошсас можно найти на сайте проекта 1айагса по адресу Ьсгр://)айаца.арасйе.огд.
Тогпсас представляет собой обработчик сервлетов, который может работать в связке с АрасЬе или как автономный и еЬ-сервер. Возможности Тошсас как лчеЬ- сервера ограничены, поэтому в автономном режиме он обычно используется только для тестирования сервлетов и 15Р-странггц. В коммерческих приложениях Тошсас следует использовать совлгестно с АрасЬе. Если Тошсас и АрасЬе работают отдельно на одном лчеЬ-сервере, они должны использовать разные порты. По умолчанию для ччеЬ-сервера предназначен порт 80, и обычно АрасЬе использует именно этот порт.
Прп использовании Тошсас в автономном режиме для него обычно выделяется порт 8080, хотя номер порта, разумеется, можно изменить, В приведенных ниже примерах Топкас использует порт 8080. Этп примеры запускались в закрытой интрасети, где машине, на которой работал Тошсас, был присвоен 1Р-адрес 10.0.0.3.Таким образом, чтобы вызнать страницу яотераде)яр, в поле адреса браузера нужно ввести строку МСр://10.0.0.3:8080/яошераде,)яр. Настройка Тотса1 для обработки 48Р При установке Топкас для него будет создана структура каталогов, куда необходимо поместить библиотеки классов и лчеЬ-страницы. Для Тошсас версии 3.1 библиотеки классов следует помещать в каталог |пяеаймйг/ВЬ, а 1 5Р-страницы— 620 Глава 16..ЮВС, дача Яегчег Радев и МУЯОС Оача Яегчег Радев 621 в каталог !пз!а!1-6!г/ччеЬаррз/ВООТ/(ИЕВ-1И Р/с!аззез, где 1пзта!1-6!г — это каталог, в который устанавливается Топтсаг.
В Елппх утилита КРМ по укголчангно устанавливает Топтсаг в каталог /изг/!оса!/)аИаг!а-!овса!. Соответственно, библиотеки классов в этом случае нужно поместить в каталог /цзг/!оса!/)акагта-Гошсаг/ ВЬ, а ) ЯР-страницы — в каталог /изг/!оса(/)а!тат!а-!огпсас/чгеЬаррз/БООТ/ЗЕВ-1ИР/ с!аззек Если вы устанавливаете Топтсаг в другой операционной системе пли вообще устанавливаете другой обработчик сервлетов, стоит обратиться к документации.
Устанавливая файлы классов в подкаталог !1Ь, нужно иметь в виду маленькии нюанс: То~псас создает свой С(А55РАТН при запуске. Поэтому после того, как вы установите новый файл класса в каталог !1Ь, вы должны остановить и перезапустить Тошсац чтобы он смог увидеть этот файл. Если же вы просто скопируете новый файл в подкаталог ВЬ без перезапуска Тошсас, вы получите исключение С!азз по! Еоипд (класс не найден). (Поверьте мне, я знаю это...) Все приведенные ниже 15Р-страницы используют драйверы Му5(21. пт1плпуэч!.
Чтобы работа с этими драйверами стала возможной, необходимо поместить в подкаталог ВЬ библиотеку класса соответствующего драйвера. Для примеров этой главы использовалась библиотека ппп цпсогпр)аг. Па рис. 16.2 изображена схема процесса компиляции )ЯР-страниц. Полу щв запрос на обработку )ЯР-страницы, Тотсаг (или другой обработчик сервлетов) находит скомпилированную версию этой страницы и проверяет, является лц данная версия текущей. Для этого он ищет пекомпилированную версию страницы с более поздней датой и временем, чем скомпилированная страница. Если страница не является текущей (нашлась более поздняя некомпилированная страница), производится синтаксический анализ новой страницы, после чего она преобразуется в исходный )ача-файл, который затем компилируется.
Полученный сервлет загружается и выполняется. Если же скомпилированная !ЯР-страница оказывается текущей, то ова загружается в память и выполняется. Если ,!ЯР-страница уже находится в памяти, обработчик просто выполняет ее. (Между прочим, у такой автоматической компиляции есть один недостаток: если вы сделаете синтаксические ошибки и забудете протестировать свои страницы, то первый пользователь, обратившийся к этим страницам, получит сообщение об ошибках компиляции.) В отличие от С01-файлов и некоторых других ц еЬ-серверных программ, одновременно в памяти находится не более одной ) ЯР-страниггы.