Многие разработчики полагают, что технология ASP.NET является чем-то вроде продолжения ASP, т. е. что это, если так можно выразиться, перенесенная на платформу .NET версия ASP 3.0, несколько усовершенствованная и дополненная поддержкой новых языков. Подобное представление в корне неверно. ASP.NET является концептуально новой современной платформой, предназначенной для создания Web-приложений. Специалистами Microsoft в ASP.NET заложено все для того, чтобы сделать цикл разработки Web-приложения более быстрым, а поддержку — более простой.

Для начала мы обсудим новые возможности ASP.NET, и я подчеркну отличия от ASP, чтобы на конкретных примерах продемонстрировать новые принципы построения приложений для Internet, призванные максимально облегчить работу программистов.

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

Библиотеки. Теперь при написании приложений можно задействовать набор компонентов, поставляемых с .NET, а он достаточно велик. Использование библиотеки классов Common Language Runtime (CLR) уменьшает количество кода, ускоряет процесс разработки, установки и переноса приложения.

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

Поддержка средств разработки. Visual Studio.NET предоставляет возможность создания и редактирования приложений в режиме WYSWYG, включает в себя средства, упрощающие разработку и перенос приложений, а также отладку сценариев. Но, несомненно, никто не отнимает права написания кода в любимом редакторе, будь то CodeWright, EditPlus или NotePad.

Языковая независимость. ASP.NET работает в рамках Common Language Runtime, что позволяет писать код на любом языке, для которого существует компилятор, поддерживающий эту технологию. Сейчас имеется поддержка для JScript, VB, Perl и C#.

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

Обработка ошибок. В связи с новыми концепциями (в частности, с компиляцией программных текстов) в ASP.NET добавлены более широкие возможности обработки ошибок. На стадии разработки можно получить полную информацию об ошибке и листинг нужного куска кода. Для обработки ошибок, которые могут случиться во время выполнения приложения, можно использовать новую директиву ErrorPage.

Объектно-ориентированная разработка. Использование C# позволяет в полной мере задействовать концепции, методы и шаблоны объектно-ориентированной разработки.

Повторное применение. Помимо возможностей объектно-ориентированного программирования, ASP.NET представляет новые технологии, такие, как пользовательские элементы управления (user controls), новую концепцию установки (bin) и другие возможности.

Набор серверных компонентов ASP.NET. В комплект ASP.NET входят различные серверные компоненты: от самых простых (кнопка, список) до нестандартных и более функционально богатых (календарь).

Структура

Теперь немного поговорим о внутренней организации ASP.NET. Если продолжить сравнение с ASP, надо отметить, что в связи с описанными нововведениями внутренняя организация не могла остаться прежней. Если ASP представляла собой ISAPI DLL, с набором компонентов и несколькими системными файлами, то ASP.NET — часть глобальной платформы .NET. Создание этой платформы — важнейшее направление новой стратегии Microsoft; она соответствует всем современным стандартам разработки как для распределенных систем, так и для настольных приложений. На Рисунке 1 приведена схема, на которой показано взаимодействие различных частей .NET. Взаимодействие строится следующим образом: библиотека .NET Framework предоставляет интерфейс приложениям, а сама при этом взаимодействует непосредственно с операционной системой. Выше лежит интерфейс приложений ASP.NET, на котором, в свою очередь, базируются Web-формы (страницы ASP.NET) и Web-службы. Интерфейс .NET Framework позволяет стандартизировать обращение к системным вызовам и предоставляет среду для более быстрой и удобной разработки.

Рисунок 1. Схема работы .NET.

