Вторник, 23.04.2024, 14:47
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Сортировка вхождений
00:54
Сортировка вхождений
Сортировка вхождений
Последнее созданное вхождение не выводится в самом верху страницы. Однако
при традиционном способе работы web-регистраторов первым должно выводиться
вхождение, введенное самым последним.
Поэтому требуется сортировать вхождения по дате при считывания их из ди-
ректории. .NET возвращает файлы в алфавитном порядке, и именно поэтому мы
используем уже созданный формат. Рассмотрим следующие три файловых имени:
20010718_1318.xml
20010719_1003.xml
20010720_1823.xml
В данном случае используется формат yyyymmdd_hhmm. Его недостаток заклю-
чается в том, что файлы, предназначенные для работы с сайтом, могут создаваться
не чаще одного в минуту. В данном случае это не представляет серьезной пробле-
мы, поскольку мы обычно должны создавать не более одного файла в день. Файлы
с именами в таком формате при сортировке по алфавиту автоматически располага-
ются от самого раннего к самому позднему. Все, что необходимо сделать,— это
изменить порядок файлов на обратный относительно того, в котором они хранятся
на диске.
Практикум: сортировка вхождений
1 • Создайте как минимум два вхождения, воспользовавшись
web-инструментом. Уничтожьте существующие XML-файлы,
поскольку их имена не отвечают только что обсуждавшемуся
формату. Автор создал у себя на компьютере три файла
(см. рис. на стр. 719, вверхний).
Приложения ASP.NET 719
File Е -М Help
vwroot\Weblog\Enfcrtes
10m717J
)0107I8J419.xmI
ilb7i9J541.nn!i
|3 objects)
Файлы выводятся в алфавитном порядке, т. е.
в порядке, прямо противоположном требуемому.
2. Откройте редактор кода
для файла Global.asax. Найдите
метод LoadAiiEntries и внесите в него
следующие два изменения:
// LoadAiiEntries - осуществляет
// загрузку всех вхождений с диска...
public static Entry[] LoadAiiEntries()
// определение пути, по которому располагаются вхождения...
Directorylnfo entryFolder = new Directorylnfo(EntryFilePath);
/ / получение списка файлов...
Filelnfo[] files = entryFolder.GetFiles();
// создание массива вхождений. . .
Entry[] entries = new Entry[files.Length];
// просмотр в цикле всех файлов и их загрузка,
int index = files .Length - 1;
foreach(Filelnfo file in files)
entries[index] = LoadEntry(file.Name);
: • : index--; ••• ••: •. ••.• : v • • • . • • •• • •• • • • • ./ / • • • ••. .•.••• •••/, • ••• • •. •
// возврат списка...
return entries;
Search ^Folders
:
Ed:
: ^ J 21 $ .
"\ -"
D i s r a e l i ' s W e b l o g
Thursday, 19 July 2001 - Ihh entry made latest.
Wednesday, uly 2001 • Today was such an exdt?r»
Tuesday, l? July 2001 - Anyone f^ncy -a cup of coffee?
Откомпилируйте и запустите проект. Файлы
будут выводиться в правильном порядке, как это
проиллюстрировано на рисунке слева.
Как это работает
Вся хитрость заключается в том, что массив
заполняется в порядке, обратном тому, в кото-
ром файлы хранятся на диске. При создании
массива известно, какого он должен быть разме-
ра, поскольку предполагается, что он должен
в точности соответствовать размерам массива
Объектов Filelnfo, ВОЗВращаеМОГО МеТОДОМ Get-
F i l e s ().
// LoadAiiEntries - осуществляет загрузку всех вхождений с диска...
public static Entry[] LoadAiiEntries()
// определение пути, по которому располагаются вхождения...
Directorylnfo entryFolder = new Directorylnfo(EntryFilePath);
// получение списка файлов...
Filelnfo[] files = entryFolder.GetFiles();
// создание массива вхождений...
Entry[] entries = new Entry[files.Length];
720 Глава 24
При прохождении в цикле по объектам Fileinfo мы обращаемся к методу
Global.LoadEntry с целью создания нового объекта Entry для каждого объекта
Fileinfo. Мы сохраняем этот объект в массиве на позиции, определяемой пере-
менной index, которая изначально соответствует последнему элементу массива
и уменьшается на каждой итерации на единицу до тех пор, пока не будет просмот-
рен весь массив files:
// просмотр в цикле всех файлов и их загрузка. . .
int index = files.Length - 1;
foreach(Fileinfo file in files)
entries[index] = LoadEntry(file.Name);
index—;
// возврат списка...
return entries;
}
Использование сеансов и куки
Нами создан web-сайт, на который может зайти любой пользователь и создать
новые вхождения web-регистратора или отредактировать уже существующие. Это
представляется не слишком разумным — в идеале только владелец сайта должен
иметь возможность вносить в него изменения.
Поэтому теперь необходимо предусмотреть способ, посредством которого вла-
делец сайта мог бы себя аутентифицировать. Сделав это, мы сможем при попытке
пользователя внести в сайт изменения, осуществлять проверку его личности
и в соответствии с этим разрешать или не разрешать делать изменения.
Сеансовые режимы позволяют web-серверу соотнестим набор данных с конк-
ретным web-браузером. При таком сценарии браузер как бы "помечается" при
своем первом обращении к данному сайту. Такая пометка является уникальной
и при последующих обращениях используется в качестве ключа, "отпирающего"
данные, относящиеся к сайту.
В качестве такой пометки браузера web-сервер использует куки. (Куки — это
маленькое информационное сообщение, которое web-сервер посылает клиентской
машине и которое считывается каждый раз при последующих посещениях сайта.)
При первом обращении к странице сайта соответствующих куки еще не существу-
ет, поэтому web-сервер создает новый сеанс пользователя и переносит ID этого
сеанса в куки перед тем, как отправить его браузеру. В программе ASP.NET уста-
навливаются значения различных свойств, дополняющих информацию о сеансе.
В сеансе можно хранить большое количество произвольной информации, но,
поскольку на это расходуется память сервера, следует стремиться к тому, чтобы
хранилось как можно меньше информации. Например, стоит ли хранить в сеансе
развернутую информацию о пользователе, если можно ограничиться только отно-
сительно небольшой ID пользователя, а за более подробной информацией обра-
щаться только тогда, когда в ней действительно возникает необходимость?
Ограничение доступа к web-сайту
В данном примере мы собираемся хранить в сеансе логическое значение, кото-
рое будет означать, разрешено или не разрешено данному пользователю редакти-
ровать информацию на сайте.
Приложения ASP.NET 721
Практикум: запрет редактирования
1 . Откройте редактор КОДа ДЛЯ файла Global, asax.
Найдите метод session_start() и добавьте в него следующий код:
protected void Session_Start (Object sender, EventArgs e)
// конфигурирование сеанса...
Session["canedit"] = false;
}
2. Откройте редактор кода для файла Edit.aspx.
Найдите метод Page_Load() и добавьте в него следующий код:
private void Page_Load(object sender, System.EventArgs e)
. _..;.. _ ..^ {
// разрешено ли нам выполнять редактирование...
if{(bool)Session["canedit"] == false)
Response.Redirect("CannotEdit.aspx*);
3. Воспользуйтесь Solution Explorer — щелкните правой кнопкой мыши
на проекте Weblog и выберите пункт меню Add | Add Web Form.
Создайте новую форму CannotEdit. Откройте редактор HTML
для новой страницы и добавьте следующий код:
<%@ Раде 1апдиаде=ис#." Codebehind=" Cannot Edit.aspx. с s" AutoEventWireup=" false"
Inherits="WebLog. CannotEdit11 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content=="C#">
<meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
<meta name="vs_targetSchemalt
content=nhttp://schemas.microsoft.com/intellisense/ie511>
</head>
<body MS_POSITIONING="GridLayout">
<form id="CannotEdit" method="post" runat="server">
Sorry, you're not allowed to make changes to the site.
/Простите, вы не можете вносить изменения в этот сайт./
<br>
<br>
<а href="default.aspx">Continue...</а>
</form>
</body>
</html>
Откомпилируйте и запустите проект.
Вы должны сразу заметить, что ссылки
Edit и Create new entry приводят на стра-
ницу с сообщением об ошибке, а не на
ту страницу, к которой мы имели доступ
ранее (см. рис. справа).
Как это работает
Вся хитрость здесь заключается в том,
что все это выполняет нечто, называемое
сеансом. Сеанс — это средство ASP.NET,
которое позволяет проводить идентифи-
кацию пользователя. Когда пользователь
l^http://localhost/WebLog/Cannotf
File Edit View Favorite? Tools Help
.4* Back - Search | links
tp:tflocahc anncAEdit.aspx
Sorry, you're not allowed to make changes to the site.
Continue,.,
~~~~ "*"( ГТ Local intranet
722 Глава 24
запрашивает с сайта ASP или ASP.NET страницу в первый раз, то для данного
пользователя создается сеанс, являющийся уникальным,— ни у кого другого не
может быть точно такого же сеанса.
При создании нового сеанса, т. е. когда новый пользователь запрашивает первую
Страницу Сайта, Вызывается Метод Session_Start(). И System.Web.HttpApplication,
И System.Web.UI.Page поддерживают СВОЙСТВО Session. Это СВОЙСТВО Представляет
собой базовое семейство для хранения значений. В данном случае было создано
значение с именем canedit, для которого было сохранено значение false:
protected void Session_Start(Object sender, EventArgs e)
{
// конфигурирование сеанса...
Session[*canedit*] = false;
}
Такие значения называются переменными сеанса.
Мы обладаем доступом к этому значению из любой страницы сайта. При осу-
ществлении доступа к переменным сеанса мы имеем гарантию того, что значения,
которые мы получаем, уникальны для данного пользователя. Другими словами,
если сто пользователей одновременно работают с сайтом, то у каждого из них
имеется свой собственный уникальный сеанс. При создании сеанса переменной
canedit в качестве начального значения присваивается false. Но если изменить
значение этой переменной на true только для одного из этих пользователей, то это
будет означать, что изменение коснется только того пользователя, для которого
оно сделано. Мы хотим изменить значение переменной canedit на true только для
того пользователя, который сможет подтвердить пароль.
При загрузке страницы Edit.aspx.cs производится проверка значения этой
переменной, и если оно равно false, то пользователь перенаправляется на дру-
гую страницу.
private void Page_Load(object sender, System.EventArgs e)
{
// разрешено ли нам выполнять редактирование...
if((bool)Session["canedit"] == false)
Response.Redirect{"CannotEdit.aspx*);
Аутентификация пользователя
В данном упражнении мы собираемся создать очень простую программу аутен-
тификации. Ее действия, в основном будут заключаться в том, чтобы запросить
у пользователя пароль и, при его совпадении с имеющимся у нас именем, при-
своить переменной canedit значение true. В результате у данного конкретного
пользователя появится возможность редактировать страницы.
Практикум: аутентификация пользователя
1. Войдите в Solution Explorer, щелкните правой кнопкой мыши
на проекте Weblog и выберите пункт меню Add | Add Web Form.
Назовите файл Login.aspx.
2. Войдите в Designer для данной формы, Щелкните мышью
на основании страницы и с помощью окна Properties
Замените pageLayout на FlowLayout.
3. Мы не станем утруждать себя красивым оформлением
этой страницы, поскольку она является инструментом
администрирования и, кроме того, вы наверняка получили
Приложения ASP.NET 723
общее представление о том, каким образом можно сделать страницу
более привлекательной. Вместо этого перенесите на страницу
НОВЫе управляющие элементы — Textbox И Button.
4. Выберите управляющий элемент Textbox и измените значение
его свойства ID на textPassword. Измените значение
его СВОЙСТВа TextMode на Password.
5. Выберите управляющий элемент Button и измените значение
его СВОЙСТВа Text на Login.
6. Щелкните два раза мышью на основании страницы, для того
чтобы открыть метод Page_Load (). Добавьте в него следующий код:
private void Page_Load(object sender, System.EventArgs e)
// отправляем обратно?
if(IsPostBack == true)
// правильно ли введен пароль?
if(textPassword.Text.CompareTo("stringy") == 0)
// обновление сеанса...
Session["canedit"] = true;
/ / перенаправление...
Response.Redirect("default.aspx");
j File Edk View Favorites Tools Help
Ф*6аск - => - Ш Ш i Search
| Address *Щ http://iopihost/WebLog/iogin.aspx jH
I . . . " I
iDone I ! ^Ш-
Запустите проект. Щелкните мышью
на ссылке Edit — вы, безусловно, должны
быть возвращены на начальную страницу.
Замените Default.aspx на Login.aspx
в линейке Address и щелкните на кнопке
Go (см. рис. слева).
В соответствующее поле введите в ка-
честве пароля текст stringy (обязательно
соблюдайте регистр). Щелкните на кноп-
ке Login — в результете вы сразу будете
перенесены на страницу Default.aspx.
Теперь, если щелкнуть на ссылке Edit,
то можно вносить изменения.
Как это работает
Каждый раз при загрузке страницы Edit.aspx программа осуществляет провер-
ку — имеет или нет сеансовая переменная canedit значение true. Если нет, то мы
будем перенаправлены на страницу с сообщением об ошибке.
Когда на странице Loadxmio нажимается кнопка Login, то происходит вызов
метода Page_Load(). В этот момент производится проверка, посылалась ли страни-
ца обратно, а затем проверяется значение свойства Text управляющего элемента
textPassword на совпадение введенного пароля со строкой stringy:
private void Page_Load(object sender, System.EventArgs e)
// отправляем обратно?
if(IsPostBack == true)
// правильно ли введен пароль?
if(textPassword.Text.CompareTo("stringy") == 0)
724 Глава 24
Если пароль совпадает, то мы изменяем значение сеансовой переменной canedit
на true и вновь отправляем пользователя на первоначальную страницу.
// обновление сеанса...
Session[•canedit*] = true;
// перенаправление...
Response.Redirect('default.aspx*);
Теперь, когда бы мы ни нажали на соответствующую ссылку и ни открыли
страницу Edit.aspx, проверка покажет, что переменная canedit имеет значение
true, и, следовательно, страница будет выводиться обычным образом. В этом слу-
чае можно вносить все необходимые изменения.
Итоги
В этой главе мы познакомились с Active Server Pages .NET или ASP.NET. Это
технология следующего поколения от компании Microsoft, которая таким образом
развивает успех своей предшествующей технологии — ASP, появившейся в 1996 г.
Сначала мы рассмотрели вопрос о том, как в ASP.NET работает модель управ-
ляющий элемент/событие и узнали, что эта парадигма очень похожа на ту, что
используется в Windows Forms. На самом деле ASP.NET оказывается очень про-
стым для освоения новичками. Напротив, опытные web-разработчики столкнутся
с трудностями, поскольку для них парадигма окажется совершенно новой.
Для того чтобы проиллюстрировать некоторые из приемов, используемых при
создании приложений ASP.NET, нами был создан web-сайт, на котором можно
просматривать вхождения, имеющиеся в web-регистраторе. Эти вхождения хра-
нятся в виде XML-файлов и могут считываться и записываться с помощью класса
xmiseriaiizer — чрезвычайно полезного класса .NET Framework. Нами были так-
же созданы статические методы в классе Global, доступные всем страницам сайта
и позволяющие извлекать отдельные объекты Entry или массив всех объектов
Entry, расположенных на диске. Мы воспользовались управляющим элементом
DataList, а также другими управляющими элементами, встроенными в ASP.NET,
ДЛЯ ВЫВОДа Перечня Объектов Entry.
Наконец, мы рассмотрели вопрос о том, каким образом можно создать форму,
которая позволяла бы пользователю создавать и редактировать новые объекты
Entry непосредственно на самом сайте. Мы также познакомились с семейством
session и получили некоторую информацию о состоянии сеанса.
Упражнения
1. Какой основной принцип лежит в основе ASP.NET?
2. Какое количество файлов в Visual Studio.NET привязывается
к .aspx-файлу?
3. Какие действия позволяет выполнять управляющий элемент DataList?
4. Что такое таблица стилей?
5. Какие особенности отличают формат, который использовался
при создании имен XML-файлов?

Категория: информатика | Просмотров: 1372 | Добавил: basic | Рейтинг: 5.0/1
Всего комментариев: 4
4 enastertelumnk  
0
windows 7 product key hack upgrade key windows 7
free product key for windows 7

3 enastertelumnk  
0
windows 7 ultimate activation product key genuine product key for windows 7 ultimate
windows 7 rc product key

2 Qmminnohem  
0
Шанс реального преумножения средств и ответ на вопрос - выгодно вложить деньги в золото. Наша работа - Ваши доходы, мы работаем для Вас! Зарабатывай по полной - думай о завтрашнем дне! Нет проигравших - денег хватит всем, тысячи людей в этом уже убедились!

МММ-2012 - [url=http://newmmm2012.com]Сайт ммм.
[/url]

1 Gaztraiteve  
0
Продажей приборов контроля веществ занимается наша организация. У нас всегда можно купить переносные и портативные газоанализаторы, программируемые кондуктометры, измерители концентрации озона, вискозиметры и хроматографы. Любое из представленного оборудования Вы можете заказать у нас посредством формы отправки сообщения на сайте. Доставка товаров производится по всей России. Заходите на сайт, выбирайте и заказывайте!

Gazoanalisator: [url=http://gazoanalisator.ru]вискозиметры
[/url]

Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz