четверг, 26 августа 2010 г.

Основы Asp.Net – Часть 3

В этой статье мы создадим наше первое приложение на ASP.NET.

Первое приложение ASP.NET

Перед тем как завершить эту вводную часть, давайте произведем следующую операцию: откроем файл default.htm и внесем в него следующие изменения (не забудем добавить к расширению файла ASP букву x):

<forrn name=MainForrn

action=" http://localhost/Cars/ClassicASPPage. aspx" method=post ID=Form1>

Затем изменим расширение нашего файла ASP на * .aspx и запустим наше при­ложение снова. Как можно убедиться, все будет работать так же, как и раньше.

Нас можно поздравить! Мы только что создали первое приложение ASP.NET. Это было не очень сложно - достаточно было изменить расширение файла классических ASP с * .asp на *.aspx. Вывод напрашивается сам собой - то, что мы ис­пользовали в нашем файле классических ASP, используется и в ASP.NET. Одна­ко, конечно же, в ASP.NET достаточно много отличий от технологии классичес­ких ASP. Многие из этих различий (как и общие возможности ASP и ASP.NET) мы сейчас рассмотрим.

Некоторые проблемы классических ASP

Классические ASP - это очень популярная архитектура создания web-приложе­ния, однако она не лишена недостатков. Главный недостаток классических ASP заключается в том, что в них используются языки скриптов. Несмотря на всяческие хитрые приемы (например, кэширование откомпилированных скриптов для более быстрого повторного выполнения), языки скриптов - это большой проиг­рыш как в производительности (поскольку они являются интерпретируемыми), так и в возможностях (поскольку в них не поддерживаются многие технологии объектно-ориентированного программирования).

Еще одно неудобство классических ASP связано с тем, что в них код HTML смешан с кодом скриптов. В принципе, классические ASP позволяют размещать код HTML отдельно от кода скриптов, но суть дела от этого не меняется: логика представления (код HTML) не отделена от бизнес-логики (то есть от собственно исполняемого кода).

Еще один момент, знакомый любому web-разработчику, использующему ASP, заключается в том, что из проекта в проект приходится переносить одни и те же повторяющиеся блоки кода скриптов. В большинстве web-приложений требуется выполнять одни и те же действия: проверять данные, вводимые пользователем, обеспечивать форматирование HTML и т. п. Гораздо удобнее было бы использовать уже готовые решения, а не копировать код скриптов из одного проекта в другой.

Некоторые преимущества ASP.NET

В ASP.NET устранены многие недостатки классических ASP. Например, в файлах ASP.NET (*.aspx) языки скриптов не используются. Вместо этого мы можем применять обычные полнофункциональные языки программирования, такие как С#, JScript.NET или Visual Basic.NET. В результате любые богатейшие возможности объектно-ориентированного программирования можно применять непосредственно в web-приложениях. На страницах ASP.NET можно использовать как типы из библиотеки базовых классов .NET, так и типы из пользовательских сборок.

Кроме того, в приложениях ASP.NET количество кода, которое приходится писать вручную, резко сокращается. Например, при помощи серверных объектов WebControls мы можем автоматически генерировать код элементов управления HTML, который будет передаваться браузеру пользователя. Другие объекты WebControls могут быть использованы для реализации проверки вводимых пользователем данных (в результате нам не нужно будет создавать браузерные клиентские скрипты вручную).

Кроме этого, применение ASP.NET предоставляет в распоряжение разработчика множество мелких, но очень привлекательных удобств. Например, создание приложений ASP.NET производится в стандартной среде разработки Visual Stu­dio.NET, возможности которой (в том числе в отношении удобства отладки) дале­ко превосходят то, что было реализовано в Visual InterDev.

Пространства имен ASP.NET