Intermediate Language — общий промежуточный язык, в который компилируется любой код под .NET, независимо от того, был ли он написан на C#, VB.NET или другом языке, — позволяет создавать системы на любом языке. И независимо от того, используется ли C#, VB.NET, JScript.NET или Perl.NET, на выходе получается готовый к выполнению код. На Рисунке 2 показана схема процесса компиляции и выполнения приложения ASP.NET. При запросе страницы проверяется, есть ли на диске ее скомпилированная версия и не обновлялась ли страница с момента компиляции. Если есть актуальная версия, она подгружается с диска и выполняется средой .NET. Результат выполнения страницы отсылается клиенту. Если же такая версия не была найдена, страница сначала компилируется. Для этого используются соответствующие компиляторы, которым на вход подается исходный код самой страницы, ее code-behind (т. е. непосредственно исполняемый код, стоящий за Web-формой, который написан отдельно — он может отсутствовать) и код элементов управления. Полученный в результате код сохраняется на диске. В некоторых случаях, а именно, когда в кэше имеется сохраненный результат обработки страницы, MSIL-код даже не приходится выполнять.

Рисунок 2. Схема работы ASP.NET.

На практике

Данный процесс кажется сложным, но разработчики всей этой сложности не замечают — процедура создания страниц ASP.NET достаточно проста. В подтверждение своих слов я хочу создать простейшую ASP.NET-форму. Для написания формы нужно сначала установить, собственно, ASP.NET. Установка начинается с получения комплекта .NET Framework SDK. Размер дистрибутива достигает 90 Мбайт, однако имеется возможность загрузки SDK в виде набора маленьких файлов. После загрузки требуется запустить файл setup.exe и следовать его инструкциям. ASP.NET распространяется как составная часть .NET SDK — сборника всех технологий, необходимых для создания, сборки и тестирования приложений, основанных на .NET Framework. Перед установкой ASP.NET следует инсталлировать Internet Explorer 6. NET SDK можно взять и с компакт-диска Windows Component Update из Visual Studio.NET. Если VS.NET на сервере установлен, то для того, чтобы запускать приложения ASP.NET, уже все есть.

Первую форму мы создадим с привлечением минимальных средств — нам падобится .NET Framework, Internet Information Services 5 и текстовый редактор. Создание формы начнем с написания приложения на Web-сервере. Создадим папку, в которой будет находиться приложение. Предположим, C:SampleApplication. Затем запустим Internet Services Manager. Создадим на сервере новый виртуальный каталог. Для этого нужно вызвать контекстное меню Web-сервера и выбрать пункт NewVirtual Director. На экране появится мастер Virtual Directory Creation Wizard. С его помощью нужно указать имя нового приложения, пусть это будет CustomApp. Далее следует указать каталог, в котором будут находиться файлы приложения. В нашем случае это C:SampleApplication. Следующий шаг — назначить права доступа к приложению (их можно оставить заданными по умолчанию). Далее в полученной папке создадим файл Default.aspx (см. Листинг 1).

Листинг 1. Default.aspx.
<%@ Page Language="C#"
 Codebehind="Default.aspx.cs"
 Inherits="Default" %>


Опишу вкратце код этого листинга.

В первой строчке стоит директива @ Page, которая задает параметры страницы. Здесь, в частности, указано, что мы пишем на C#, что на странице у нас будет проводиться дополнительная программная обработка, определенная в файле Default.aspx.cs (мы его еще напишем), а наследоваться страница будет от класса Default (который будет описан в файле Default.aspx.cs).

Далее следует форма. Все серверные элементы управления должны быть включены в серверную форму (

), а такая форма на странице может быть только одна.

В нашей форме прописано три элемента: TextBox, Button и Label. Заметим, что каждому назначен атрибут runat="server", причем все элементы закрываются как XML-теги, и у них прописаны атрибуты id, которые идентифицируют элемент на странице. С помощью атрибута Text мы задали текст на кнопке.

Теперь создадим файл Default.aspx.cs (см. Листинг 2). В этом файле мы формируем класс для нашей страницы. Он наследуется от класса System.Web.UI.WebControls.Page. В нем определены защищенные (protected) члены, соответствующие элементам управления на нашей странице (имена членов совпадают с идентификаторами элементов, типы соответствуют именам тегов). В теле класса переопределен метод OnInit. Он вызывается при инициализации страницы. В нем мы связываем обработчик события от кнопки с самим событием. Собственно обработчик изменяет текст метки.

