Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Листинг 6.8. Файл chapter6/FrameLoad/TextOut. java




Листинг 6.7. Файл chapter6/FrameLoad/main. html

<HTML>

<BODY BGCOLOR="#FFFFFF">

<SCRIPT LANGUAGE="JavaScript">

<!--

var szFont = parent.toc.szFont;

document.write("<APPLET CODE=TextOut.class ID=TextOut

WIDTH=300 HEIGHT=140 >");

document.write("<param name=Strl value="' + szFont + '">");

document.write("<param name=Fontl value="' + szFont + '">");

document.write("<param name=Typel value='Plain'>");

document.write("</APPLET>");

//-->

</SCRIPT>

</BODY>

</HTML>

 

Тіло документа main.html містить тільки сценарій JavaScripi. Цей сценарій динамічно створює рядки оператора <APPLET> із параметрами Str1, Font1 і Type1.

Параметр Str1 задає текст, відображуваний у вікні аплета. Сценарій використовує для цього параметра назва шрифту, обраного користувачем у лівому фрейме:

 

var szFont = рагеnt. toc. sz. Font;

 

Параметр Font1 задасть шрифт для тексту, відображуваного у вікні аплета. Цей параметр також задатися з використанням назви шрифту, обраного в лівому фрейме:

 

document. write("<рarаm nаmе = Font1 value="' + szFont + '">");

 

І нарешті, третій параметр з ім'ям Type1 задає тип шрифту - звичайний, масний або похилий. У нашому випадку завжди використовується звичайний шрифт.

Вихідний текст аплета Java, використаного в прикладі, приведений у листинге 6.8. Це спрощений варіант аплета, описаного в третій частині курсу "Програмування в Internet. Частина 3. Основи мови мови Java" у поділі "Додаток textOut" гл. 3.

 

//------------------------------------------------

// Установка різноманітних шрифтів.

// Демонстрація засобів передачі параметрів в аплет

//

// (С) Фролов А.У, 1997, 1998

//

//. E-mail: [email protected]

// WWW: http: //www.glasnet.ru/~frolov

// або

// http://www.dials.ccds.ru/froiov

import java.applet.*;

import java.awt.*;

public class TextOut extends Applet

{

//------------------------------------------------

// Поля класу.

// Створюються автоматично для всіх параметрів аплета

// ----------------------------------------------------

private String m_Strl = "Hello 1";

private String m_Font1 = "Arial";

private String m_Type1 = "Bold";

//---------------------------------------------------

// Імена параметрів

private final String РАRАM_Str1 = "Str1";

private final String PАRАM_Font1 = "Font1";

private final String PARAM_Type1 = "Type1";

//----------------------------------------------------

// getAppletInfo

// Метод, що повертає рядок інформації про аплете

//----------------------------------------------------

public String getAppletInfo()

{

return "Name: TextOut\r\n" +

"Author: Alexandr Frolov\r\n" +

"E-mail: [email protected]" +

"WWW: http://www.glasnet.ru/~frolov" +

"Created with Microsoft Visual J++ Version 1.0";

}

//-----------------------------------------------------

// getParameterInfo

// Метод, що повертає опис параметрів

//-----------------------------------------------------

public String[][] getParameterInfo()

{

String[][] info =

{

{ PARAM_Str1, "String", "Text string to write" },

{ PARAM_Font1, "String", "Text font" },

{ PARAM_Type1, "String", "Font type" }, };

return info;

}

//------------------------------------------------------

// init

// Визивається під час ініціалізації аплета

//------------------------------------------------------

public void init() {

// Робоча перемінна для одержання параметрів

String param;

// Одержання параметрів і зберігання

// їхніх значень у полях класу

// Рядки, що будуть виведені у вікно аплета

param = getParameter(PARAM__Str1);

if (param!= null) m_Str1 = param;

// Шрифти для відображення рядків

param = getParameter(PARAM_Font1);

if (param!= null) m_Font1 = param;

// Начертание шрифтів

param = getParameter(PARAM_Type1);

if(param!= null)

m_Type1 = param;

}

//-------------------------------------------------------

// paint

// Метод paint, що виконує малювання у вікні

// -------------------------------------------------------

public void paint(Graphics g)

{

// Початкова координата для висновка по вертикалі

int yStart = 20;

// Поточна координата для висновка рядка

int yCurrent = 20;

// Визначаємо поточні розміри вікна аплета

Dimension dimAppWndDimension = size();

// Вибираємо в контекст відображення жовтий цвіт

g.setColor(Color.yellow);

// Зафарбовуємо внутрішню область вікна аплета

g.fillRect(0, 0,

dimAppWndDimension.width - 1,

dimAppWndDimension.height - 1);

// Вибираємо в контекст відображення чорний цвіт

g.setColor(Color.black);

// Малюємо рамку навколо вікна аплета

g.drawRect (0, 0,

dimAppWndDimension.width - 1,

dimAppWndDimension.height - 1);

// Одержуємо стиль шрифту і выбираем шрифт

// відповідно до цього стилю if(m_Type1.equals("Bold"))

g.setFont (new Font (m_Font1, Font.BOLD, 25));

else if(m_Type1.equals("Italic"))

g.setFont(new Font(m_Font1, Font.ITALIC, 25));

else if(m_Type1.equals("Plain"))

g.setFont(new Font(m_Font1, Font.PLAIN, 25));

// Відступ для першого рядка

yCurrent += yStart;

// Малюємо перший рядок

g.drawString(m_Str1, 10, yCurrent);

}

}

7. ЗАСТОСУВАННЯ COOKIE

Сookie являє собою властивість документа HTML. Дані cookie фізично зберігаються локально на комп'ютері користувача, що завантажив до себе цей документ, у виді спеціального системного файла. За допомогою cookie користувач може настроїти, або "приготувати" по власному смаку, документ HIML, якщо для нього передбачене таке настроювання.

Простіше усього уявити собі cookie як набір строковых параметрів, кожний із який має ім'я і значення. Сценарій JavaScript може створити cookie для документа HTML, визначаючи в ньому довільна кількість параметрів і задаючи для них довільні значення. Після створення такий набір параметрів стає приналежністю даного конкретного документа HTML і може бути проаналізований, змінений або віддалений сценарієм JavaScript.

Як уже говорилося, основне, для чого потрібно cookie, - це дати користувачу можливість настроїти під свої потреби інтерфейс активних документів HTML. Ці настроювання можуть аналізуватися або не аналізуватися сервером Web, але в будь-якому випадку вони зберігаються в користувача. Настроювання, зрозуміло, пропадуть, якщо користувач, скажемо, отформатирует свій жорсткий диск. Після цього параметри що настроюється документа HTML прийдеться задавати наново.

Звичайно, задачу індивідуального настроювання параметрів сторінок можна було б вирішити й іншими засобами, наприклад, за допомогою розширень серверу Web, таких, як програми CGI або додатки ISAPI. Для цього на сервері Web повинна бути встановлена база даних, що береже настроювання для всіх зареєстрованих у ній користувачів.

У цьому випадку розширення серверу Web може динамічно створювати настраиваемые документи HTML, використовуючи для визначення зовнішнього вигляду сторінок параметри, що зберігаються в базі даних.

Наявність бази даних настроювання користувачів ускладнює супровід серверу Web, і тому неприйнятно в багатьох випадках. Наприклад, якщо сервер Web виртуальный і розташований на дисках серверу якогось провайдера Internet, створення бази даних може перетворитися труднопреодолимую проблему.

Покладання на користувальний браузер задачі збереження настроювань окремих документів HTML сильно спрощує задачу організації настроювання діалогового інтерфейсу. А для цього саме потрібні cookie і сценарії JavaScript.

Ще одне практичне застосування cookie - збереження товару, обране відвідувачем серверу Web, що виконує роль виртуального магазина. Покупець може вибирати різний товар на різних сторінках серверу, при цьому повне замовлення може спочатку бути сформований і збережений у cookie, а потім по явному запиті користувача відправлений на сервер.

Серед інших застосувань cookie можна відзначити мережні ігри. Можна, наприклад, берегти в cookie поточний стан гри або інші параметри.

7.1. Виконання основних операцій із cookie

Основні операції з cookie - створення cookie, одержання і зміна значень параметрів cookies, а також видалення cookie.

7.1.1. Створення cookie

Існує два засоби створення cookie, перший із який використовується розширеннями серверу Web, а другий - сценаріями JavaScript.

Перший засіб: створення cookie розширенням серверу Web

Для того щоб створити cookie першим засобом, розширення серверу Web звичайно добавляє в заголовок HTTP динамічно утворюваного документа HTML поле з ім'ям Set-Cookie. У цьому полі визначаються імена і значення параметрів cookie.

Коли розширення серверу Web визивається з документа HTML, що має cookie, параметри cookie передаються цьому розширенню через поле Cookie заголовка HTTP і можуть бути проаналізовані.

Заголовок HTTP, призначений для створення cookie, виглядає в такий спосіб:

 

Set-Cookie: Ім'я=3начение; ехрirеs=Дата_GMT;

path=Anpec_URL; dоmain=Домен; secure

 

Опис окремих полів заголовка Set-Cookie приведено нижче:

Поле Описание

Ім'я Довільне ім'я параметра, визначеного в cookie. Тут ви можете використовувати будь-який рядок, аби в ній не було прогалин, ком і двоеточий. У тому випадку, коли ім'я повинно містити перераховані вище символи, використовуйте кодировку URL

Значення Текстовий рядок значень параметрів. У цьому рядку не повинно бути прогалин, ком і двоеточий, тому ви повинні використовувати для неї кодировку URL

Expires Дата автоматичного видалення cookie за Гринвічем. Якщо ця дата не зазначена, а параметр expires відсутніх, cookie буде віддалено відразу після того, як браузер закінчить сеанс зв'язку із сервером Web

Domain Доменна частина адреси URL, для якого діє дане cookie. якщо цей параметр не зазначений, те по умовчанню використовується доменна адреса URL документа HTML, де було встановлено cookie

Path Частина адреси URL, що задає шлях до документа HTML, для якого діє дане cookie. Якщо цей параметр не зазначений, те по умовчанню використовується адреса URL документа HTML, де було встановлено cookie

Secure Якщо зазначене це поле, дані cookie необхідно передавати тільки з використанням захищеного протоколу SSL. Такий протокол використовується серверами HTTPS

Всі поля, крім перших двох (Ім'я і Значення), необов'язкові. Дата повинна бути записана у форматі День_тижні, ДД-Мес-ГГ ЧЧ:ММ:СС GMT, де:

· День_тижні - англійське трехбуквенное скорочення назви дня тижня наприклад, Моn);

· ДД - номер дня тижня;

· Мес - англійське трехбуквенное скорочення назви місяця (наприклад, Jun);

· ГГ - дві останні цифри року;

· ЧЧ - часи;

· MM - хвилини;

· СС - секунди.

Наприклад, дата може бути зазначена так:

 

Mon 07-Jun-93 14:45:00 GMT

 

Робимо невеличке зауваження щодо поляж domain і path, що визначають умову, при якому виконується установка cookie. Коли браузер завантажує документ HTML із серверу Web і серед заголовків HTTP цього документа є присутнім заголовок Set-Cookie, він перевіряє можливість установки cookie. У процесі перевірки аналізується адреса URL, відкіля був завантажений цей документ, а також уміст поляж domain і path.

Якщо ці поля не зазначені, те по умовчанню рахується, що вони відповідають адресі URL, по якому знаходиться завантажений документ НТML У цьому випадку виконується установка cookie.

У тому випадку, коли зазначене поле domain, установка cookie виконується тільки тоді, коли документ був завантажений із серверу Web, що належить даному домену.

За допомогою параметра path можна встановити обмеження на адреси URL у рамках домена, для яких виконується установка cookie. Значення "/" відповідає всім адресам даного домена.

Одночасно сервер Web може створити декілька параметрів cookie, включивши в заголовок документа HTML декілька заголовків Set-Cookie.

Другий засіб: створення cookie у сценарії JavaScript

Другий засіб припускає використання властивості document.cookie. Ця властивість згадана при розповіді про властивості і методи об'єкта document, утворюваного для документа HTML, завантаженого у вікно браузера.

У загальному виді сценарій JavaScript може створити cookie у такий спосіб:

 

document. cookie = "Ім'я=Значення";

 

Тут просто записується у властивість cookie об'єкта document текстовий рядок, що визначає cookie.

Для перерахунку поточної дати у формат GMT у сценаріях JavaScript можна використовувати умонтовані функції, про що буде розказано.

Як приклад можна призвести вихідний текст функції addCookie, що буде використовуватися у своїх сценаріях для створення cookie:

 

function addCookie(szName, szValue, dtDaysExpires)

{

var dtExpires = new Date();

var dtExpiryDate = "";

dtExpires. setTime(dtExpires. getTime() + dtDaysExpires * 24 * 60 * 60 * 1000);

dtExpiryDate = dtExpires. toGKTString();

}

 

Функція addCookic одержує три параметри.

Через параметр szName передається ім'я параметра, що зберігається в сookie. Параметр szValue визначає значення цього параметра cookie. Що ж стосується останнього параметра з ім'ям dtDaysExpires, те він задає інтервал часу стосовно моменту створення cookie, коли це cookie необхідно видалити.

Саме складне у функції addCookie - це визначення дати видалення cookie і перетворення цієї дати у формат GMT. Дана задача вирішується в такий спосіб.

Насамперед функція addCookie створює об'єкт класу Date за допомогою ключового слова new:

 

var dtExpires = new Date();

 

Записана в такий спосіб у перемінну dtExpires дата відповідає моменту виклику функції addCookie.

Далі за допомогою методу getTime функція addCookie визначає поточну дату в миллисекундах і додає до результату значення параметра dtDaysExpires, отримане функцією, помножене на константу (24 * 60 * 60 * 1000):

 

dtExpires. getTime () + dtDaysExpires * 24 * 60 * 60 * 1000

 

Константа являє собою кількість часів у добі, помножена на кількість промайнуть у часі, потім на кількість секунд у хвилині і, нарешті, на кількість миллисекунд у секунді.

Результат обчислень записується за допомогою методу setTime у перемінну dtExpires. Тепер тут зберігається дата автоматичного знищення cookie браузером. Залишилося лише перетворити цю дату у формат GMT. Таке перетворення неважко зробити за допомогою спеціально призначеного для цього методу toGMTString, що повертає текстовий рядок у потрібному нам форматі:

 

dtExpiryDate = dtExpires. toGMTString();

 

Тепер залишається тільки сформувати текстовий рядок визначення cookie і записати її у властивість document. cookie:

 

document. cookie = szName + "=" + szValue + "; expires=" + dtExpiryDate;

 

На цьому створення cookie завершено.

Тепер, коли є функція addCookie, створення cookie являє собою дуже просту задачу. Наприклад, у такому рядку буде створена cookie з ім'ям Count, значенням 0, причому через 10 днів браузер автоматично видалить це cookie:

 

addCookie("Count","0",10);

 

При необхідності використання інших параметрів cookie, таких, як path або domain, можна трохи доповнити текст функції addCookie.

7.1.2. Одержання значення cookie

Вирішимо таку задачу - визначення значення параметрів cookie.

Ця задача зводиться до простого сканування текстового рядка, отриманої в такий спосіб:

 

var szCookieString = document. cookie;

 

У цьому рядку потрібно знайти подстроку "Ім'я==3начение;", а потім витягти отримане значення.

Для полегшення цієї роботи можна скористатися функцією findCookie. Вихідний текст цієї функції приведений нижче:

 

function findCookie(szName)

{

var i = 0;

var nStartPosition = 0;

var nEndPosition = 0;

var szCookieString = document.cookie;

while(i <= szCookieString.length)

{

nStartPosition = i;

nEndPosition = nStartPosition + szName.length;

if(szCookieString.substring(

nStartPosition, nEndPosition) == szName)

{

nStartPosition = nEndPosition + 1;

nEndPosition = document.cookie.indexOf(";",nStartPosition);

if(nEndPosition < nStartPosition)

nEndPosition = document.cookie.length;

return document.cookie.substring(nStartPosition, nEndPosition);

break;

}

i++;

}

return "";

}

 

Після витягу рядка з властивості document.cookie і запису цього рядка в перемінну szCookieString функція findCookie організує цикл по всіх символах цього рядка. Умовою завершення циклу є перегляд усіх szCookieString.length символів.

Порівнюючи ім'я параметра з подстрокой, витягнутої з рядка szCookieString за допомогою методу substring, функція findCookie намагається знайти потрібний параметр. Якщо така спроба надається успішної, функція findCookie пропускає символ присвоювання, извлекая значення параметра, обмежене символом "точка з запятой". Це значення повертається функцією findCookie.

Якщо ж пошук надається невдалим, функція findCookie повертає порожній рядок.

Як користуватися функцією findCookie?

По-перше, за допомогою цієї функції можна перевірити, чи встановлене для даного документа cookie із заданим ім'ям

 

if(findCookie("Visit") == "")

{

// cookie з ім'ям Visit установлене

...

}

else

{

// cookie з ім'ям Visit не встановлене

...

}

 

Для того щоб записати в текстову переменную значення параметра cookiе з заданим ім'ям, треба зробити таке:

 

var szVisitValue = findCookie("Visit");

 

Як очевидно, користуватися функцією findCookie достатньо просто.

7.1.3. Зміна значення параметра cookie

Для зміни значення параметра cookie із заданим ім'ям можна просто викликати функцію addCookie ще разом:

 

addCookie("Count","0",10);

// Значення параметра Count дорівнює 0

...

addCookie("Count","5",10);

// Значення параметра Count дорівнює 5

 

Тут спочатку встановлено для параметра Count значення 0, а потім змінене це значення на 5.

7.1.4. Видалення cookie

Самий простий засіб видалити cookie - установити для нього такий час автоматичного видалення, що вже пройшло. Для цього потрібно одержати поточну дату, зменшити її, наприклад, на одну микросекунду, а потім змінити значення document. cookie.

Все це робить функція removeCookie:

 

function removeCookie(szName)

{

var dtExpires = new Date();

dtExpires.setTime(dtExpires.getTime() - 1);

var szValue = findCookie(szName);

document. cookie var szValue = findCookie(szName);= szName + "=" + szValue + "; expires=" + dtExpires. toGMTString();

}

У останньому рядку цій функції зазначене таке значення параметра expires, що викликає негайне видалення cookies браузером.

7.1.5. Обмеження на використання cookie

На використання cookie накладаються визначені обмеження. який перераховані нижче:

· усього може бути створено не більш ніж 300 cookie;

· кожне cookie не може перевищувати по своєму розмірі 4 Кбайт;

· для кожного домена може бути створено не більш 20 cookie

Якщо зазначені значення будуть перевищені, браузер може видалити самі старі cookie або обрізати значення параметрів cookie.

7.2. Декілька прикладів використання cookie

У цьому поділі на прикладі конкретних сценаріїв JavaScript буде показано, як можна використовувати cookies для рішення різноманітних практичних задач.

7.2.1. Фіксація повторних провідин сторінки

У першому прикладі документ HTML містить форму з двома кнопками.

Якщо натиснути на кнопку Go to page, сценарій JavaScript створить новий документ HTML. Зовнішній вигляд цього документа залежить від того, скільки разів користувач натискав на цю кнопку.

Кнопка Remove All Cookies призначена для видалення cookie, створеного в документі HTML.

Коли нажимается кнопка Go to page у перший разом, cookie ще не створено. При цьому створюється документ HTML.

В другий і наступні рази зовнішній вигляд документа змінюється.

Тепер з'являється новий заголовок, а також уміст параметрів cookie з іменами Visit і Count.

При кожних нових провідинах значення параметра Count буде збільшуватися на одиницю. Якщо ж у документі натиснути кнопку Remove All Cookies, підрахунок провідин почнеться наново.

Вихідний текст документа HTML поданий у листинге 7.1.

 




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 384; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.118 сек.