в библиотеке базовых классов .NET предусмотрено множество пространств имен, которые имеют отношение к созданию web-приложений. Эти пространства имен можно отнести к трем основным группам: основные элементы web-приложений (например, типы для работы с протоколом НТТР, типы системы безопасности и т. п.), элементы графического интерфейса (элементы управления WebForms) и web­-службы (о них речь пойдет немного позднее). Исчерпывающее рассмотрение каждой из этих групп потребовало бы нескольких отдельных книг, однако с главными типа­ми этих пространств имен мы познакомимся и поработаем на примерах. Наиболее важные пространства имен, типы из которых используются для создания приложений ASP.NET, представлены в табл. 2.

Таблица 2. Пространства имен ASP.NET

Пространство имен Описание

System.Web в этом пространстве имен определены наиболее важные типы для организации взаимодействия между браузером и web-сервером (запрос и ответ, работа с cookie, передача файлов и т.п.)

System.Web.Caching В этом пространстве имен представлены типы для поддержки кэширования при работе web-приложений

System.Web.Configuration Типы этого пространства имен позволяют настроить web-приложение в соответствии с файлами конфигурации проекта

System.Web.Security Реализация системы безопасности web-приложений

System.Web.Services В этих пространствах имен представлены типы для

System.Web.Services.Description построения web-служб

System.Web.Services.Discovery

System.Web.Services.Protocols

System.Web.UI Типы этих пространств имен нужны для построения System.Web.UI.WebControls графического интерфейса пользователя web-приложений

System.Web.HtmlControls

Наиболее важные типы пространства имен System.Web

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

HttpResponse Объекты этого класса используются для создания ответа НТТP, передаваемого web-сервером клиенту (например, страниц HTML)

Таблица 3. Наиболее важные типы пространства имен System.Web

Тип Описание

HttpAppication Этот класс определяет члены, которые являются общими для всех приложений ASP.NET. Класс, производный от HttpAppication, определен в файле global.asax

HttpAppicationState Этот класс позволяет определять общую информацию приложения ASP.NEТ для множества запросов, сеансов и каналов передачи данных

HttpBrowserCapabilities Этот класс позволяет собирать информацию о возможностях браузера, при помощи которого клиент обращается к web-серверу

HttpCookie Обеспечивает безопасный способ для работы с множеством объектов НПР cookie

HttpRequest Объекты этого класса обеспечивают прием информации, передаваемой клиентом

HttpResponse Объекты этого класса используются для создания ответа НТТP, передаваемого web-сервером клиенту (например, страниц HTML)

Приложение и сеанс подключения пользователя

Web-приложение - это набор взаимосвязанных файлов, которые расположены в виртуальном каталоге. В ASP.NET предусмотрен тип HttpApplication, который представляет методы, свойства и события, общие для всех web-приложений. В файле global.asax определен тип Global, который является производным от HttpApplication.

С классом HttpApplication тесно связан класс HttpApplicationState. Этот класс позволяет предоставлять общую информацию приложения в совместное использование множеству сеансов подключения. Сеанс подключения (session) можно рассматривать как взаимодействие одного пользователя в данный конкретный момент с web-приложением. Например, если с нашим приложением Cars в дан­ный конкретный момент работает 20 000 пользователей, то это значит, что к нему открыто 20 000 сеансов.

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

В классических ASP понятия приложения и сеанса представлены двумя отдельными типами (Application и Session). В ASP.NET они представлены вложенными типами HttpApplicationState и HttpSessionState, доступ к которым производится через свойства Application и Session типов, производных от Page.

Создание простого, web-приложения на С#

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

Первое, что нужно сделать, - создать новый проект С#, выбрав для него шаблон WebApplication. Мы назовем этот проект FirstWebApplication.

После того как создание проекта будет завершено, перед нами откроется шаблон времени разработки. Этот шаблон действует, как обычный шаблон Windows Forms, представляя графический интерфейс создаваемого нами файла *.aspx. Главное отличие заключается в том, что мы используем элементы управления не Windows Forms, а Web Form Controls, основанные на коде HTML. Обратите также внимание, что по умолчанию этой странице присвоено имя WebForm1. Учитывая, что к этой странице будут обращаться «из внешнего мира», лучше переименовать ее в default.aspx.

