Языки web программирования клиентские и серверные. Языки веб-программирования: клиентские и серверные. В чем отличие? «Сделано в России» - язык программирования WBASIC для разработки серверных веб-приложений

01.07.2020

Что? Какое еще серверное программирование? Что это за беда? И зачем она нам нужна?

Мы, вроде бы, научились создавать Web-страницы в среде Dreamweaver. Мы даже научились создавать с его помощью целые Web-сайты и публиковать их на Web-сервере. Мы изучили две разновидности дизайна страниц: фреймовый, когда сайты строятся на основе наборов фреймов, и табличный, когда содержимое страницы помещается в большую сложную таблицу. Мы познакомились с таблицами стилей, метатегами и серверными директивами. И, наконец, узнали о Web-программировании и Web-сценариях, позволяющих добавить "жизни" нашим статичным страничкам. Что же еще надо для счастья?

Да, изученного ранее нам вполне хватит, чтобы создавать вполне приличные сайты. Многие Web-дизайнеры на этом и останавливаются. Но ведь мы хотим большего, не так ли?

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

Но давайте по порядку. И начнем мы с того, что выясним, зачем нужны эти серверные программы.

Что такое серверное программирование

Действительно, что это такое и с чем его едят?

Зачем нужны серверные программы

Вы когда-нибудь посещали интернет-магазин? Например, популярнейший "Озон" (http://www.ozon.ru) . Помните, как там выполняется заказ товара?

Если не помните или вообще не знаете, что такое интернет-магазин, давайте вспомним (или узнаем).

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

Что происходит при этом? Как обрабатываются введенные вами данные? Неужели самим Web-обозревателем?

Отнюдь. Эти данные обрабатываются на Web-сервере.

Интернет-магазин - просто один из примеров, пришедших в голову автору, являющемуся поклонником и постоянным клиентом вышеупомянутого "Озона". Точно так же работают серверы электронной почты, основанной на Web, поисковые машины, электронные доски объявлений, форумы, вообще, любые Web-сайты, принимающие от посетителя какие-то данные и обрабатывающие их. Во всех этих случаях Web-обозреватель принимает от посетителя данные и отправляет их Web-серверу, который обрабатывает их и выдает результат обработки в виде автоматически сформированной Web-страницы.

Как это происходит на деле? Сейчас мы это выясним. И первым делом ответим на вопрос...

Как Web-сервер обрабатывает данные пользователя

Итак, каким же образом программа Web-сервера обрабатывает данные, отправленные ей пользователем?

Да никак. Web-сервер не приспособлен их обрабатывать. Его задача: прием от Web-обозревателя запроса на файлы (Web-страницы, таблицы стилей, графические изображения, фильмы, звуки, архивы, исполняемые файлы и т. п.), поиск этих самых файлов на жестких дисках серверного компьютера и отправка найденных файлов назад Web-обозревателю. Это его основная задача. Конечно, некоторые особо мощные серверы могут выполнять дополнительные действия над отправляемыми файлами перед собственно их отправкой (в частности, выполнять серверные директивы). Есть и программы-"многостаночники", выполняющие функции не только Web-сервера, но и сервера FTP, почты, новостей UseNet и бог знает чего еще. Но основная функция: простая выдача файлов по требованиям клиентов -и не более того.

Секрет в том, что данные посетителя обрабатываются не самим Web-сервером. Для этого применяются специальные программы, работающие вместе с Web-сервером на том же серверном компьютере. Они называются серверными программами, не имеют интерфейса пользователя и "общаются" только с Web-сервером, принимают от него введенные пользователем данные и возвращают ему результат. Этим они коренным образом отличаются от клиентских программ, работающих непосредственно с пользователем. (К клиентским программам относится, в частности, ваш любимый Web-обозреватель.)

Из этого следует, что Web-сервер умеет-таки принять данные от пользователя. Да, это входит в его основную задачу: принять данные и перенаправить их серверной программе. В свою очередь серверная программа их обработает и вернет Web-серверу результат.

Вот тут-то и начинается самое интересное. Дело в том, что результат, возвращаемый серверной программой Web-серверу, - это не что иное, как обычный HTML-код! Фактически серверная программа возвращает готовую Web-страницу, сформированную на основе данных, введенных посетителем. Такая страница называется динамической, в отличие от статических страниц, написанных Web-дизайнером и сохраненных в файлах на дисках серверного компьютера. А уж эту динамическую страницу Web-сервер и направляет клиенту в качестве ответа на введенные данные.

Серверные программы делятся на следующие четыре вида.

  1. Исполняемые программы, работающие через интерфейс CGI (Common Gateway Interface - общий интерфейс обмена), так называемые CGI-npoграммы. Эта разновидность серверных программ - самая старая, однако отнюдь не устаревшая.
  2. Расширения Web-сервера (приложения формата ISAPI, NSAPI, модули расширения Apache и т. п.). Новый способ, позволяющий встраивать серверные программы в сам Web-сервер, делая их его составными частями. Впервые предложен фирмой Microsoft для их сервера Microsoft Internet Information Server (интерфейс ISAPI) и разработчиками популярного бесплатного Web-сервера Apache.
  3. Активные серверные страницы (ASP, JSP и др.). Фактически это обычные статические Web-страницы, сохраненные в файлах, Которые, кроме обычного HTML-кода, включают в себя команды, обрабатываемые либо самим Web-сервером, либо его расширением. Также новый способ, впервые предложенный Microsoft для того же Internet Information Server.
  4. Серверные сценарии, написанные на интерпретируемом языке (Perl, Python, VBScript, JavaScript и др.). Обычные сценарии, работающие через интерфейс CGI или ISAPI на стороне сервера.

Теперь рассмотрим все это разнообразие подробнее.

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

К достоинствам CGI-программ можно отнести легкость создания (многие среды разработки программ поддерживают создание таких приложений, в частности популярнейший Borland Delphi, начиная с версии 3) и простоту отладки. Также, поскольку CGI-приложения представляют собой независимые программы, они выполняются отдельно от Web-сервера (как говорят программисты и системные администраторы, выполняются в другом адресном пространстве). Это значит, что при сбое в CGI-программе завершается только она - сам Web-сервер остается "на плаву". А недостаток у CGI-программ всего один: большой расход системных ресурсов, поскольку для обработки каждого набора данных запускается отдельная копия серверной программы. И если Web-серверу поступит слишком много запросов на обработку данных, серверный компьютер может и зависнуть.

Расширения Web-сервера - более новая разновидность серверных программ. Они представляют собой обычные библиотеки DLL, в которых реализована вся логика серверной программы. Такие библиотеки как бы встраиваются в программу Web-сервера и работают как ее неотъемлемая часть. Поскольку библиотеки DLL работают только в среде Windows, для того чтобы создавать расширения в иных операционных системах, были придуманы и другие форматы. В частности, модули расширения сервера Apache не являются библиотеками DLL,

Именно в виде библиотек DLL создаются расширения Web-серверов Internet Information Server фирмы Microsoft и Netscape Web Server фирмы Netscape. В первом случае расширения имеют формат ISAPI (Internet Server Application Programming Interface - интерфейс программирования приложений интернет-сервера), а во втором - NSAPI (Netscape Server Application Programming Interface - интерфейс программирования приложений сервер^ Netscape). Формат модулей расширения Apache так и называется - модули Apache.

Достоинство у расширений Web-сервера одно: бережный расход системных ресурсов. Дело в том, что для обработки всех наборов данных пользователя запускается всего один экземпляр расширения, который отнимает существенно меньше ресурсов, чем уйма запущенных CGI-программ. Однако расширения труднее создавать и отлаживать, к тому же они не так безопасны.

Как CGI-программы. Поскольку они работают как часть Web-сервера, любая ошибка в расширении приведет к зависанию сервера.

Оба описанных выше вида серверных программ обладают одним огромным недостатком. Прежде чем они смогут работать, они должны быть написаны на языке программирования и откомпилированы в машинные коды процессора, что отнимает много времени, особенно при отладке. Конечно, откомпилированные программы работают быстрее интерпретируемых, т. е. тех, где каждая инструкция читается, расшифровывается и обрабатывается специальной программой-интерпретатором. Но у интерпретируемых программ есть и свои преимущества, главными из которых являются простота и быстрота написания. Две следующие разновидности серверных программ, которые будут описаны, как раз будут интерпретируемыми.

Как уже говорилось, активные серверные страницы - это обычные Web-страницы, включающие в себя особые серверные сценарии, выполняемые самим Web-сервером или специальной серверной программой (CGI-приложением или расширением Web-сервера). В частности, ASP (Active Server Pages - активные серверные страницы), поддерживаемые Microsoft Internet Information Server, и JSP (Java Server Pages - серверные страницы, написанные на JavaScript), поддерживаемые рядом других Web-серверов, работают именно таким образом. Серверные страницы ASP пишутся на языках JavaScript и VBScript, a JSP - только на JavaScript.

Достоинства активных серверных страниц вы уже знаете: легкость и быстрота написания и простота отладки. Кроме того, поскольку активные серверные страницы -- это обычные Web-страницы с "вкраплениями" программного кода, их написание легко освоят все, кто знаком с HTML. Недостаток: относительная медлительность и повышенные требования к системным ресурсам.

Серверные сценарии подобны активным серверным страницам тем, что являются интерпретируемыми, однако представляют собой "чистый" программный код, без HTML-""примесей". Интерпретатор практически всегда представляет собой CGI-программу, однако ничто не мешает разработать его в виде расширения Web-сервера. Сценарии обычно пишутся на языке программирования Perl, специально предназначенном для обработки текста; также используются языки Python, JavaScript, VBScript и даже (как говорят) язык командных файлов MS-DOS. Фактически писать сценарии можно на любом языке программирования, для которого есть интерпретатор.

Достоинства и недостатки серверных сценариев те же, что у активных серверных страниц. Однако сценарии потребляют исключительно много системных ресурсов, даже больше, чем CGI-приложения. Ведь для обработки каждого набора данных пользователя запускается своя копия интерпретатора, а интерпретатор, в свою очередь, расходует много ресурсов на обработку сценария. И все же, несмотря на это, сценарии - самый популярный способ создания серверных программ.

В табл. 15.1 приведены расширения файлов серверных программ.

Таблица 15.1. Расширения файлов серверных программ

Вид серверных программ

Подвид

Расширение

CGI-программы

-

exe

Расширения Web-сервера

ISAPI и NSAPI Модули Apache

dll Нет расширения

Активные серверные страницы

Серверные сценарии

ASP JSP

asp jsp

Язык Perl JavaScript VBScript Другие языки

pl, cgi js, cgi vbs, cgi cgi

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

Как Web-обозреватель отправляет введенные данные

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

Элементы управления, предназначенные для ввода данных посетителя, помещаются в форму. Форма - это особый элемент страницы, выполняющий собственно кодирование данных и пересылку их Web-серверу. (Можно сказать, что форма является родителем для элементов управления.) Сами же элементы управления только принимают данные от посетителя, но не кодируют и не передают их.

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

Например:

Здесь мы рассмотрели идеальный случай, когда значения каждого элемента управления содержат только допустимые с точки зрения протокола HTTP символы: буквы латинского алфавита, цифры, тире, подчеркивания и некоторые другие знаки. (Как вы помните, HTTP - протокол передачи файлов, используемый Web-сервером.) Если же вы передаете данные, содержащие недопустимые символы, скажем, пробелы или буквы русского алфавита, каждый такой символ будет представлен в виде шестнадцатеричного кода, которому предшествует знак процента, например, так (закодированные символы пробела выделены полужирным шрифтом):

Благодаря такому формату данных написание обрабатывающих их серверных программ становится очень простым. В частности, язык Perl имеет встроенные средства расшифровки для этого формата.

Представленные в вышеуказанном виде данные впоследствии кодируются с использованием одного из предопределенных методов кодирования и отправляются по Сети серверной программе. Всем этим фактически занимается форма (но не элементы управления).

Сам процесс отправки данных начинается после того, как пользователь нажмет особую кнопку. Эта кнопка носит название Отправить (Submit -в англоязычных программах) и обязательно должна присутствовать в форме. Также в форме может присутствовать кнопка Сброс (Reset), обнуляющая введенные пользователем данные. Как правило, эти кнопки располагаются в самом низу формы.

Вы можете считать, что форма - это некое подобие обычного диалогового окна Windows-приложения, принимающего данные от пользователя, кодирующего их определенным образом и отсылающего основному окну. (Диалоговые окна Windows-приложений также обязательно имеют две кнопки: ОК и Отмена (Cancel).) Но если в случае обычного Windows-приложения программист должен явно задать, как будут шифроваться и пересылаться данные, в случае с Web-формой этого делать не нужно. Вам необходимо будет только задать три обязательных параметра:

  • интернет-адрес серверной программы, которая будет обрабатывать данные формы;
  • метод кодирования отправляемых данных;
  • один из двух методов отправки данных.

О методах отправки данных мы поговорим чуть позже. А сейчас выясним все о двух других обязательных параметрах формы.

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

http: //www. somesite. ru/bin/program.exe Так - адрес расширения Web-сервера: http: //www.somesite.ru/bin/extension.dll Это - адрес активной серверной страницы:

http: //www. somesite . ru/asps/active_page . asp

А это - адрес программы-сценария, написанной на языке Perl:

http: //www. somesite. ru/scripts/perl_script.pl

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

Для кодирования передаваемых по Сети данных обычно используются три наиболее популярных метода: application/x-www-form-urlencoded, multipart/form-data и (значительно реже) text/plain. Возможно применение и других способов кодирования, но в абсолютном большинстве случаев используются три перечисленных. Вдобавок эти три метода кодирования поддерживаются большинством программ Web-обозревателей.

Примечание

Если вы еще помните, что такое тип данных MIME, то, взглянув на приведенные выше названия методов кодирования данных, сразу увидите, что это как раз типы MIME. Именно с их помощью задаются методы кодирования.

В подавляющем большинстве случаев используется метод кодирования application/x-www-form-uriencoded. Кстати, именно он применяется по умолчанию, если метод кодирования не задан. Метод кодирования multipart/form-data используется, если вы собираетесь отправить на Web-сервер файлы; он обеспечивает соответствующее такому случаю преобразование двоичных данных. Последний метод - text/plain -- представляет данные в виде обычного текста, что может быть полезно, если данные формы будут отправляться по электронной почте (иногда применяется и такой способ передачи данных).

Итак, с кодированием данных разобрались. Остается выяснить, как же эти данные передаются по каналам Сети.

Как данные передаются по Сети

Как вы уже знаете, для пересылки данных по Интернету, да и по любой локальной или глобальной компьютерной сети, используется особый набор.правил, называемый протоколом. Протокол определяет, каким образом данные будут шифроваться и упаковываться для последующей передачи по сети. Естественно, что и передающая, и принимающая программы должны поддерживать один и тот же протокол, чтобы "понять" друг друга. (Иначе возникнет так называемая несовместимость по протоколу передачи данных, штука весьма неприятная.) Собственно, уже говорилось об интернет-протоколах и повторяться сейчас нет смысла.

Также вы знаете, что для пересылки по Сети Web-страниц и связанных с ними файлов (графических изображений, звуков, архивов и т. п.) используется протокол HTTP. Он же применяется и для передачи данных, причем для этого предусмотрены два метода передачи данных. Оба способа широко используются в интернет-программировании и имеют свои преимущества и недостатки. Давайте их рассмотрим.

Первый способ носит название GET по значению соответствующего параметра формы. При его использовании данные передаются как часть интернет-адреса в HTTP-запросе.

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

Возьмем, например, такой набор данных, приведенный чуть выше:

name1 = Ivan surname = Ivanovich name2 = Ivanov age = 30

Теперь подготовим его для пересылки по методу GET (сами данные выделены полужирным шрифтом):

http://www.somesite.ru/bin/program.exe?name1=Ivan&surname2=Ivanovich&name2=Ivanov&age=30

Как видите, пересылаемые по методу GET данные помещаются в самый конец интернет-адреса и отделяются от него вопросительным знаком. При этом пары "имя" = "значение" отделяются друг от друга знаком "коммерческое и" ("&"). Все очень просто и наглядно.

Такая простота и наглядность представления данных - основное преимущество метода GET. Как говорится, все на виду. Также значительно упрощается отладка Web-страниц: поскольку передаваемый Web-серверу адрес отображается в строке адреса Web-обозревателя, вы всегда сможете увидеть, что именно было передано. (Однако, как вы понимаете, конфиденциальные данные таким методом не передашь - их увидят все, кто стоит за вашей спиной.)

http://www.mysite.ru/bin/choose.exe?chapter=3

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

К несчастью, метод GET обладает огромным недостатком: с его помощью невозможно передавать большие объемы данных. Это происходит из-за ограничения, накладываемого стандартами на длину интернет-адреса: не более 256 символов. Вычтите отсюда длину собственно адреса серверной программы - и вы получите максимально допустимый размер ваших данных. Второй недостаток метода GET - обратная сторона его достоинства. Данные, пересылаемые им, открыты для всеобщего обозрения и могут быть легко прочитаны в строке адреса Web-обозревателя.

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

Метод POST передает данные серверной программе все в том же HTTP-запросе, но уже не частью интернет-адреса, а в виде так называемых дополнительных данных. Поскольку размер дополнительных данных не ограничен (по крайней мере, он может быть очень велик), вы можете передавать все, что угодно, в каких угодно количествах. В частности, именно этим способом Web-серверу могут передаваться даже файлы.

Достоинства метода POST: отсутствие ограничения на объем передаваемых данных и "невидимость" их. Недостатки: сложность расшифровки данных и трудность отладки. Методом POST передаются, например, анкетные данные, адреса покупателей в электронных магазинах, литературные произве дения на сайты http://www.stihi.ru и http://www.proza.ru и т. п. В общем, то, что имеет большие объемы.

Как говорят, комитет WWWC намерен вообще со временем отказаться от метода GET и все данные передавать с помощью метода POST. Пока что метод GET просто объявлен не рекомендованным для использования во вновь создаваемых сайтах, реально же он еще поддерживается Web-обозревателями.

Вот мы и выяснили все о серверных программах. Ну, может, не все, но пока нам этого достаточно. Теперь поговорим о том, насколько полно все это поддерживается Dreamweaver MX.

Серверное программирование - подход Dreamweaver

Трудно ли писать серверные программы? Да, трудно. Вероятно, даже труднее, чем Web-страницы.

Однако вспомните, часто ли нам приходилось писать HTML-код вручную? Совсем редко, не правда ли? А все потому, что Dreamweaver заботливо оберегал нас от этого, предоставляя удобный интерфейс для визуального создания страниц. Мы просто писали текст, форматировали его, помещали на страницу изображения, таблицы, применяли к элементам страницы поведения и т. п. Одним словом, чувствовали себя комфортно.

И неужели нам теперь придется писать серверные программы вручную?! Нет, совсем не обязательно.

Уже упоминалось, что Dreamweaver предоставляет неопытным пользователям и вообще тем, кто не хочет иметь дела с JavaScript-кодом, так называемые поведения. Поведение - это уже готовый сценарий, написанный профессиональными программистами и помещаемый в код Web-страницы самим Dreamweaver после того, как пользователь выберет это поведение в меню поведений панели Behaviors. Пользователю не надо заботиться о том, что в определенное место кода страницы необходимо поместить сценарий, выполняющий то или иное действие, ему не нужно будет проверять этот сценарий на наличие ошибок и согласовывать его с другими сценариями. Все это за него делает Dreamweaver.

В самом деле, набор операций, применяемых в серверном программировании, очень невелик. Открыть базу данных, получить из нее какие-то данные, вывести их на странице, записать новые данные - что еще нужно!

Конечно, если вы хотите реализовать какие-то хитроумные действия, вам придется писать серверные страницы "врукопашную". Но, согласитесь, такое бывает нечасто.

Итак, мы выяснили две вещи. Во-первых, Dreamweaver MX поддерживает создание серверных Web-страниц. Во-вторых, для помещения в них сценариев используются хорошо знакомые вам поведения. Dreamweaver предлагает большой набор поведений для серверных сценариев, которых вам хватит на первых порах.

Осталось выяснить, какие именно серверные страницы позволяет создавать Dreamweaver. Точнее, какие технологии создания серверных страниц он позволяет использовать. Таких технологий четыре, и сейчас они будут перечислены.

  1. ASP. Эта технология вам уже знакома.
  2. ASP.NET. Дальнейшее развитие ASP.
  3. PHP. Бесплатная технология, распространяемая с открытыми исходными текстами. Довольно популярна и часто используется с бесплатными же Web-серверами, например Apache.
  4. Macromedia ColdFusion. Собственная разработка фирмы Macromedia.

Какую же из них выбрать? Ведь нам надо будет создавать примеры Web-страниц.

Давайте выберем ASP. И вот почему.

Для того чтобы работать с серверными страницами, нам понадобится Web-сервер. Без него серверные страницы просто не будут работать. А, возможно, вы знаете, что со всеми более-менее новыми версиями Windows поставляется небольшой Web-сервер. В системах Windows 95/98/ME это Personal Web Server, а в Windows NT/2000/XP - Internet Information Server. Его возможностей нам вполне хватит для экспериментов с серверным программированием.

Так вот, этот Web-сервер полноценно поддерживает технологию ASP. Вы можете писать активные серверные страницы и выполнять их под ним. И вам не придется загружать никаких дополнительных компонентов - все, что вам нужно, уже включено в состав дистрибутивного комплекта Windows. Вот поэтому и был выбран ASP.

Технологию ASP.NET пока что не поддерживает практически ни один Web-сервер; фирма Microsoft пока что не выпустила ни один продукт с поддержкой этой технологии. Для работы с PHP-страницами вам придется искать и загружать по Сети довольно большой дистрибутивный комплект, содержащий обработчик РНР, а потом долго его настраивать. Что касается технологии ColdFusion, то вряд ли вы в состоянии выложить за нее несколько тысяч долларов. Так что вариантов у нас практически нет.

Введение в базы данных

Последнее, что мы рассмотрим в данной главе, - это базы данных и работу с ними. Поскольку львиная доля серверных программ работает именно с базами данных, нам эти знания очень пригодятся. Конечно, мы не будем рассматривать все технологии баз данных во всех подробностях, а, как и раньше, ограничимся кратким ликбезом. Вы сами можете поискать нужные книги и тексты в Сети, если заинтересуетесь этим.

Что такое база данных? Ничего особенного, обычный файл или группа файлов, содержащих данные, организованные особым образом. Если база данных состоит из множества файлов, она все равно остается единым целым. Данные, содержащиеся в базе, обрабатываются при помощи особой программы, называемой процессором баз данных. Процессор баз данных может быть как совершенно отдельной программой, работающей на том же компьютере, что и использующая данные программа, так и входить в ее состав.

Базы данных могут быть организованы по-разному. Но подавляющее большинство баз данных, эксплуатируемых в настоящее время, являются реляционными. Данные в таких базах организуются в виде таблиц. Каждая такая база данных может включать в себя одну или большее количество таблиц; сложные базы данных, как правило, имеют много таблиц, связанных между собой.

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

На рис. 15.1 приведен пример такой таблицы. Как видите, эта таблица имеет три поля:

  • NAME - название технологии создания серверных страниц, текстовое;
  • PRICE - цена программы-обработчика, числовое;
  • USING - поддерживается ли эта технология в настоящее время, логическое ("да-нет").

Кроме того, эта таблица имеет четыре записи, соответствующие технологиям, поддерживаемым Dreamweaver MX: ASP, ASP.NET, PHP и ColdFusion.

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

Пример таблицы, входящей в базу данных

Как получить доступ к отдельному полю, вы уже знаете, - по его имени. А как получить доступ к нужной записи?

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

Также программа может использовать поиск нужной записи по какому-либо критерию. Очень часто такой поиск выполняется по значению ключевого поля.

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

В общем случае, последовательность работы с данными, содержащимися в базе, выглядит так:

  1. Программа открывает базу данных, выполняя операцию открытия. Это необходимая операция, без которой невозможно получить доступ к базе.
  2. Программа открывает нужную таблицу базы. После этого процессор возвращает ей так называемый набор записей (по-английски -- recordset), с которым и работает программа.
  3. Программа выполняет собственно работу с данными.
  4. Программа закрывает таблицу, после чего процессор убирает соответствующий этой программе набор записей из памяти.
  5. Программа закрывает базу данных, разрывая все связи с ней.

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

В последнее время большую популярность- приобрели серверы баз данных. Это обычные процессоры данных, но реализованные в виде серверных программ и работающие на серверных компьютерах. Их преимущества перед обычными процессорами данных:

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

Чтобы получить доступ к серверу баз данных и самим данным, клиентская программа посылает ему особые команды. Для составления таких команд был разработан язык описания запросов SQL (Structured Query Language -язык структурированных запросов). С помощью команд, составленных на этом языке, клиентская программа может открыть нужную таблицу, считать данные, добавить, изменить, удалить запись и, в конечном счете, закрыть базу данных, когда нужда в ней отпадет.

Серверы баз данных применяются сейчас очень часто, а в Web-программировании - почти повсеместно. К наиболее популярным можно отнести Oracle, Microsoft SQL Server, Sybase, мощнейший IBM DB2, Borland InterBase (в России он продается под названием IBase), набирающий популярность PostgressSQL и бесплатный сервер MySQL, распространяющийся с открытыми исходными текстами. Последний сервер, кстати, очень часто используется в связке с Web-сервером Apache и технологией серверных страниц РНР.

На этом рассказ о базах данных и о серверном программировании можно считать законченным.

Уже говорилось, что отправку данных серверной программе выполняют особые элементы Web-страниц - формы. Именно о формах и о работе с ними в Dreamweaver мы с вами будем говорить в следующей главе. А уже потом перейдем собственно к серверному программированию.

Карьера в области веб-разработки является прибыльной, захватывающей и требующей готовности к постоянным изменениям. Для этого требуется определенный набор хорошо отработанных навыков и знание языков, которые вам нужно будет обновлять год за годом. В свою очередь, каждый день Вы сможете создавать действительно классные веб-материалы, и в конце каждого месяца вы будете получать хорошую зарплату. Неплохо, да?

В последние годы, когда сеть продолжает развиваться, появилось несколько различных потоков веб-разработки:

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

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

Итак, вот 10 лучших языков программирования для веб-разработки, как на стороне клиента, так и на стороне сервера.

CSS / HTML

Рука об руку с JavaScript идут CSS и HTML - вместе они составляют святую троицу разработки веб-интерфейса. HTML (Hyper Text Mark Up Language) - это язык веб-браузеров - с помощью которых сделаны сайты. Вы можете на нашем сайте. CSS (каскадные таблицы стилей) заставляет их выглядеть стильно и со вкусом - гораздо лучше, чем те ужасные сайты, действующие с первых дней работы в Интернете. Для разработчиков веб-интерфейсов очень важно знать эти инструменты от и до. Они также окажутся полезными для backend разработчиков: вы сможете понять, как изменения вашей серверной части влияют на конечного пользователя.

PHP

PHP - это скриптовый язык, используемый для быстрого создания динамических веб-страниц. Отличный выбор для frontend и backend разработчиков, чтобы добавить их в арсенал (но особенно для последних), он стоит за такими веб-гигантами, как WordPress и Facebook. PHP позволяет быстро и легко расширять веб-приложения и запускать веб-сайты с повторяющимися серверными задачами (например, обновлять новостные ленты). Он имеет открытый исходный код и очень популярен в среде начинающих компаний, медиа-агентств и электронной коммерции - таких людей, которые часто нанимают новых веб-разработчиков. А ещё, это любимый язык программирования , и да, у нас вы можете !

SQL

JavaScript

Язык интерфейса, используемый для создания и разработки веб-сайтов, настольных приложений и игр. JavaScript работает во всех браузерах и может работать с программами, которые не размещены в Интернете. Он поддерживает как функциональные, так и объектно-ориентированные стили программирования, и в основном, это ваш подход к созданию потрясающих пользовательских интерфейсов и веб-сайтов / приложений / игр, которые выглядят супер круто. Понимание JavaScript важно, даже если ваше сердце настроено на развитие серверной части. Компоненты, структуры данных и алгоритмы JavaScript применяются практически к любому другому языку.

Python

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

Go

Go - специальный язык программирования Google. Новичок на сцене программирования, который может похвастаться отличной интеграцией, хорошей читабельностью и простотой использования, а также возможностью решения множества проблем, с которыми друг языки не справляются. По мере появления новинок этот - очень перспективный. Кроме того, мы все знаем, что Google является королем Интернета на сегодняшний день, и именно он платит за создание веб-приложений за языке Go.

Java

Java, разработанная в 1990-х годах и по-прежнему наиболее востребованная, является золотым стандартом в области веб-разработки во всем мире, во всех областях. Она ориентирована на объекты и работает на любой платформе, что делает ее чрезвычайно универсальной. Если вы хотите, чтобы ваш safe можно было использовать практически во всех технологических компаниях в мире, то непременно выбирайте Java. Интересный факт: Java изначально предназначался для интерактивного телевидения, но вскоре его создатели поняли, что она слишком далеко опережает свое время для этой конкретной отрасли. Остальное уже история.

Ruby

Масштабируемая, простая и сверхбыстрая, Ruby и Ruby on Rails - это дуэт мечты, который предлагает язык full stack, а также рамки для быстрого создания полных программ. Любимый среди предпринимателей и начинающих, Ruby имеет широкий выбор сторонних «драгоценных камней» (надстроек), которые могут заставить его делать практически все, что вам нужно. Twitter и Basecamp используют Ruby - неплохой показатель, не так ли?

C++

Главная цель, правильно поставленная и действующая с 1979 года, C ++ - объектно-ориентированный, очень технический язык. Чрезвычайно мощный и с обширными библиотеками, это один из краеугольных языков backend развития. С++ особенно полезен для высокопроизводительных программ и программ с большим количеством шаблонов. Если вы уже знаете C (или если вы изучили C ++ и хотите повернуть свою голову на C), вы уже находитесь на правильном пути.

С

Подобно C++, C - старый школьный язык, легко скомпилированный. Это часто используемая платформа программирования, которая предлагает элементы построения для других языков, таких как C ++, Python и Java. Фактически, многие из этих языков основаны на C. Отличный вариант для full stack и тех, кто хочет добавить новое измерение в свой набор навыков (или метафорическое силовое упражнение в свою панель инструментов программирования). Он лучше всего подходит для написания системного программного обеспечения и приложений, гарантируя удобный язык для разработчиков, на котором все привыкли работать.

Карьера в области веб-разработки является прибыльной, захватывающей и требующей готовности к постоянным изменениям. Для этого требуется определенный набор хорошо отработанных навыков и знание языков, которые вам нужно будет обновлять год за годом. В свою очередь, каждый день Вы сможете создавать действительно классные веб-материалы, и в конце каждого месяца вы будете получать хорошую зарплату. Неплохо, да?

В последние годы, когда сеть продолжает развиваться, появилось несколько различных потоков веб-разработки:

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

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

Итак, вот 10 лучших языков программирования для веб-разработки, как на стороне клиента, так и на стороне сервера.

CSS / HTML

Рука об руку с JavaScript идут CSS и HTML - вместе они составляют святую троицу разработки веб-интерфейса. HTML (Hyper Text Mark Up Language) - это язык веб-браузеров - с помощью которых сделаны сайты. Вы можете на нашем сайте. CSS (каскадные таблицы стилей) заставляет их выглядеть стильно и со вкусом - гораздо лучше, чем те ужасные сайты, действующие с первых дней работы в Интернете. Для разработчиков веб-интерфейсов очень важно знать эти инструменты от и до. Они также окажутся полезными для backend разработчиков: вы сможете понять, как изменения вашей серверной части влияют на конечного пользователя.

PHP

PHP - это скриптовый язык, используемый для быстрого создания динамических веб-страниц. Отличный выбор для frontend и backend разработчиков, чтобы добавить их в арсенал (но особенно для последних), он стоит за такими веб-гигантами, как WordPress и Facebook. PHP позволяет быстро и легко расширять веб-приложения и запускать веб-сайты с повторяющимися серверными задачами (например, обновлять новостные ленты). Он имеет открытый исходный код и очень популярен в среде начинающих компаний, медиа-агентств и электронной коммерции - таких людей, которые часто нанимают новых веб-разработчиков. А ещё, это любимый язык программирования , и да, у нас вы можете !

SQL

JavaScript

Язык интерфейса, используемый для создания и разработки веб-сайтов, настольных приложений и игр. JavaScript работает во всех браузерах и может работать с программами, которые не размещены в Интернете. Он поддерживает как функциональные, так и объектно-ориентированные стили программирования, и в основном, это ваш подход к созданию потрясающих пользовательских интерфейсов и веб-сайтов / приложений / игр, которые выглядят супер круто. Понимание JavaScript важно, даже если ваше сердце настроено на развитие серверной части. Компоненты, структуры данных и алгоритмы JavaScript применяются практически к любому другому языку.

Python

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

Go

Go - специальный язык программирования Google. Новичок на сцене программирования, который может похвастаться отличной интеграцией, хорошей читабельностью и простотой использования, а также возможностью решения множества проблем, с которыми друг языки не справляются. По мере появления новинок этот - очень перспективный. Кроме того, мы все знаем, что Google является королем Интернета на сегодняшний день, и именно он платит за создание веб-приложений за языке Go.

Java

Java, разработанная в 1990-х годах и по-прежнему наиболее востребованная, является золотым стандартом в области веб-разработки во всем мире, во всех областях. Она ориентирована на объекты и работает на любой платформе, что делает ее чрезвычайно универсальной. Если вы хотите, чтобы ваш safe можно было использовать практически во всех технологических компаниях в мире, то непременно выбирайте Java. Интересный факт: Java изначально предназначался для интерактивного телевидения, но вскоре его создатели поняли, что она слишком далеко опережает свое время для этой конкретной отрасли. Остальное уже история.

Ruby

Масштабируемая, простая и сверхбыстрая, Ruby и Ruby on Rails - это дуэт мечты, который предлагает язык full stack, а также рамки для быстрого создания полных программ. Любимый среди предпринимателей и начинающих, Ruby имеет широкий выбор сторонних «драгоценных камней» (надстроек), которые могут заставить его делать практически все, что вам нужно. Twitter и Basecamp используют Ruby - неплохой показатель, не так ли?

C++

Главная цель, правильно поставленная и действующая с 1979 года, C ++ - объектно-ориентированный, очень технический язык. Чрезвычайно мощный и с обширными библиотеками, это один из краеугольных языков backend развития. С++ особенно полезен для высокопроизводительных программ и программ с большим количеством шаблонов. Если вы уже знаете C (или если вы изучили C ++ и хотите повернуть свою голову на C), вы уже находитесь на правильном пути.

С

Подобно C++, C - старый школьный язык, легко скомпилированный. Это часто используемая платформа программирования, которая предлагает элементы построения для других языков, таких как C ++, Python и Java. Фактически, многие из этих языков основаны на C. Отличный вариант для full stack и тех, кто хочет добавить новое измерение в свой набор навыков (или метафорическое силовое упражнение в свою панель инструментов программирования). Он лучше всего подходит для написания системного программного обеспечения и приложений, гарантируя удобный язык для разработчиков, на котором все привыкли работать.

Заранее признателен за комментарии, оценки и поправки (с учетом, что целевая аудитория - чайники).

Если всем пользователям при любых обстоятельствах требуется показывать одно и тоже, то соответствующий файл можно просто положить на сервер, но обычно этого недостаточно и хочется какого-то разнообразия. В таком случае на сервере нужно запустить программу, которая будет создавать HTML-текст необходимый в данном конкретном случае. Написание этих «серверных» программ (скриптов) и есть в общем-то основное дело веб-разработки, именно в них обычно скрывается 90% сложности и стоимости любого проекта. Т. к. программа выполняется на нашем сервере, а не на компьютере пользователя, то выбор инструментария полностью за нами и нет какого-то одного языка, на котором такие программы пишутся.

Первое и самое принципиальное решение, которое следует принять - операционная система нашего сервера. Теоретически это может быть что угодно, на практике в России в 93% случаев используют Unix, в 6.99% - Windows, в 0.01% - что-то иное. Я не совсем объективен, но не вижу ни одного аргумента в пользу Windows и два в пользу Unix, соответственно рекомендую всегда выбирать его. Аргумент первый: то, что более распространено, всегда удобнее, проще найти хостинг, проще найти специалиста, проще найти готовое решение какой-то подзадачи. Аргумент второй: стоимость лицензий на Windows/MS SQL/...; деньги там не запредельные, но всё же отличные от нуля. Если в качестве ОС мы выбрали Unix, то следующий естественный вопрос - какую его реализацию использовать - абсолютно незначителен и может быть решен исходя из личных предпочтений системного администратора.

Второе принципиальное решение - язык программирования. Выбор тут достаточно велик. Во-первых, есть целый класс языков, идеально подходящих для типичных задач web-программирования (а один из них специально для него и придуман) - "скриптовые языки". Сейчас это как минимум PHP, Perl, Ruby и Python. Именно на них написано подавляющее большинство сайтов от простейших интернет-магазинов до vkontakte.ru, например. По возможностям, удобству, производительности, средствам разработки, каким-то другим теоретическим показателям они примерно равны между собой, основная разница в наличии программистов. Прямо сейчас замеренные показатели рынка таковы: на 100 резюме PHP-программистов в России приходится 10 Perl и по 2-3 Ruby и Python-резюме. С другой стороны, из всех людей, которые называют себя PHP-программистами, к коду на пушечный выстрел нельзя подпускать 80%, для перловиков этот показатель в районе половины, а для Ruby и Python и того меньше. Понятно, что первые цифры объективны и взяты с рабочих сайтов, а вторые условная субъективная оценка и прямо перемножать их нельзя, но в любом случае, количество и программистов, и хороших программистов упорядочено именно в таком порядке: PHP, Perl, Ruby или Python, а средний их уровень в прямо противоположном. Таким образом, если у нас промышленный проект, с большим количеством разработчиков и текучкой кадров, то из Web-языков выбирать нужно PHP (допустимо использование Perl в случае каких-то очень важных локальных причин). Если же проект короткий, программист точно будет один и не будет меняться никогда, то выбор можно доверить ему, при этом выбор Ruby/Python может даже оказаться оптимистичным фактором.

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

Язык C. Язык, требующий максимальной аккуратности программиста, наиболее сложный в поиске ошибок, с наименьшим количеством доступных готовых решений и с самой низкой скоростью разработки. Все эти минусы он компенсирует только одним плюсом: производительностью, которая на несколько порядков лучше производительности PHP и его аналогов. В принципе, железо сейчас дешевое, а рабочая сила дорогая, плюс этот важен достаточно редко. Условно, если в проекте предполагается менее миллиона показов в сутки, то про C можно забыть смело, но, если показов больше, о нем следует только думать, а не принимать безоговорчно. На C написан, например, счетчик liveinternet.ru.

Язык С++. Обладает всеми теми же недостатками, что и С, но в менее явной форме, взамен дает соизмеримую, но меньшую производительность. Обычно применяется там, где производительность всё же требуется, а бизнес-логика очень сложна и находится на грани научности. Классический пример - поисковые сервисы. Важный недостаток, не дающий ему полностью вытеснить С на его нише, это большая свобода для неподдерживаемого кода. Как и в случае табличной верстки, на С все пишут примерно одинаково, и если код удовлетворяет формальным и проверяемым требованиям качества (не допускает утечки памяти, корректно обрабатывает ошибки и т. п.), то он скорее всего будет на вполне приемлемом уровне и по неформализуемым, но важным характеристикам типа «понятности» и «связности». А вот на C++ можно соблюдая все формальные требования написать, как великолепно, так и отвратительно. И естественно второе встречается чаще.

Язык Java. С технической точки зрения отличается от C++ примерно так же, как C++ отличается от C. Т. е. переход от C++ на Java это потеря ещё половины порядка производительности, но новый выигрыш в скорости разработки и библиотека готовых решений уже соизмерима со скриптовыми языками. С точки зрения социальной, количество программистов на Java меньше и количества программистов на C++, и количества программистов на PHP, при этом они в среднем дороже и, на мой субъективный взгляд, в среднем хуже тех и других. Причина такого странного расклада - в довольно большом рынке Java-разработки корпоративных систем, который с одной стороны поднимает зарплаты, а с другой прививает свою культуру и подход к программированию, который только вреден в вебе. В итоге, я не вижу ни одной ситуации, когда применение Java в веб-разработке было бы обосновано. (Но тем не менее odnoklassniki.ru написаны именно на Java и успешно работают.)

Если мы успели совершить ошибку и выбрали в качестве операционной системы Windows, то кроме перечисленных языков (все они в принципе больше ориентированы на Unix, но могут быть использованы везде) появляются ещё два варианта: это VBScript (некий аналог PHP) и C# (аналог Java). Т. к. я не вижу выигрыша от Windows, то и их рекомендовать не могу.

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

Все существующие (по крайней мере все популярные) инструменты универсальны. На каждом из них можно реализовать абсолютно всё что угодно, вопрос только в том, что с некоторыми инструментами это будет быстрее и дешевле, а с другими дороже и медленнее. В принципе, никто не запрещает использовать в одном проекте два разных серверных языка, но обычно это приводит к ухудшению управляемости проекта - мы зависим от двух специалистов (или двух групп специалистов) вместо одного, которые кроме собственно проектной работы должны тратить усилия на согласование как чисто социальное (общение между собой), так и техническое. Единственное оправдывающее себя исключение это связка одного из скриптовых языков с кем-то из пары C/C++. «Поверхностная» часть кода, отвечающая за интерфейс, пишется на скриптовом, а наиболее критичная к производительности внутренняя - на С или С++. При этом соотношение между частями в разных проектах может быть совершенно разным. Например, ulov-umov.ru представляет из себя очень алгоритмически сложный C++ проект, реализующий по сути собственную поисковую систему и небольшую Perl-обертку, рисующую пользовательский интерфейс из буквально 10 страниц. А внутри полностью PHP-шного readme.ru есть один маленький C-шный модуль, который по готовым данным быстро-быстро рисует информеры. Важно, что производительный язык всегда «внутри», а уж какую долю от объёма он занимает - зависит от локальных факторов.

Я мечтал, чтобы компьютеры стали такими же простыми в использовании, как телефоны. Недавно моя мечта сбылась - я не смог разобраться с моим новым телефоном.

Что такое веб-программирование

Веб-программирование – это частный случай программирования клиент-серверного приложения . Клиент-серверное приложение – это вид распределенной . Двигаясь от частного к общему, получаем, что веб-программирование – это частный случай программирования распределенной информационной системы. Теперь попытаемся двигаться в обратном направлении, с целью определить, чем именно характерен этот самый частный случай.

Распределенной системой в контексте разработки программных продуктов называют систему независимых приложений, которые зачастую выполняются на различных вычислительных машинах, обмениваются информацией по сетевым протоколам, но решают одну общую задачу или группу задач одного направления. Клиент-серверная архитектура приложения, в свою очередь, характерна тем, что в системе присутствует один или несколько серверов и один или несколько клиентов. Сервер и клиент – это не что иное, как роли отдельных частей распределенной информационной системы, к которым относят как программную, так и аппаратную ее составляющую. Как правило, клиентская часть таких приложений общается с пользователем посредством пользовательского интерфейса, формируя при этом параметры пользовательского запроса, после чего запрос отправляется на сервер. Серверная часть принимает запрос, выполняет все необходимые для его обработки вычисления и отправляет результат обратно клиенту. Как я уже сказал, сервером и клиентом также называют аппаратное обеспечение (компьютеры), на которых установлены клиентские и серверные программные компоненты.

Клиент заказывает, сервер выполняет - все просто, но зачем это нужно, если любые вычисления можно организовать в рамках одного приложения и на одном компьютере? Дело в том, что запрашиваемые вычисления могут требовать серьезных аппаратных ресурсов (мощность процессора, объем памяти и т.д.), а предоставлять такие ресурсы каждому клиенту весьма и весьма дорого. Часто вычисления связаны с анализом информации в базе данных, размеры которой могут превосходить все разумные пределы объемов информационных носителей, устанавливаемых на обычных персональных компьютерах – пользовательских (клиентских) рабочих станциях. Более того, данные должны быть едиными для всех пользователей, поэтому они просто обязаны находиться на общем для всех сервере, иначе о совместном ведении этих данных не может быть и речи. Самыми известными клиент-серверными информационными системами как раз и являются , такие как Oracle и Microsoft SQL Server. Серверная их часть обслуживает файлы самой базы данных и обрабатывает от десятков, сотен а то и тысяч клиентов. Клиентская часть СУБД – это в первую очередь провайдер базы данных – программный компонент, который позволяет открыть удаленное соединение с базой данных, принять и передать на сервер запрос, вернуть результат запроса назад клиенту и закрыть соединение. Все это выполняется по сетевому протоколу, такому как TCP/IP.

Теперь вернемся к веб-программированию. В данном случае мы также имеем дело с сервером, клиентом и сетевым протоколом, по которому сервер и клиент общаются. В случае с веб-программированием сетевой протокол – это , веб-клиент – это чаще всего интернет браузер, а веб-сервер – приложение, которое умеет . Наиболее популярными веб-серверами являются сервер Apache, который работает под управлением серверной операционной системы UNIX и Internet Information Server (IIS), функционирующий под управлением серверной версии Microsoft Windows. Ну а HTTP (HyperText Transfer Prоtocоl) – это прикладной сетевой протокол на базе TCP/IP, который и предназначен для передачи гипертекста. Итак, с тем, что такое веб-программирование, думаю теперь более или менее понятно.

Чем веб-программирование отличается от обычного программирования

Контекст исполнения. Если в случае с обычным “настольным” приложением контекст его исполнения представлен структурами данных, размещенными в оперативной памяти в рамках одного на клиентской машине, то в случае веб-программирования все несколько сложнее. Попытаюсь сформулировать, чем отличается веб-программирование от обычного приложения в плане организации контекста его исполнения. Во-первых, контекст исполнения поделен на всех участников распределенной системы, и они обязаны его как-то делить и синхронизировать между собой. Во-вторых, в случае с веб-программированием контекст исполнения теоретически существует только в ходе формирования и обработки одного клиент-серверного запроса. Имеется в виду, что жизненный цикл всех структур данных в оперативной памяти ограничен не всем периодом работы клиента с веб-приложением, а временем подготовки, отправки и обработки одного HTTP запроса. После перезагрузки интернет страницы все структуры контекста необходимо восстанавливать. Безусловно, существуют различные способы сохранять состояние сеанса между запросами, но эти способы не вписываются в канву программирования по принципу “запрос-ответ” и являются искусственными надстройками над инфраструктурой веб-программирования. Ведь так называемая stateless (без состояния) модель использования сервера, когда система не хранит своего состояния между запросами, а “просыпается” только тогда, когда запрос необходимо обработать, является более надежной в сравнении со stateful (с поддержкой состояния) моделью. Это так, поскольку выход из строя аппаратной или системной программной части сервера может привести к непредсказуемому поведению веб-приложения только в том случае, если этот сбой произойдет в момент обработки запроса. Также, элементарно может не хватить оперативной памяти для обслуживания большого количества клиентских запросов, при условии, что каждому сеансу необходимо обеспечить возможность сохранять и восстанавливать свое состояние. Тем не менее, совсем без контекста исполнения, разделяемого между запросами в некоторых задачах обойтись довольно сложно, поскольку в ходе вычислений часто приходится работать к ресурсам, обращение к которым может занимать много времени. Для того чтобы минимизировать подобные издержки наиболее критичные ресурсы разработчики предпочитают хранить “под рукой” - в оперативной памяти веб-сервера. Рассмотрим, какие существуют способы управлять состоянием веб-приложения. Поскольку мы имеем дело с общением клиента и сервера, то и контекст делится на клиентский и серверный. Далее перечислены способы сохранения и восстановления контекста исполнения или по-другому состояния сеанса работы веб-приложения на стороне клиента и на стороне сервера.

Контекст исполнения на стороне клиента можно сохранять:

  1. В оперативной памяти приложения клиента (интернет браузера). С выходом HTML5 для этих целей в браузерах должна появиться . Это весьма разумно, поскольку используется оперативная память клиента, а не сервера, который “один на всех”. С другой стороны, не все данные есть возможность хранить на стороне клиента, поскольку не все данные можно преобразовать в текстовый формат и передать на сервер.

  2. В небольших фрагментах текстовых данных, сохраняемых на стороне клиента – cookies. Cookies сохраняются в текстовых файлах, в разделах, выделенных операционной системой для хранения различной пользовательской информации. Эти данные передаются каждый раз серверу в заголовках HTTP запроса. Отдельным недостатком этого способа является то, что прием cookies может быть запрещен клиентом.

Контекст исполнения на стороне сервера можно сохранять:

  1. В области оперативной памяти, выделяемой веб-сервером (Apache, IIS) и называемой состояние приложения . Эти данные доступны со всех страниц веб-приложения всем его пользователям.

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

  3. В структурах базы данных. Это наиболее универсальный и надежный способ хранения контекста приложения. Универсальный потому что не зависит от природы веб-сервера, а надежный, потому что жизненным циклом состояния приложения и состояния сеанса управляет веб-сервер, в то время, как информацию в базе данных контролирует веб-приложение.

Еще одним довольно надежным способом хранения данных состояния сеанса является использование элементов HTML разметки. Приложение на стороне клиента может силами того же JavaScript и создать скрытые элементы со скрытыми полями, о существовании которых будет знать только сервер. Сервер, в свою очередь, обработает эти данные и в них же поместит ответ, если это необходимо.

Взаимодействие различных компонентов. Проблема стандартизации и унификации взаимодействия различных программных компонентов сложных программных продуктов свойственна не только веб-приложениям. Современные настольные приложения также состоят из различных библиотек, которые могут быть написаны различными разработчиками и с использованием различных программных платформ и . Для универсального способа общения таких компонентов между собой ведущими компаниями-разработчиками создаются соответствующие стандарты и технологии, например Component Object Model (COM) и от компании Microsoft или архитектура Common Object Request Broker Architecture (CORBA), продвигаемая консорциумом OMG.

Элементам веб-приложения также приходится общаться между собой, просто в их случае проблема стоит не так остро, поскольку их общение происходит на расстоянии (не в рамках одного процесса). С целью организации обмена информацией между клиентом и сервером довольно часто используют XML, который великолепно подходит для описания чего угодно, если это “что угодно” имеет ярко выраженную структуру. XML помещают в тело HTTP запроса и отправляют на сервер. Язык XML – это универсальный строительный материал, пригодный для решения абсолютно разных задач, поэтому на его базе создаются специализированные языки – протоколы сетевого взаимодействия, которые в последствии становятся общепринятыми стандартами. К таким протоколам следует отнести Web Services Description Language (WSDL) – язык описания интерфейсов веб-сервисов и Simple Object Access Protocol (SOAP) – протокол обмена структурированными сообщениями между компонентами распределенной информационной системы. Чаще всего сообщения SOAP представляют собой сигнатуру удаленных вызовов процедур и функций (методов) веб-сервиса с параметрами и без. Безусловно, для написания простейших веб-приложений, построением клиента и сервера которых занимается один программист или одна группа программистов необязательно использовать все эти надстройки, но если вы создаете интернет ресурс, клиентами которого должны стать не только рядовые пользователи, но и веб-приложения, создаваемые другими компаниями, то в процессе его разработки лучше придерживаться общепринятых стандартов.

Составляющие веб-программирования

Веб-дизайн

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

Здесь описаны решения типовых задач, с которыми часто имеют дело веб-дизайнеры: создание макета или шаблона интернет страницы, меню, элементов управления закладками, иерархической навигации типа “дерево” и многое другое.

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

Программирование на стороне клиента

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

Самый популярный и поддерживаемый всеми современными интернет браузерами язык программирования. Здесь вы найдете описание того, как на HTML страницу добавить JavaScript код и как использовать объектно-ориентированных подход при написании на нем пользовательских сценариев. Здесь есть и примеры JavaScript приложений.

Библиотека, написанная на JavaScript, в состав которой входит огромное количество полезных функций для работы с объектной моделью загруженной интернет страницы: от редактирования содержимого страницы до создания различных визуальных эффектов. Примеры использования jQuery здесь также присутствуют.

Технология создания динамических интернет страниц на основе асинхронной загрузки гипертекста (результат асинхронного выполнения HTTP запросов) в отдельные области текущей страницы. Приведено описание того, как использовать технологии AJAX с примерами на JavaScript, в том числе с использованием библиотеки jQuery.

Программирование на стороне сервера

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

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

Очень крутая технология веб-программирования от компании Microsoft. К сожалению, пока я не могу размещать здесь примеры веб-приложений, создаваемых с помощью ASP.NET, поскольку мой хостинг-провайдер не поддерживает эту технологию. Хочу сказать, что окружение ASP.NET позволяет создавать веб-приложения так же легко, как и обычные приложения. Вы имеете дело с привычными пользовательскими элементами управления, которые размещаете на странице с помощью привычных мастеров интегрированной среды разработки . Также, привычным образом вы добавляете к ним обработчики событий. Преобразование элементов управления в код HTML и JavaScript, генерацию proxy-классов по описанию WSDL, установку соединения и упаковку удаленных вызовов к другим веб-сервисам в сообщения SOAP берет на себя инфраструктура ASP.NET. Доступ к сервисам сохранения и восстановления контекста исполнения приложения, асинхронное обновление страницы средствами AJAX и многое другое также находится в зоне ее ответственности.

К минусам ASP.NET можно отнести то обстоятельство, что она стирает для разработчика границы между обычным программированием и веб-программированием, и он может не отдавать себе отчет, как именно работает его приложения. Возможно, это и не минус вовсе, но я считаю, что перед изучением этих замечательных технологий следует освоить базовые принципы веб-программирования на примере того же PHP. На этом про веб-программирование у меня пока все.

Похожие статьи