Взгляд на Исходный Скрипт
Теперь посмотрим на исходный код JavaScript для данного приложения. Используйте для этого ваш привычный текстовый редактор, откройте файл $NSHOME\js\samples\world\hello.html, где $NSHOME это директория, в которой установлен ваш Netscape-сервер. Файл начинается обычным HTML:
<html>
<head>
<title> Hello World </title> </head>
<body>
<h1> Hello World </h1>
<p>Your IP address is <server>write(request.ip);</server>
Тэги SERVER в нижней строчке содержат код JavaScript, который выполняется на сервере. В данном случае оператор write(request.ip) выводит свойство ip объекта request (IP-адрес клиента, выполнившего доступ к странице). Функция write очень важна в приложениях JavaScript, поскольку используется для дополнения значений выражений JavaScript в HTML-страницу, отправляемую клиенту.
Объект request является частью службы JavaScript Session Management Service. Полное его описание см. в . Функция write это одна из функций JavaScript, которые не ассоциированы со специфическим объектом. О функции write см. раздел .
Далее идут операторы, пока не представляющие для нас интереса. Затем - оператор:
<server> client.oldname = request.newname; </server>
Этот оператор присваивает значение свойства newname объекта request свойству oldname объекта client. Объект client также является частью JavaScript Session Management Service. Его полное описание см. в . Пока просто отметьте, что client может содержать информацию о приложении, специфичную для определённого браузера, запускающего это приложение.
Значение свойства request.newname устанавливается, когда пользователь вводит значение в форме. Далее в файле можно найти такие операторы:
<form method="post" action="hello.html">
<input type="text" name="newname" size="20">
Значением атрибута ACTION формы является hello.html (имя текущего файла). Это означает, что, когда пользователь отправляет форму, щёлкая кнопку Enter или нажимая клавишу Enter, Navigator перезагружает текущую страницу. Вообще, ACTION может быть любая страница приложения JavaScript.
Значением атрибута NAME текстового поля является newname. Когда страница отсылается, этот оператор присваивает то, что пользователь ввёл в текстовом поле, свойству newname объекта request, к которому в JavaScript можно обратиться request.newname. Значения элементов формы всегда соответствуют свойствам объекта request. Свойства объекта request сохраняются только в течение одного (текущего) клиентского запроса.
Несколькими строками ниже находится другой тэг SERVER, указывающий, что следующие строки являются операторами серверного JavaScript. Вот первая группа операторов:
if (client.number == null)
client.number = 0
else
client.number = 1 + parseInt (client.number, 10)
Данный условный оператор проверяет, инициализировано ли свойство number объекта client. Если нет, код инициализирует его в 0; иначе number увеличивается на 1 с использованием функции JavaScript parseInt, которая конвертирует строковое значение в число. Поскольку предопределённый объект client конвертирует все значения свойств в строки, Вы обязаны использовать parseInt или parseFloat для конвертации этих значений в числа.
Так как number это свойство объекта client, оно отличается для каждого клиента, выполняющего доступ к приложению. Это значение указывает количество раз, когда "you have been here/Вы здесь были."
Для отслеживания общего количества посещений Вы используете объект project, поскольку он совместно используется всеми клиентами, выполняющими доступ к приложению. Свойства объекта project существуют, пока приложение не будет остановлено. Следующая группа операторов отслеживает посещения:
project.lock()
if (project.number == null)
project.number = 0
else
project.number = 1 + project.number
project.unlock()
Первый оператор использует метод lock объекта project. Это даёт клиенту временный исключительный доступ к объекту project. Оператор if проверяет, было ли определено свойство project.number. Если нет, код инициализирует его в 0; иначе код увеличивает его на 1. Наконец, метод unlock освобождает объект project, и другие клиенты могут получить к нему доступ.
Последние операторы файла выводят значения свойств client.number и project.number.
<p>You have been here <server>write(client.number);</server> times.
<br>This page has been accessed <server>write(project.number);
</server> times.