Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆

3.6. Программирование для серверов

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

Perl

Когда веб-программирование зарождалось, наиболее часто используемым языком программирования был Perl, который был создан в 1986 г. как инструмент для администрирования и конфигурирования системных ресурсов сети, состоящей из Unix-компьютеров. Синтаксис выражений Perl близок к синтаксису C++; это рекурсивный язык с рекурсией произвольной глубины, он приспособлен для сканирования текстовых файлов, но может обрабатывать и двоичные данные. Perl позволяет использовать регулярные выражения, создавать объекты, вставлять в программу на C++ куски кода на этом языке. Perl – интерпретируемый язык, приспособленный для обработки произвольных текстовых документов и файлов, извлечения из них необходимой информации и выдачи сообщений. Данный язык прост в использовании и эффективен. Язык получил большое распространение как инструмент создания исполняемых модулей-скриптов WWW-сервера. Perl-скрипты можно использовать для решения всех задач, возникающих при обеспечении WWW-доступа к базам данных. Perl эффективен также при обработке произвольных структур данных: отчетов, списков, карточек; он является надежным языком программирования, которым до сих пор пользуются многие разработчики.

if ("Hello World" =~ /World/) { print "It matches\n"; }

else { print "It doesn't match\n"; }

Технология ASP .NET

Новейшей версией технологии Active Server Pages является ASP .NET – ключевая в архитектуре Microsoft .NET Framework. Основное отличие этой технологии от ASP заключается в том, что код, присутствующий на Web-странице, не интерпретируется, а компилируется и кэшируется. Это повышает производительность Веб-приложений.

С помощью ASP.NET можно создавать Web-приложения и Web-сервисы, которые не только позволяют реализовать динамическую генерацию HTML-страниц, но и интегрируются с серверными компонентами.

Клиентами веб-сервера могут быть и мобильные устройства, отличающиеся ограниченным размером экрана, малым объемом памяти. Для этих устройств существуют свои протоколы передачи. При этом необходимо пе­редавать данные на мобильное устройство в соответствующем формате, для чего нередко создаются специальные сайты (например, поддерживающие WAP и WML). Более удобным представляется создание приложений, которые способны генерировать тот или иной код в зависимости от типа клиента. Именно такой подход и реализован в Microsoft ASP .NET.

Язык PHP. PHP хорошо справляется с задачей написания серверных скриптов и отлично интегрирован в сферу создания сайтов. Его используют в каче­стве базового языка программирования при создании сайтов, работающих на веб-сервере Apache и Nginx.

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

<?php if ($expression) { ?>

<strong>Это истина.</strong> <?php

} else {

?>

<strong>Это ложь.</strong> <?php

}

?>

Технология Ruby On Rails

В последнее время многие стали использовать фреймворк для построения веб-сайтов с каталогом продукции, использующих базы данных, Ruby On Rails. Эта технология совместима со всеми известными вариантами веб-серверов и баз данных. Главным достоинством технологии считают возможность увеличения скорости создания сайтов на 30–40% по сравнению с использованием PHP. Обеспечивается это большим количеством шаблонных библиотек и кода.

Ruby (англ. Ruby – рубин) – интерпретируемый высокоуровневый язык объектно-ориентированного программирования, вышедший в свет в 1995 г. Создатель Ruby – Ю. Мацумото. Целью разработки было создание настоящего объектно-ориентированного, легкого в разработке, интерпретируемого языка программирования. Язык обладает независимой от ОС реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и другими возможностями. Ruby близок по синтаксису к языкам Perl, Smalltalk, Python, Lisp. Сейчас Ruby входит в большинство дистрибутивов ОС Linux и доступен пользователям других операционных систем.

Пример:

#Gemfile

source 'http://rubygems.org'

gem 'rails', '3.0.9'

gem 'sqlite3'

gem 'haml-rails'

Ruby – объектно-ориентированный язык, в котором все данные являются объектами, а каждая функция – методом. Все переменные в Ruby являются ссылками. Например:

a = "abcdefg"

b = a

b #=> "abcdefg"

a[3] = 'R'

b #=> "abcRefg"

При изменении значения переменной a неявно изменилось и значение b, так как они содержат ссылку на один объект. Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы Ruby выведены из класса Object, следовательно, любой объект может использовать определенные в нем методы.

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

Возможности Ruby.

Этот язык имеет ряд характеристик:

  • Обеспечивает обработку исключений в стиле Java и Python.

  • Позволяет переопределять операторы (методы).

  • Не поддерживает множественное наследование, но может использовать концепцию «примесей», основанную на механизме модулей.

  • Содержит автоматический сборщик мусора.

  • Легко позволяет создавать расширения для Ruby на Си.

  • Поддерживает замыкания с полной привязкой к переменным.

  • Поддерживает блоки кода ({ … } или do … end).

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

  • Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода). Язык использует простые соглашения для обозначения области видимости. Пример: просто var – локальная переменная, @var – переменная экземпляра, @@var – переменная класса, $var – глобальная переменная.

  • В языке Ruby реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту.

