
- •14. Применение Веб-методов. Технология Jasp
- •14.1. Веб-сервисы
- •14.1.1. Введение
- •14.1.2. Веб-службы в asp.Net
- •14.1.3. Доступ к Веб-сервисам в управляемом коде
- •14.1.3.1. Взаимодействие клиент-сервер для клиентов ajax
- •14.1.3.2. Клиентская архитектура технологии ajax
- •14.1.3.3. Серверная архитектура ajax
- •Xml-сериализация. Уровень связи Веб-служб поддерживает xml-сериализацию для soap-запросов к Веб-службам и возвращения типов xml по json-запросам к Веб-службам.
- •14.1.4. Создание Веб-сервиса
- •14.1.4.1. Директива обработки WebService
- •14.1.5. Выполнение http-запросов из клиентского сценария ajax
- •14.1.6. Предоставление доступа к Веб-службам в клиентском сценарии
- •14.1.6.1. Предоставление доступа к сервисам из клиентского сценария на Веб-странице asp.Net
- •14.1.6.2. Примеры
- •14.1.7. Ключевые термины
- •14.2. Технология Jasp
- •14.2.1. Введение
- •14.2.2. "Hello World" на Jasp
- •14.2.3. Создание страницы с разметкой, скриптом и стилями
- •14.2.4. Ресурсы в Jasp
- •14.2.4.1. Css ресурсы
- •14.2.4.2. JavaScript ресурсы
- •14.2.4.3. Html ресурсы
- •14.2.4.4. Бинарные ресурсы
- •14.2.5. Страницы и компоненты
- •14.2.5.1. Создание страниц
- •14.2.5.2. Создание компонент
- •14.2.5.2.1. Создание экземпляров компонент программно
- •14.2.5.2.2. Создание экземпляров компонент через разметку
- •14.2.5.2.3. Создание экземпляров компонент на JavaScript
- •14.2.6. Передача данных на клиентскую сторону
- •14.2.7. Наследование компонент и страниц
- •14.2.7.1. Наследование разметки
- •14.2.7.2. Наследование стилей
- •14.2.7.3. Наследование JavaScript
- •14.2.8. Конфигурирование Jasp
- •14.2.9. Ключевые термины
- •14.3. Краткие итоги
14.1.7. Ключевые термины
ASP.NET, .NET Framework, Веб-служба, Веб-сервис, AJAX, JSON, Сериализация, XmlHttpExecutor, WebRequestManager, WebRequest, JavaScript.
14.2. Технология Jasp
14.2.1. Введение
Jasp является библиотекой для разработки Веб-приложений с использованием платформы Microsoft .NET Framework [9, 10]. Основным отличием Jasp от ASP.NET является ориентация библиотеки на клиентскую сторону, чтобы программисту было проще создавать "богатый" пользовательский интерфейс в первую очередь средствами языка JavaScript, CSS и в последнюю очередь HTML, сгенерированным на стороне сервера (как это часто бывает при разработке на ASP.NET). Такие приложения зачастую состоят из небольшого количества страниц (чаще всего одной), и все необходимое подгружают по мере использования без перезагрузки страницы. Примером таких приложений могут п ослужить сервисы: GMail, Google Maps, Pusk.ru и другие.
Примечание: скачать библиотеку Jasp, а также примеры и документацию можно на http://code.google.com/p/jaspproject/ или www.jaspproject.ru.
Основной недостаток ASP.NET заключается в сложности разработки клиентских компонент (использующих JavaScript).
Рассмотрим простой пример: предположим, на странице необходимо вводить дату, и в целях экономии места на странице было решено сделать текстовое поле с выпадающим вниз календарем. Есть два пути решения: создать наследника UserControl, и наследника WebControl. У каждого из вариантов есть плюсы и минусы. В первом случае несомненным плюсом является возможность создания разметки, скриптов и стилей прям в ASCX-файле, но при этом данный компонент нельзя использовать в других проектах (только если копировать код из одного проекта в другой). Во втором случае нет ASCX-файла, а все дочерние компоненты приходится создавать программно. С другой стороны такой компонент можно использовать повторно.
В обоих случаях, при реализации клиентской части компонента возникает ряд проблем:
всегда необходимо передавать ClietnID компонента в JavaScript-код, что конечно возможно, но не всегда удобно;
приходится следить за загрузкой связанных с компонентом ресурсов: изображений, стилей и вспомогательных JavaScript-файлов;
вместо отсутствующей клиентской части компонент есть простой набор вызовов и несколько объявлений JavaScript-функций.
Обобщим все возможные проблемы, при создании компонент на классическом ASP.NET:
Различные трудности, возникающие при связи серверной и клиентской части компонента, в результате которых зачастую на клиентской стороне получается не полноценный объект с набором свойств и методов, а набор строк JavaScript-кода, с которым, нельзя работать как с одним объектом.
Огромный размер ViewState. Есть плюсы его использования, но чаще всего (особенно при использовании красивых и функциональных сторонних компонент), он достигает таких больших размеров, что из-за него страдает производительность, даже если его хранить на сервере.
Использование ASP.NET Ajax зачастую приводит к непредсказуемым результатам. ViewState пересылается при каждом, пусть и асинхроном PostBack'e, даже там, где это не нужно, что в свою очередь не очень хорошо сказывается на производительности;
Ресурсы, загружаемые с помощью WebResource.axd. Порой на одной странице их скапливается довольно много, тем самым, осложняя жизнь браузеру. К тому же не все браузеры способны одновременно загружать несколько ресурсов на страницу.
При большой вложенности компонент получаем огромные ClientID, что плохо сказывается на результирующем размере HTML разметки, а иногда приводит к полной неработоспособности страницы.
Нет возможности полноценного наследования компонент (включая клиентскую сторону или HTML разметку).
При создании WebControl'ов создание дочерних компонент приходится делать вручную.
При создании UserControl'ов, их нельзя использовать в других проектах.
Технология Jasp пытается решить все указанные проблемы. Компонент Jasp одновременно является как серверным (разработка в ключе классического ASP.NET), так и клиентским (JavaScript-компонентом). Каждый компонент можно использовать и в других проектах (даже имеющий разметку и собственные ресурсы) без всяких изменений. Присутствует возможность наследования, как серверной части, так и клиентских частей: JavaSctpt, CSS и разметки. Все ресурсы загружаются автоматически и по мере использования (синхронно или асинхронно). При первой загрузке страницы загружаются только необходимые ресурсы, оптимизирова нные и сгруппированные в несколько файлов. Jasp можно использовать со всеми распространенными JavaScript-библиотеками: jQuery, ExtJS, Prototype и т.п.