|
|
|||||||||||||||||||||||||||||
|
Краткий обзор технологий динамического формирования HTML страницИсточник: almportal Цуканов В. В. гл. специалист отдела автоматизации УПФР г. Губкин Белгородской обл.
Введение. Написать данную статью меня побудило то обстоятельство, что, к сожалению, на данный момент русскоязычная аудитория почему-то абсолютно игнорирует данную тему. Конечно технология достаточно новая, может быть немного сложнее, чем хотелось бы, однако очень интересна и, на мой взгляд, имеет большие перспективы. Англоязычный Internet не так консервативен и пытается продвигать JSP, однако и в нем найти полезного можно не так много как хотелось бы. Даже такой гигант как IBM пытающийся (по моему мнению) стать основным поставщиком решений для Java, хоть и дает информацию (все ссылки вы найдете в конце обзора), но в очень малом количестве. Конечно, у кого имеются достаточные денежные ресурсы, могут зайти на сервер http://www.amazon.com/, набрать в строке поиска "JSP" и получить в результате поиска как минимум 40 изданий, посвященных данной теме, по цене от 40 долларов и выше.А если вам это не по карману, то, возможно, данная публикация поможет вам ознакомиться с JSP - замечательной технологией корпорации Sun. Главный девиз Java, который вы найдете на любой web-странице фирмы Sun - "Написано однажды - работает везде". Однако возникает вопрос - "А зачем, то что мы написали должно работать везде?". По статистике порядка 90% конечных пользователей работают на компьютерах с установленной 32-разрядной ОС Windows. Так что достаточно написать программу, которая будет работать под Windows и девиз фирмы Sun можно, с некоторыми оговорками применить например и для Delphi - "Написанное однажды на Delphi - работает почти везде" (шутка). Если серьезно подойти к этому вопросу, то надо себе задать вопрос: а какой ценой ваша программа, написанная на Java, работает везде. А цена этому - производительность. Я думаю ни для кого не секрет, что программы, написанные на Java, работают под управлением виртуальной машины Java. Так что возникает проблема: писать, то что работает медленнее но повсеместно, или то, что работает приемлемо, но только под Windows. Но не надо расстраиваться, не все так плохо в королевстве Java (Напротив, все очень даже хорошо! Даже под ОС Windows постоянная миграция приложений на Java видна невооруженным глазом. Это, кстати, особенно видно в Европе и Скандинавии. Прим. Ред.). Один из секторов, в котором Java более чем уместна - это приложения для Internet. Краткий обзор технологий динамического формирования HTML страниц. Динамическое формирование Web страниц - тема довольно старая. И она существовала задолго до появления Java. Одним из излюбленных инструментов специалистов был и остается язык Perl. И, наверное, Perl останется надолго - уж очень много на нем всего написано, затрачены колоссальные усилия, чтобы просто так все бросить и кинуться с головой в ASP, JSP, XML, сервлеты и т.п. (любителям абревиатур рекомендую посетить сервер www.computerjobs.com там вы найдете все, что сейчас в моде). Одной из основных технологий поддержки динамических таблиц является CGI. В ней используется огромное количество языков, но основным, судя по всему, является все же Perl. Плюсы такой реализации только в том, что наработано большое количество решений, не надо ничего выдумывать, да и документации написано огромное количество. Минусы - это производительность. В CGI-модели каждый раз при поступлении запроса от пользователя инициируется новый процесс, вследствии чего характеристики сервера ухудшаются. Кроме этого CGI-программы не могут взаимодействовать с Web сервером, т.к. они выполняются в разных потоках. Теперь об ASP. В свое время компания Microsoft очень стремилась завоевать рынок Web. Пакеты выпускались один за другим. И в какой-то мере задача захвата Web удалась - если опять призвать на помощь статистику, то окажется, что порядка 20% Web серверов построены на основе Internet Information Service - совсем неплохо (Но это и не такой выдающийся результат, как у Apache J Прим. Ред.). Так вот в основе технологии ASP - ключевом элементе IIS - лежит все та же знаменитая компонентная технология COM. Так что писать ASP можно с использованием тех продуктов, которые могут оперировать с COM-объектами (естественно вся линейка продуктов от Microsoft, а также Delphi и C++Builder от Borland и пр.). Минусом является только то, что вы будете ограничены только одной операционной системой Windows. Кроме этого существуют Netscape NSAPI и Microsoft ISAPI. Это программные интерфейсы прямых вызовов сервисов конкретного сервера Web. Здесь мы имеем хорошие результаты в производительности, однако очень сильно привязаны к конкретному серверу. Разработка так же усложнаяется. Java-решения для формирования динамичеких страниц. Сервлет - программа на Java которая выполняется внутри Web сервера или сервера приложений (Как правило, для таких целей у серверов приложений имеются специальные web-контейнеры. Прим. Ред.). JSP - технология, позволяющая динамически сгенерировать ответ сервера. Основное ее применение - отделить внешний дизайн и программный код в HTML-страницах. На вопрос "что все таки лучше, а что хуже", по-моему, ответа не существует. А вот вычислить, что популярнее гораздо попроще. Воспользуемся информацией сервера www.computerjobs.com и в строке поиска наберем ASP, затем Perl и затем JSP. Вот, что у Вас приблизительно получится.
Как говориться, статистика вещь упрямая, конечно Америка нам не указ, но все же мы можем получить общую расстановку сил И снова статистика. Порядка 50% всех приложений используют в той или иной мере доступ к базам данных ("Thinking in Java, 2nd Edition" Bruce Eckel стр. 920). Так что для многих разработчиков это очень интересный вопрос. В данном обзоре мы будем строить первые странички виртуального Internet-магазина. При доступе к таблицам БД мы будем использовать JDBC. Почему JDBC, а не DataExpress? Это, конечно, частное мнение, но мне кажется, что использовать JDBC намного проще (в смысле количества строк в программе), например запрос к таблице: JDBC версия Connection con; // соединение с сервером // выполнение запроса // печать результатов DataExpress версия QueryDataSet queryDataSet1 = new QueryDataSet(); //соединение с сервером // установка свойств //выполнение запроса // печать результатов Как видите результат один и тот же, а пути его достижения - разные. Причем, на мой взгляд, второй длиннее. Однако не будем забывать, что второй был сгенерирован автоматически в среде пакета JBuilder. Так что вам решать, что предпочесть. Что касается меня, то я выбираю первый вариант. Кроме простоты реализации, мы можем использовать уже наработанный код (например пул соединений с базой данных). Прим. В JBuilder 4, насколько мне известно, появился набор новых компонент для построения Internet-приложений InternetBeans, но я ничего не могу сказать по этому поводу, т.к. я не имел еще возможности оценить новых продукт от Borland (Комментарий). Для примера мы рассмотрим несколько первых страниц Internet-магазина, торгующего книгами. В качестве сервера приложений (контейнера), который будет управлять компиляцией, запускать наши JSP-страницы и сервлеты, мы будем использовать Tomcat 3.1. В принципе, те пользователи, кто работает с JBuilder Enterprise, могут воспользоваться встроенным сервером. Преимущество использования Tomcat только в том, что пользователи располагающие JBuilder Foundation (распространяется бесплатно) могут также проектировать, отлаживать и выполнять JSP страницы и сервлеты. Настройки для работы с Tomcat 3.1 вы можете найти по адресу http://community.borland.com/article/0,1410,22057,00.html. Прим. Для пользователей JBuilder 3.0 проделать все то же самое, но установить выполняемым файлом Tomcat.java, который можно найти в [TOMCAT_HOME]\src\org\apache\tomcat\startup\Tomcat.java Прим. Прошу прощения за некоторую убогость оформления сайта. Я за разделение труда, как говорил Булгаковский профессор Преображенский. Художники пусть рисуют, а программисты пусть программируют. Разработка структуры приложения. К сожалению, если сравнить два приложения - одно для Web, другое для обычной многопользовательской среды, первое оказывается всегда сложнее. Хотя бы взять наш пример. Что такое магазин. Заходит пользователь, выбирает товары и оплачивает покупки. Вся база данных будет состоять из 6-8 таблиц максимум. Если вы решили написать обычное приложение, то, в принципе, для этого не требуется очень глубокого анализа. Максимум времени, который вы потратите на разработку подобного приложения - две недели. Однако с распределенными приложениями все намного сложней - необходимо создавать пул соединений с базой данных, необходимо продумывать вопросы безопасности, авторизации пользователей и т.д. и т.п. Так что для начала необходимо продумать структуру приложения, причем сделать это достаточно аккуратно, что бы не возвращаться к этому еще и еще.
Исходя из этой структуры можно предположить следующее. Нам необходимо соединение с базой данных. Для этого мы воспользуемся классом DBConnectionManager , который Вы можете найти по адресу http://webdevelopersjournal.com/columns/connection_pool.html. Там же есть небольшое описание, как пользоваться и пример использования. Кроме этого нам необходимы несколько классов, которые будут работать с книгами, присланными пожаланиями клиентов и т.д. Основное назначение этого сервлета - инициализация пула соединений. Конечно инициализацию можно было бы провести и по другому (например, в JSP странице), но так как целью статьи является обзор технологии, то мы воспользуемся сервлетом. Любой сервлет имеет как минимум три метода - init(), service() и destroy(). В методе init() мы проведем создание класса DBConnectionManager -DBConnectionManager conMgr = DBConnectionManager.getInstance(); В методе destroy() мы закроем все активные соединения с базой данных Таким образом у нас будет возможность получить ссылку на объект в любой момент пока активно наше приложение в JSP странице : В этом классе представлены методы для получения информации о книгах.
Установка всех этих свойств производиться в методах setBookTable и setBookItem. В JSP страницах значения свойств получаем посредством следующего вызова <jsp:getProperty name="book" property="bookGroupTitle" /> В этом классе представлены метод readersOpinions - мнения читателей. Установка свойства производится в методе setReadersOpinions. Cтраница, где представлены темы для выбора и новости сервера. Переход на страницу Book.jsp осуществляется посредством передачи параметра bookGroupId. Страница, где формируется таблица с книгами по выбранной теме. <jsp:useBean id="book" scope="session" class="Book" /> - создаем класс Book с идентификатором book. В связи с тем, что все наши классы будут иметь максимальную область видимости "session", то нет необходимости задумываться о синхронизации потоков. Страница, где формируется сведения о конкретной книге. Кроме этого формируется список с мнениями читателей, если они есть. Страница, где пользователь может высказать свое мнение о книге. Для этого мы будем использовать форму и два скрытых поля, что бы идентифицировать запрос После отправки формы вызывается страница Thankx.jsp, которая будет использоваться для различных "спасибо" и ее содержание будет изменяться в зависимости от значения параметра Thankx. В нашем случае мы используем метод addOpinion класса Opinion. Одно замечание по поводу перекодировки. Т.к. мы заставили пользователя использовать кодировку Cp1251, в каждой JSP странице есть строка
Надеюсь, что в продолжении статьи мы рассмотрим все эти вопросы и наше приложение будет полностью отвечать всем требованиям виртуального магазина. Данное приложение было построено с использованием сервера Oracle, поэтому файл crttbl.sql использует диалект этого сервера. Я думаю, что не составит сложностей перевести его на другой сервер. Его тоже необходимо настроить. Для этого существует файл
В дальнейшем вы будете использовать имя guest для соединений с базой данных. Вообще данный файл может находиться где угодно лишь бы этот путь был доступен через переменную CLASSPATH. В нашем случае TomCat добавляет путь [TOMCAT_HOME]\ webapps\bookshop\WEB-INF\classes\ во время запуска. Все ссылки англоязычные, если кто-то добавит в этот список русскоязычные ресурсы, то буду очень рад
Должна получиться следующая структура каталогов, вы можете сохранить ее под именем например template и затем использовать при создании новых приложений для Tomcat. Кроме этого в каталоге [TOMCAT_HOME]\ webapps\bookshop\WEB-INF может присутсвовать файл web.xml- это ваш локальный файл, который перекрывает установки в глобальном web.xml [TOMCAT_HOME]\conf\web.xml.И последний штрих в файл [TOMCAT_HOME]\conf\server.xml необходимо добавить строку. <Context path="/bookshop" docBase="webapps/bookshop" debug="0" reloadable="true" ></Context> Этой строкой вы создаете приложение bookshop. Прим. Еще немного о структуре каталогов и приложения. Файл выполняемый по умолчанию при загрузке приложения (т.е. http://localhost:8080/bookshop) - index.html. Ссылки по теме
|
|