Язык Ruby содержит немало оригинальных решений, редко встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, можно добавить к некоторой строке произвольный метод.

# все от символа и до конца строки – комментарий

# = является оператором присваивания,

# символы в «"» – строка, которой можно манипулировать

str = "Привет" # здесь создаётся переменная str, типа String

# def – ключевое слово для объявления функции

def str.bye# str. указывает, кому принадлежит метод (по умолчанию Object)

# bye – имя метода, за ним может следовать необязательный,

#заключенный в круглые скобки список параметров

"Пока!"

# из метода возвращается последнее значение – строка

end # ключевым словом end заканчиваются инструкции

# puts-метод,

# str.bye – обращение к методу bye объекта str

# значение, полученное из метода bye передается методу puts,

# который выводит на экран информацию

puts str.bye #=> Пока!

Этот пример демонстрирует, как в Ruby можно использовать синглтон. В этом примере синглтоном является объект str.

Любая конструкция в Ruby возвращает значение. Например:

# конструкция if вычисляет выражение и, если оно истинно,

# возвращает результат между then и else, иначе между else и end

puts( if 5 > 3 then "Одно" else "Другое" end ) #=> Одно

# происходит присваивание значения переменной var и

# возвращает значение var, которое выводится на экран

puts( var = 5 ) #=> 5

Контейнеры. Работа с массивами – одна из сильных сторон Ruby. Они автоматически изменяют размер, могут содержать любые элементы, а язык предоставляет мощные средства для их обработки.

# создаём массив

a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]

# => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]

# обращение по индексу

a[2] # => 3.14

# «разворачиваем» внутренние массивы, удаляем одинаковые элементы

a.flatten.uniq # => [1, 'hi', 3.14, 2, 4, 5]

# пытаемся найти индекс элемента со значением 6

a.index(6) # => nil

# неудача: возвращается значение nil

#почти для всех функций предоставляется

# аналог с тем же названием, но заканчивающийся на «!»,

# который модифицирует контейнер

a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]

# находим индекс первого элемента со значением 4

a.index(4) # => 5

Процедурные объекты и итераторы. В языке Ruby есть 2 эквивалентных способа записи блоков кода:

{ puts "Hello, World!" }

do puts "Hello, World!" end

Сопрограммы применяются с большинством встроенных методов:

File.open('file.txt', 'w') {|file| # открытие файла «file.txt» для записи («w» - write)

file.puts 'Wrote some text.'

} # Конструкция устраняет неопределенность с закрытием файла: за­крывается здесь при любом исходе.

Следующий пример показывает использование сопрограмм и итераторов для работы с массивами: представлена краткость записи на Ruby многих достаточно сложных действий (случайно выбираем из последо­вательности квадратов чисел от «0» до «10» и распечатываем вместе с индексами):

# для работы требуется ruby 1.9

(0..10).collect{|v| v ** 2 }.select{ rand(2).zero? }.map.with_index {|*v| v }

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

raise ArgumentError, "Неверный аргумент", caller

# caller - метод, возвращающий текущий стек выполнения

Обрабатываются исключения с использованием конструкции rescue. Опционально можно указать тип обрабатываемого исключения (по умолчанию обрабатываются все) и получение информации. Также можно добавлять блоки else (выполняется если исключения отсутствовали) и ensure (выполняется в любом случае).

begin

# ...

rescue RuntimeError => e

# обрабатываем конкретный тип ошибок

puts e # напечатаем сообщение об ошибке

rescue

# можно писать rescue => e чтобы получить объект исключения

# обрабатываем все исключения

else

# сработает, если исключений не было

ensure

# сработает в любом случае

end

Для Ruby существует несколько реализаций: официальный интерпретатор, написанный на Си, JRuby – реализация для Java, интерпретатор для платформы .NET IronRuby, Rubinius – написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM.

С официальной версией интерпретатора Ruby поставляется командная оболочка Ruby – Interactive Ruby Shell. Запускаемая командой irb в окне терминала (интерфейсе командной строки), она позволяет тестировать код программы очень быстро (построчно):

имитацию irb можно запустить непосредственно в браузере;

в поставке дистрибутива One-Click Installer для Windows поставляется утилита fxri, которая включает в себя справочную систему (ri) и интерактивный интерпретатор (irb).

Стандартная библиотека и расширения. Кроме того, что Ruby имеет мощные возможности, встроенные в язык, он обладает большой стандартной библиотекой, которая включает библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Также есть библиотеки для работы с архивами, датами, кодировками, матрицами; средства для системного администрирования, распределенных вычислений, поддержки многопоточности.

В Ruby заложен простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си.