Листинг 2. Default.aspx.cs.
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Default : Page
{
protected Button btnHello;
protected Label lblMessage;
protected TextBox txtName;
override protected void
 OnInit( EventArgs e )
{
btnHello.Click += new
 System.EventHandler(this.btnHello_Click);
}
private void btnHello_Click
( object sender, EventArgs e )
{
lblMessage.Text = "Hello,
 " + txtName.Text;
}
}

Теперь нужно скомпилировать файл Default.aspx.cs командой

csc /target:library Default.aspx.cs.

CSC — это компилятор C#, поэтому необходимо убедиться, что в системе путь к нему прописан, и можно выполнять компиляцию из Visual Studio .NET Command Prompt. При этом будет создан файл Default.aspx.dll. Нужно создать подпапку bin в папке приложения и скопировать в нее .dll-файл. Все. Чтобы увидеть результат, следует открыть в браузере страницу http://localhost/CustomApplication.

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

Итак, требуется запустить Visual Studio и выбрать в меню пункт FileNewProject. В открывшемся диалоговом окне нужно выбрать папку Visual C# projects (если язык написания C#) или другой язык (VB.NET, например). В правой части следует выбрать ASP.NET Web Application. В поле Location нужно указать URL приложения (ASP.NET-приложения создаются в Web). Обычно этот URL имеет вид http://localhost/Имя_ _приложения. Нажимаем OK.

Visual Studio создаст проект по умолчанию, который состоит из файлов, перечисленных в Таблице 1. По сути, приложение готово, но оно ничего не делает. Нужно вывести на экран хотя бы «Hello, world!». Для этого добавим в нашу форму поле ввода, метку и кнопку. Чтобы это сделать, откроем панель Toolbox. Сначала добавим поле ввода. Для этого перетащим элемент TextBox с панели на нашу страницу. В панели свойств установим для нашего поля ввода идентификатор txtName. Таким же способом добавим на страницу метку (Label) и кнопку (Button). Присвоим метке ID=lblMessage, Text — пустую строку, а Button — btnHello и SayHello, соответственно.

Теперь хотелось бы добавить некоторую логику. Наша страничка будет «здороваться» с пользователем по имени, после того как он введет свое имя в поле ввода и нажмет кнопку. Для этого нужно написать обработчик события «пользователь нажал на кнопку» и вывести в метке соответствующий текст. Для создания обработчика следует дважды щелкнуть на кнопке мышью. Visual Studio откроет файл с именем WebForm1.aspx.cs. Такого файла в проекте не было, и тем не менее он существует. К каждой форме невидимо привязываются файлы с расширениями .aspx.cs и .aspx.resx, но их в проекте не показывают, чтобы не перегружать его. В файле .cs содержится код страницы. После того как его открыли, дважды щелкнув на кнопке, в него добавился соответствующий обработчик. В него требуется ввести следующий код:

private void btnHello_Click
(object sender, System.EventArgs e)
{
lblMessage.Text = "Hello,
 " + txtName.Text;
}

Теперь нужно скомпилировать проект. Это делается комбинацией клавиш Ctrl+Shift+B или командой меню BuildBuild Solution. Чтобы посмотреть, что же получилось, запустим Web-браузер и наберем адрес нашей страницы: http://localhost/SampleApplication/WebForm1.aspx. Теперь нужно ввести в поле свое имя и нажать кнопку. Результат представлен на Экране 1.

Экран 1. Результат работы.

Итак, я показал, насколько легко создавать страницы на ASP.NET как с использованием интегрированной среды Microsoft Visual Studio .NET, так и без нее. Я надеюсь, мне удалось убедить читателей в том, что новую технологию нужно, по крайней мере, попробовать — думаю, вы не пожалеете.

Андрей Филев — ведущий консультант компании dotSITE Ltd.Co., специалист в области проектирования и разработки корпоративных систем, работает с .NET почти два года. С ним можно связаться по адресу: info@dotsite.spb.ru.