Если же мы откроем Internet Services Manager, то сможем убедиться, что на сервере IIS появился новый виртуальный каталог FirstWebAppLication. Как можно убедиться, каждый файл, который мы добавим в наш проект, будет по­мещен в этот виртуальный каталог. Физически этому виртуальному каталогу будет соответствовать каталог FirstWebAppLication в подкаталоге <имя-диска>:\Inetpub\wwwгооt.

Исходный файл * .aspx

Если мы откроем автоматически сгенерированный файл *.aspx, то найдем в нем минимальный набор тегов с единственной формой:

<%@ Page language="c#" Codebehind="defaul.aspx.cs"

AutoEventWireup="false" Inherits="FirstWebApplication.WebForml" %>

<НТМL>

<НЕАD>

<meta name=vs_targetSchema content="Internet explorer 5.0">

<meta name="GENERATOR" Content=Microsoft Vi sua1 Studiо 7.0">

<meta name="СООЕ LANGUAGE" Content="C#">

</НЕАD> ­

<body MS_POSITIONING-"GгidLауоut">

<form method="post" runat="server">

</form>

</body>

</HTML>

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

Кроме того, в коде предусмотрено сразу несколько моментов, относящихся ко всей странице в целом. В самом начале используется атрибут language. Его значение определяет, что для создания кода HTML, который будет возвращен браузеру клиента, будет использован С#. Атрибут Codebehind определяет имя файла С#, который будет использован для всех вычислений «за сценой» (behind означает «за», «позади»). Атрибут Inherits определяет имя класса, представляющего класс, определенный в Codebehind.

Файл web.config

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

Исходный файл Global.asax

Как и в классических ASP, в ASP.NET используется глобальный файл (global.asax), который позволяет взаимодействовать с событиями как уровня сеанса приложения, так и уровня сеанса подключения. Кроме того, этот файл делает возможным совместное использование различных общих данных. Если мы щелкнем на этом файле в окне Solution Explorer правой кнопкой мыши и в контекстном меню выберем View Code, то сможем просмотреть эту информацию, которая представлена при помощи класса Glоbаl. Этот класс является производным от базового класса HttpApplication:

public class Global : System.Web.HttpApplication

{

protected void Application_Start(Object sender. EventArgs е) {}

protected void Session Start(Object sender. EventArgs е) {}

protected void Application_BeginRequest(Object sender. EventArgs e) {}

protected void Application_EndRequest(Object sender, EventArgs е) {}

protected void Session_End(Object sender. EventArgs е) {}

protected void Application_End(Object sender, EventArgs е) {}

}

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

Простой код ASP. NET на С#

Если мы сейчас обратимся по адресу нашего web-приложения, то среда выполнения ASP.NET вернет пустую страницу. Давайте исправим эту ситуацию и изменим содержание файла default.aspx таким образом, чтобы нам возвращалась информация о произведенном запросе НТTР (свойство System.Web.UI.Page.Response нам предстоит вскоре рассмотреть более подробно):

<body MS POSIТIONING="GridLayout">

<hl><b>I am:</b></h1>

<%=this.ToString%>

<h1><b>You are:</b></h1>

<%=Request.ServerVariables[“HTTP_USER_AGENT”]%>

<form method=“post” runat=“server” ID=“Form1”>

</form>

</body>

Откомпилируем проект и запустим его на выполнение. Нам вернется страница HTML (рис. 9), с информацией о браузере, из которого был отправлен запрос, а также о сущности, которая этот запрос приняла (то есть просто имя страницы ASP.NET).

clip_image002

Рис. 9. Кто есть кто в ASP.NEТ

Все выглядит очень похоже на работу с классическими ASP. Однако есть и существенные отличия. Например, Request - это теперь свойство объекта, производного от Page. Кроме того, в тегах <% . . . %> теперь находится не код языка скриптов, а полноценный код С#

Комментариев нет:

Отправить комментарий