Для унифицированного доступа к базам данных разработана библиотека Ruby DBI (поддерживает SQLite, Oracle, ODBC, MySQL, DB2, MS SQL, InterBase, ADO и др.). Также существуют библиотеки для конкретных баз данных, поддерживающих специфические для них операции. Реализована библиотека для работы с OpenGL, обеспечивающая программирование трехмерной графики. Win32utils – позволяет обращаться к специфическим возможностям Win32 API. Rmagick – библиотека для работы с изображениями, поддерживающая более 90 форматов (основана на ImageMagick и GraphicsMagick). Библиотека Ruport (Ruby reports) предназначена для легкой реализации отчетов и создания диаграмм на основе данных из баз данных (БД) или прямо из текстовых файлов CSV. Причем результаты можно сохранять в форматах PDF, HTML, CSV и TXT.

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

Система RDoc предназначена для автоматического извлечения документации из исходных кодов и программ на языке Ruby и ее дальнейшей обработки, является стандартом для подготовки документации по про­граммному обеспечению, написанному на Ruby. Онлайн-документация доступна на сайте http://www.ruby-doc.org.

Технология Python

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

Пример:

def myWonderfulMethod():

  return "Некоторый метод"

myWonderfulMethod = staticmethod(myWonderfulMethod)

ASP.NET

Создание веб-сайта требует использования различных технологий: графический дизайн, верстка HTML, программирование клиентской части – интерфейс пользователя, программирование серверной части. Microsoft ASP.NET представляет собой комплексную технологию серверного программирования со встроенными средствами создания ин­терфейса пользователя.

Достоинства ASP.NET:

  1. Объектно-ориентированный подход.

  2. Поддержка визуальных компонентов, инкапсулирующих не только вы­вод HTML, но и Javascript и даже AJAX. Кроме встроенных, суще­ствуют компо­ненты сторонних производителей. Есть возможность наследо­вать свой компонент от чужого и улучшать его, адаптируя под свои потреб­ности.

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

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

  5. Полноценный компилируемый язык программирования (C#, VB.NET, Delphi, J#).

  6. Удобная среда разработки и отладки приложений.

  7. Шаблоны дизайна, пользовательские элементы управления, мо­дель codebehind – позволяют не только отделить программный код от представления, но и использовать многократно один и тот же код.

  8. Встроенная авторизация и аутентификация.

  9. Встроенная поддержка веб-сервисов.

  10. Расширяемая архитектура, основанная на провайдерах в таких областях, как:

авторизация;

хранение файлов;

компиляция;

сессия.

  1. Усовершенствованная архитектура доступа к данным ADO.NET.

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

  3. Разработка веб-сайтов любой сложности.

ASP NET-технология создания веб-сайтов от компании Майкрософт. На данный момент последней версией этой технологии является ASP.NET 4.0. Разработчики пишут код для ASP.NET, используя языки программирования C# или Visual Basic.NET. При первом обращении к странице сайта, созданного на ASP NET, код компилируется и помещается в специальный кэш, поэтому впоследствии не требует затрат времени на парсинг, оптимизацию и т. д. Поэтому ASP.NET имеет преимущество в скорости по сравнению со скриптовыми технологиями (Perl, Python, PHP, Ruby).

В ASP NET встроена поддержка AJAX. Создание сайта на ASP NET ведется в среде разработки Visual Web Developer, которая позволяет большинство ошибок устранять еще на стадии разработки. ASP.NET обеспечивает возможности создания сайтов со сложной бизнес-логикой. Применять ASP.NET для небольших проектов не всегда рационально. На ASP.NET делают сайты финансовых организаций (http://www.webmoney.ru/) и банковские сайты.

Платформа ASP.NET2/MS SQL Server 2005 стала основной для создания очень больших корпоративных порталов и систем.

Язык C#

(Си-шарп) – объектно-ориентированный язык программирования для платформы .NET. Разработан в 2000 г. А. Хейлсбергом, С. Вилтамутом и П. Гольде под эгидой Microsoft Research. Основным постулатом С# является высказывание: "Всякая сущность есть объект". Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода. C# был создан специально для технологии ASP.NET. В то же время на C# полностью написана и сама ASP.NET. C# – полнофункциональный объектно-ориентированный язык, который поддерживает все три «столпа» объектно-ориентированного программирования: инкапсуляцию, наследование и полиморфизм. Он имеет прекрасную поддержку компонентов, надежен и устойчив благодаря использованию «сборки мусора», обработки исключений, безопасности типов.

Язык C# разрабатывался и вобрал в себя много полезных свойств таких языков, как C++, Java, Visual Basic, Delphy и др. Как и Java, C# разрабатывался специально для Интернет. Примерно 75 процентов его синтаксических возможностей аналогичны языку программирования Java, его также называют очищенной версией Java. Третья версия языка C# была представлена в 2005 г.