Серия лекций ASP (12) Отправка контента в браузер
Автор:Eve Cole
Время обновления:2009-05-30 19:59:00
При обработке сценария ASP любой текст или графика, не содержащиеся в разделителях ASP или тегах <SCRIPT>, будут просто возвращены в браузер. Содержимое можно отправить в браузер явно с помощью объекта Response.
Отправка содержимого Чтобы отправить содержимое в браузер из разделителя или процедуры ASP, вы можете использовать метод Write объекта Response. Например, следующий оператор может отправлять другое приветствие в зависимости от того, посетил ли пользователь эту страницу:
<%
Если FirstTime = True Тогда
Response.Напишите «<H3 ALIGN=CENTER>Добро пожаловать на страницу обзора</H3>»
Еще
Response.Write «<H3 ALIGN=CENTER>Добро пожаловать обратно на страницу обзора</H3>»
Конец, если
%>
Вне процедуры вам не нужно использовать Response.Write для отправки содержимого обратно пользователю. Содержимое, не находящееся внутри разделителя сценария, отправляется непосредственно в браузер, который его форматирует и отображает. Например, следующий процесс сценария имеет тот же результат, что и сценарий выше:
<H3 ВЫРАВНИВАНИЕ=ЦЕНТР>
<% Если в первый раз, то %>
Добро пожаловать на страницу обзора.
<%Еще%>
Добро пожаловать обратно на страницу обзора.
<% Конец Если %>
</H3>
Используйте смешанные команды сценария и HTML, когда вам нужно вернуть выходные данные только один раз или когда удобно добавлять инструкции к существующему тексту HTML. Используйте Response.Write, если вы не хотите разделять оператор разделителями или хотите создать строку, возвращаемую браузеру. Например, вы можете построить строку текста для создания строки таблицы, используя значения, возвращаемые из таблицы HTML:
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Установка типа контента Когда веб-сервер возвращает файл браузеру, он также сообщает браузеру тип контента, содержащегося в файле. Это позволяет браузеру решить, может ли он отображать сам файл или должен вызвать другое приложение. Например, если сетевой сервер возвращает таблицу Microsoft Excel, браузер должен вызвать копию Microsoft Excel для отображения страницы. Веб-серверы идентифицируют типы файлов, сопоставляя расширение файла с таблицей типов MIME.
Вы можете использовать свойство ContentType объекта Response, чтобы установить строку типа содержимого HTTP для содержимого, отправляемого пользователю. Например, следующая команда устанавливает тип контента для определения канала:
<% Response.ContentType = "application/x-cdf" %>
Дополнительные сведения о каналах см. в разделе «Создание динамических каналов» в этом разделе.
Другими распространенными типами содержимого являются text/plain (для возврата в виде текстового содержимого, а не в виде интерпретируемых операторов HTML), text/gif (для изображений GIF) и video/quicktime (для фильмов в формате Apple QuickTime®). Определен стандартный набор типов MIME, который поддерживается либо веб-сервером, либо веб-браузером. Чтобы узнать, какие типы контента поддерживает ваш веб-сервер Microsoft, с помощью диспетчера служб Интернета откройте страницу свойств вашего веб-сайта, щелкните вкладку «Заголовки HTTP», а затем щелкните вкладку «Типы файлов».
Перенаправление браузера. Используйте метод Redirect, чтобы перенаправить браузер на другой URL-адрес вместо отправки содержимого пользователю. Например, если вы хотите подтвердить, что пользователи вошли в ваше приложение с домашней страницы, чтобы они могли получить идентификатор клиента, вы можете проверить, есть ли у них идентификационный номер клиента, если нет, вы можете перенаправить их на домашнюю страницу;
<%
Если сеанс("CustomerID") = 0 Тогда
Response.Redirect "homepage.asp"
Конец, если
%>
Если буфер еще не открыт, вы должны перенаправить браузер, прежде чем какое-либо содержимое или заголовки будут возвращены в браузер. Размещение оператора Response.Redirect вверху страницы и перед тегом <HTML> гарантирует, что содержимое не будет возвращено в браузер. Если вы используете Response.Redirect после возврата содержимого или заголовков в браузер, вы увидите сообщение об ошибке.
Если вы используете Response.Redirect в середине страницы, используйте его со свойством Response.Buffer, как описано в следующем разделе.
Буферизованное содержимое По умолчанию веб-сервер возвращает результаты обработки HTML и сценариев при обработке страниц ASP. Однако вы можете установить свойство Buffer объекта Response для обработки всех команд серверного сценария на странице перед отправкой чего-либо пользователю.
Вы можете использовать методы буферизации, чтобы определить момент в процессе обработки страницы, в котором вы не хотите отправлять содержимое пользователю до этого момента. Вы также можете использовать метод Redirect объекта Response, чтобы перенаправить пользователя на другую страницу, или использовать метод Clear объекта Response, чтобы очистить буфер и отправить пользователю другое содержимое. В приведенном ниже примере используются оба метода.
<%
'Включите буферизацию. Этот оператор должен стоять перед тегом <HTML>.
Response.Buffer = Истина %>
<html>
<тело>
.
.
.
<%
Если Запрос("FName") = "" Тогда
Ответ.Очистить
Response.Redirect "/samples/test.html"
Еще
Response.Write Request("FName")
Конец, если
%>
</тело>
</html>
Вы также можете использовать Response.Buffer, чтобы запретить веб-серверу возвращать заголовки HTTP до того, как сценарий их изменит. Некоторые свойства и методы, такие как Response.Expires и Response.Redirect, изменяют заголовки HTTP.
Если в скрипте установлено свойство Buffer и метод Flush не вызывается, сервер будет поддерживать запросы Keep-Alive, выданные пользователем. Разработка этой привычки создания сценариев может помочь повысить производительность сервера, поскольку серверу не нужно создавать новое соединение для каждого запроса пользователя (при условии, что сервер, пользователь и любые прокси-серверы поддерживают требования Keep-Alive). Однако одним из потенциальных недостатков этого подхода является то, что буфер не отображает никакого ответа пользователю до тех пор, пока он не обработает все сценарии в текущем файле ASP. В случае более длинных и сложных сценариев пользователям придется долго ждать, прежде чем они увидят эту страницу.
По умолчанию буферизация отключена для приложений ASP. Диспетчер служб Интернета можно использовать для включения буферов для всего приложения ASP.
Позволяет прокси-серверам кэшировать страницы. Через прокси-сервер приложения могут отправлять страницы пользователям. Прокси-сервер запрашивает веб-страницы с веб-сайта от имени браузера пользователя. Прокси-серверы кэшируют HTML-страницы, чтобы повторные запросы одной и той же страницы могли быстро и эффективно возвращаться в браузер. Прокси-серверы выполняют запросы и кэшируют веб-страницы, а также снимают нагрузку на сеть и веб-серверы.
Хотя кэширование хорошо работает для страниц HTML, оно не работает для страниц ASP, содержащих динамически генерируемую информацию. Например, отчеты о состоянии фондового рынка или инвентарные списки, показывающие большие объемы бизнеса, требуют немедленной информации. Информация, полученная час назад, на данный момент очень неточна. Если приложение возвращает личную информацию, например, настроенную домашнюю страницу, ожидается, что пользователь не сможет видеть личную информацию другого пользователя.
По умолчанию сам командный прокси-сервер ASP не может кэшировать страницы ASP (хотя он кэширует изображения, растровые изображения, небольшие приложения и другие ссылки на кэшированных страницах). Вы можете использовать свойство Response.CacheControl, чтобы установить поле HTTP-заголовка Cache Control, чтобы разрешить кэширование определенной страницы. Значением по умолчанию Response.CacheControl является строка «Частный», которая не позволяет прокси-серверам кэшировать эту страницу. Чтобы разрешить кэширование, установите для поля заголовка управления кэшем значение Public:
<% Response.CacheControl = "Общедоступный" %>
Поскольку заголовки HTTP должны быть отправлены в браузер или прокси-сервер до отправки любого содержимого страницы, вы можете установить свойство Response.CacheControl или использовать Response.Buffer для кэширования страницы перед любыми HTML-тегами.
Поле заголовка Cache Control является частью спецификации HTTP 1.1. Страницы ASP нельзя кэшировать на прокси-серверах, которые поддерживают только HTTP 1.0, поскольку поля заголовка с истекшим сроком действия не отправляются.
Запретить браузерам кэшировать страницы. Каждая версия браузера имеет свои собственные спецификации кэширования страниц. Чтобы запретить браузеру кэшировать страницы ASP, используйте Response.Expires, чтобы установить заголовок срока действия:
<% Response.Expires = 0 %>
Значение 0 приводит к истечению срока действия кэшированных страниц. Поскольку заголовки HTTP должны быть отправлены в браузер перед отправкой любой страницы, страницу можно кэшировать, поместив атрибут Response.Expires перед тегом HTML или используя Response.Buffer.
Создавайте динамические каналы
В Internet Explorer 4.0 появилась новая функция, которую веб-планировщики могут использовать для объединения веб-страниц с общими темами в один канал. В браузере канал отображается в строке заголовка канала; пользователи получают доступ к каналу, щелкнув значок. Каналы обновляются автоматически в фоновом режиме; пользователям не нужно заходить на сайт, чтобы загрузить последние страницы в своем браузере. Каналы предоставляют пользователям быстрый и прямой путь для просмотра набора связанных веб-страниц, и эти веб-страницы автоматически обновляются.
Используя ASP, вы можете писать сценарии для сбора предпочтений пользователя, а затем динамически создавать каналы. Файл определения канала (.cdf) устанавливает организацию и последовательность содержимого канала. Команды в файлах .cdf используют тот же синтаксис, что и разметка HTML, что упрощает их понимание и создание из сценариев. При написании сценария ASP для создания файла определения канала сценарий использует расширение .cdx. Когда ASP читает файл с расширением .cdx, автоматически отправляется тип контента application/x-cdf, который указывает браузеру использовать определение канала для интерпретации байтов. Если вы не используете .cdx в качестве расширения, сценарий должен вручную установить тип контента application/x-cdf с помощью Response.ContentType.
Вот пример того, как использовать каналы. В следующей HTML-форме пользователю предлагается выбрать канал. При отправке форма вызывает сценарий в файле .cdx для создания определения канала.
<P> Выберите нужные каналы </P>
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=ИМЯ ФЛАЖКА=Фильмы> Фильмы
<P><INPUT TYPE=ИМЯ Флажка=Спорт> Спорт
<P><INPUT TYPE="ОТПРАВИТЬ" VALUE="ОТПРАВИТЬ">
</ФОРМ>
Скрипт в Chan.cdx создает определение канала на основе значений таблицы, представленной вместе с запросом.
<% If Request.Form("Фильмы") <> "" Тогда %>
<КАНАЛ>
заявления об определении канала для страниц фильмов
</КАНАЛ>
<% Конец Если %>
<% If Request.Form("Спорт") <> "" Тогда %>
<КАНАЛ>
заявления об определении канала для спортивных страниц
</КАНАЛ>
<% Конец Если %>
Отправка файлов на сервер Браузер может использовать приложение Posting Acceptor для отправки файлов на веб-сервер. Когда принимающий сообщения загружает файлы, он отправляет поля формы в формате URL, в которых указаны имя и местоположение каждого полученного файла. URL-адрес почтовой обработки можно добавить в сценарий, который загружает файл, чтобы вызвать сценарий ASP для обработки этих имен полей. Например, вы можете написать сценарий, который автоматически отправляет электронное письмо системному администратору с именем и местоположением файла.