Помощь в написании студенческих работ
Антистрессовый сервис

Изучение преимуществ технологии Server Side Includes

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Решается эта проблема при помощи SSI (Server Side Include). С помощью этой технологии можно собирать страницы по кускам на лету. Технология очень проста — при запросе клиента сервер проверяет документ на наличие специальных команд и выполняет их, если находит. Вот пример, нам надо собрать страницу из двух частей (logo.html и inform1. html). Первая часть сверху — общая часть (логотип, меню и т… Читать ещё >

Изучение преимуществ технологии Server Side Includes (реферат, курсовая, диплом, контрольная)

Содержание Введение

1. Основные характеристики технологии Server Side Includes

1.1 Основы SSI

1.2 Команды SSI

1.3 Главные серверные включения и их атрибуты

2. Механизм SSI

2.1 Включение механизма Server-Side Includes

2.2 Базовые директивы

2.3 Переменные включения

2.4 Подстановка переменных

2.5 Условные операторы

3. Практическое использование SSI

3.1 Добавление разметки

3.2 Формирование страницы из шаблона

3.3 Пример начального файла сервера

3.4 Пример трех шаблонов Заключение Список литературы Приложения

Введение

Интернет-технологии в наши дни становятся все доступнее. Открыть свой сайт в Интернете может любой, выбор возможностей — на любой вкус. Можно кропотливо выписывать тэги в «Блокноте», можно использовать специальные визуальные редакторы, можно просто набросать страницу в Microsoft Word и сохранить в формате HTML. Словом, «твори, выдумывай, пробуй!». Совершенно не обязательно быть профессиональным программистом или дизайнером, все чаще на арену Интернета выходят любители.

SSI — это директивы, вставляемые прямо в HTML-код и служащие для передачи указаний Wев-серверу. Встречая такие директивы, которые, кстати, называются SSI-вставками, Web-сервер интерпретирует их и выполняет соответствующие действия. Например: вставка HTML-фрагмента из другого файла, динамическое формирование страничек в зависимости от некоторых переменных (например, типа браузера) и другие не менее приятные вещи.

Преимущества SSI проявляются, когда нужно поддерживать достаточно большой по объему сайт, имеющий определенную структуру и повторяющиеся элементы кода на всех страничках. При применении серверных включений сайт удобно рассматривать как состоящий из отдельных блоков, каждый из которых отвечает за свою часть странички. Эти блоки практически неизменны и повторяются от страницы к странице. В эти блоки можно вынести такие элементы странички как: главное меню, рекламные вставки, повторяющиеся элементы оформления страничек и т. д. Физически эти блоки представляют собой просто HTML-файлы, содержащие часть кода, нужную для выполнения их задачи.

Объектом исследования курсовой работы является технология Server Side Includes (SSI).

Предметом исследования курсовой работы является практическое применение данной технологии.

Целью данной курсовой работы является изучение преимуществ технологии SSI.

1. Основные характеристики технологии Server Side Includes

1.1 Основы SSI

server side includes сервер Технология SSI (Server Side Includes — включения на стороне сервера, разработанная компанией Questar Microsystems) — несложный язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Реализован в веб-сервере Apache при помощи модуля mod_include. Включённая в настройках по умолчанию веб-сервера возможность позволяет подключать HTML-файлы, поэтому для использования инструкций файл должен оканчиваться расширением. shtml, .stm или .shtm

Синтаксис SSI позволяет включать в текст страницы другие SSI-страницы, вызывать внешние CGI-скрипты, реализовывать условные операции (if/else), работать с переменными и т. п. Благодаря крайней простоте языка, сборка SSI-страниц происходит очень быстро, однако многие возможности полноценных языков программирования, например, работа с файлами, в SSI отсутствуют.

При создании сайта многие Вебмастера испытывают сложности с его оформлением, особенно это проявляется в первые этапы разработки. Приходится всё время что-то менять, исправлять и убирать. С одной страницей это легко, но, что делать, когда у Вас более 10 страниц. Возьмем, к примеру, такую ситуацию. У Вас 100 страниц сайта и Вам вдруг неожиданно потребовалось в верхней части каждой страницы поместить какой-то элемент (баннер, ссылка и т. д.) Исправлять 100 страниц очень и очень туго, да и стоит ли. Даже при помощи всяких программ-заменителей это не просто сделать, особенно когда менять не одну строчку, а несколько. Как решить эту проблему?

Решается эта проблема при помощи SSI (Server Side Include). С помощью этой технологии можно собирать страницы по кускам на лету. Технология очень проста — при запросе клиента сервер проверяет документ на наличие специальных команд и выполняет их, если находит. Вот пример, нам надо собрать страницу из двух частей (logo.html и inform1. html). Первая часть сверху — общая часть (логотип, меню и т. д.), вторая часть — сама информационная страничка. Тогда на информационной страничке мы ставим следующую строчку-команду SSI: - путь к файлу logo. html указывается от текущего файла inform1.html.

Предполагаем, что файл logo. html лежит на сайте в каталоге SSI. Таким образом, при запросе на такой файл, сервер выполнит команду INCLUDE и вместо этой команды выдаст содержимое файла logo.html. Для всех предполагаемых страниц сайта можно написать эту команду, тогда при загрузке они будут показывать верхнюю общую часть и своё содержание, естественно. Что это даёт? Теперь достаточно изменять файл logo. html, чтобы изменились все 100 страниц сайта. Причём, меняются не сами страницы, а только этот один файл. Остальные же просто при загрузке выводят его содержимое, которое легко менять. Так, к примеру, можно оформлять в едином стиле весь свой сайт, можно легко менять его дизайн и вид, задавая параметры в общем файле logo.html.

При использовании технологии SSI важно учитывать тот факт, что сервер должен поддерживать для проверки на команды SSI данные расширения файлов. Перед отправкой обычных документов сервер не проверяет их на команды SSI и поэтому работает быстрее, а если он каждый раз проверяет все файлы сайта на SSI, работы сервера замедляется. Для того чтобы этого избежать многие серверы обрабатывают на SSI только файлы определённого типа (Например *.shtm *.shtml и т. д.) Остальные же файлы не просматриваются на такие команды, а отправляются клиенту сразу. Поэтому не удивляйтесь, если Ваши команды SSI не сработали, вероятно, сервер просто не настроен на их проверку. В итоге Вы не увидите ничего, хотя сервер выдаст команду клиенту, браузер никак на неё не отреагирует (для него это обычная ремарка). Важно знать какие типы файлов сервер проверяет на команды SSI. Например, сервер http://webservis.ru проверяет и файлы *.html. Это конечно хорошо и удобно для самих вебмастеров, но нагрузка на сервер выше.

При создании общего стиля использование SSI просто необходимо, так как нужно использовать общую шапку. Многие сайты используют общие и шапку и низ документа. Это позволяет делать практически идентичные по дизайну страницы. Менять общий стиль очень легко. Когда создаёте сайт с большим количеством страниц, всегда используйте SSI.

С точки зрения непрофессионала серверные включения, SSI (Server Side Includes) — это специальные заполнители в HTML-документе, которые сервер будет заменять реальными данными непосредственно перед отправкой на браузер окончательного документа. К тому времени, как документ попадает на браузер, он ничем не отличается от других страниц, как будто данные в HTML-код вставлены вручную. SSI позволяет создавать структуры для страниц, которые будут динамически генерироваться сервером. Для web-авторов он может оказаться мощным сродством управления разработкой сайта и повышения его эффективности. Примеры использования SSI:

· размещение неоднократно используемых элементов. Если имееется элемент, который появляется на каждой странице вашего сайта, например, сложный навигационный заголовок, вы можете разместить в исходном тексте единственную SSI-команду, которая просто будет копировать его.

· размещение одной строкой элемента, который постоянно изменяется. Например, если вы поддерживаете домашнюю страницу, на которой имеется ежедневно меняемой сообщение, используйте команду SSI (и сценарий на сервере) ля автоматического замещения сообщения.

· вывод даты и времени последнего обновления.

· размещение многочисленным пользователям предоставлять содержимое для включения его в web-страницу без предоставления им доступа к исходному HTML коду. Например, возможность передачи еженедельных обновлений по электронной почте. Сервер может запустить сценарий, который преобразует сообщение в текстовый файл и затем командой SSI вставит его на web-страницу.

· SSI может обслуживать web-страницу осуществляющую запрос с браузера. Даже можно обслуживать документы на базе имени домена пользователя.

Для того чтобы сервер знал, что страничка не обычная, а содержит SSI-директивы, она имеет специальное расширение: *.shtml или *.shtm, наличие которого и заставляет web-сервер предварительно обрабатывать странички. Вообще-то, расширение может быть любое — в зависимости от конфигурации web-сервера, но в основном применяется именно *.shtml.

Полная страничка формируется web-сервером на лету, собирая код странички из таких вот блоков. Для того, чтобы указать серверу, какой блок нужно вставить и в каком месте странички, используется специальная форма записи в виде комментария. Вот такая:

где # - признак начала SSI-вставки

command — SSI-команда

param — параметры SSI-команды.

1.2 Команды SSI

SSI-команд насчитывается около десятка, но я расскажу только о самых употребляемых. Самая популярная команда — это команда включения содержимого одного файла в другой:

где include — команда вставки

virtual — параметр, определяющий, как трактовать путь — как абсолютный file или как относительный virtual

" /path/file.ssi" - путь к включаемому файлу Результатом ее выполнения будет вставка содержимого файла file. ssi в месте появления данной директивы. При просмотре сформированного исходника HTML-файла мы не увидим никаких признаков SSI, т.к. данный механизм действует абсолютно прозрачно для браузеров, они получают исключительно корректный HTML-код.

Следующая команда — это команда установки значения переменной:

где var — команда установки значения переменной

pic — имя переменной

" picture. gif" - значение переменной В данном случае мы определили переменную с именем pic и присвоили ей строковое значение «picture.gif». Значение переменной pic теперь доступно внутри SSI-вставки, и мы можем его использовать по нашему усмотрению.

Например, используя одну и ту же SSI-вставку, но с разными значениями определенной в ней переменной, мы получим различные результаты.

Перед тем, как показать реальный пример использования переменных в SSI-включениях, я расскажу о некоторых командах, применяемых при работе с переменными. Во-первых, это команда печати значения переменной:

Ее выполнение приведет к тому, что в месте появления команды напечатается значение переменной pic, т. е. «picture.gif» .

Переменная может участвовать в выражениях, в этом случае перед ней ставится знак '$', показывающий, что это именно переменная, а не просто текст.

Вот пример:

После такого присвоения переменная B будет содержать строку «123 456». Если же в текст понадобится просто вставить знак '$' или какой-нибудь из других специальных знаков, то его нужно предварить слешем, вот так: '$'. В некоторых случаях для избежания двусмысленности значение переменной может быть заключено в фигурные скобки: «${A}» .

Более сложное применение переменных возможно с использованием условных операторов, имеющих следующую форму написания:

где condition — условие для сравнения В зависимости от результатов проверки мы можем подставить тот или иной фрагмент кода. Допустим, мы можем проанализировать тип браузера пользователя и в зависимости от этого выдать либо код для Netscape Navigator-а, либо Internet Explorer-а. Это может оказаться полезным в некоторых случаях, когда невозможно сделать страничку, которая корректно отображалась бы в обоих браузерах. Вот пример использования условного оператора:

Сегодня понедельник.

Что угодно, но не понедельник.

В данном случае условием проверки является существование переменной $Monday и, в зависимости от этого, подстановка того или иного HTML-кода.

Теперь давайте рассмотрим реальный пример применения SSI для формирования сложного документа из нескольких SSI-вставок.

Вначале напишем текст основного HTML-документа, полагая, что SSI-вставки находятся в каталоге /ssi:

index.shtml

Здесь находится текст нашей странички.

Теперь напишем код для этих SSI-вставок:

_header.shtml

" >" >

_footer.shtml

Как видите, основной документ предельно упрощен и состоит из директив, устанавливающих значения переменных title, keywords и description, которые и будут подставлены в код странички при обработке SSI-вставок, определяющих код для верхней и нижней частей странички. Реальный код SSI-вставок обычно гораздо сложнее и может включать в себя большее количество определяемых переменных и сложных условий, формирующих окончательный вид странички.

1.3 Главные серверные включения и их атрибуты Ниже приведен список основных серверных включений (SSI) и их атрибутов:

CONFIG

ERRMSG — задает по умолчанию сообщение, которое передается при обнаружении ошибки во время синтаксического анализа документа.

SIZEFMT — устанавливает формат, используемый при отображении размера файла. Допустимы значения — bytes или abbrev, которое округляет размер до ближайшего килобайта.

TIMEFMT — устанавливает формат для времени и даты. Подробнее об этом я расскажу ниже.

ECHO

VAR — значением является имя переменной, которую надо напечатать.

EXEC

CGI — указывает относительный URL-путь к сценарию CGI:

You are visitor number

CMD — задает любую команду на сервере. Переменные SSI доступны этой команде.

FSIZE

FILE — задает месторасположение файла в виде пут, относительно каталога, в котором находится анализируемый документ.

VIRTUAL — задает путь url относительно текущего анализируемого документа. Если он не начинается со слэша (/), то считается относящимся к текущему документу.

The size of this file is

FLASTMODE

FILE — задает месторасположение файла в виде пути, относительно каталога, в котором находится анализируемый документ.

VIRTUAL — задает путь url относительно текущего анализируемого документа. URL не может содержать схему или имя хоста, только путь. Если он не начинается со слэша (/), то считается относящимся к текущему документу.

This file was last modified on

INCLUDE

FILE — задает месторасположение файла в виде пути, относительно каталога, в котором находится анализируемый документ. То есть он не может содержать ./ или быть абсолютным. Предпочтение всегда следует отдавать атрибуту virtual.

VIRTUAL — задает путь url относительно анализируемого документа. URL не должен содержать схему или имя хоста. Если он не начинается со слеша (/), то считается относящимся к текущему документу.

PRINTENV

PRINTENV — используется только Apache версии 1.2 и выше. Элемент распечатывает список всех существующих переменных и их значения.

SET

VAR — имя устанавливаемой переменной.

VALUE — значение, присваиваемое переменной.

2. Механизм SSI

2.1 Включение механизма Server-Side Includes

Любой документ, у которого будет установлен обработчик «server-parsed» будет сканироваться этим модулем, если включена опция «Includes». Если вы имеете малое количество документов с SSI, то лучше всего в файле httpd. conf указать следующее:

AddType text/html .shtml AddHandler server-parsed .shtml

и устанавливать у таких файлов расширение.shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:

AddHandler server-parsed .html

И не забудьте включить в опции директории узла опцию Includes:

Options +Includes

Конечно, в этой строке могут быть и другие нужные вам опции.

2.2 Базовые директивы Директивы SSI включаются в HTML документ в виде комментариев (это не мешает вам использовать обычные комментарии). Синтаксис команд имеет следующий вид:

Очень часто значение помещается в двойные кавычки. Некоторые команды позволяют иметь только одну пару атрибут-значение. Обратите внимание, что заключительная часть комментария (—>) должна отделяться от директивы пробелом, иначе она будет воспринята, как ее часть.

Рассмотрим определенные в Apache элементы SSI:

config — контролирует различные аспекты сканирования. Его атрибутами могут быть:

errmsg — устанавливает сообщение, выводящееся при возникновении ошибки; в большинстве случаев целесообразно установить в пустую строку;

sizefmt — устанавливает формат, в котором будет выводиться размер файла. Формат соответствует передаваемой библиотечной функции strftime;

timefmt — устанавливает формат, в котором будет выводиться дата.

echo — выводит значение установленной переменной SSI. Допустимым атрибутом является var.

fsize — выводит размер файла в определенном с помощью sizefmt формате.

Допустимые атрибуты:

file — определяет путь к файлу, относительно сканируемого документа;

virtual — определяет стандартный кодированный URL, относительно сканируемого документа, или, при наличии в начале слеша (/) — относительно корня документов узла.

flastmod — выводит дату последней модификации файла в определенном с помощью timefmt формате. Атрибуты аналогичны атрибутам fsize.

include — включает текст другого документа или файла в сканируемый файл. К включаемому файлу применяются все установленные правила ограничения доступа. Если для каталога, из которого включается файл, установлена опция IncludesNOEXEC, и включение данного документа привело бы к запуску программы, то документ не включается, и выводится сообщение об ошибке. CGI сценарии вызываются, как обычно с помощью URL, который может содержать кодированную строку запроса (query string). Положение файла указывается с помощью атрибутов:

file — указывает путь, относительно сканируемого документа; путь не может содержать ./ и не может быть абсолютным путем; всегда предпочтительнее использовать атрибут virtual;

virtual — содержит кодированный URL, относительный или абсолютный; URL не может содержать имя протокола или имя хоста, и может содержать строку запроса.

printenv — выводит содержимое переменных окружения. Вызывается без параметров.

set — устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

2.3 Переменные включения В дополнение к стандартным окружениям CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI сценариев следующие переменные:

DATE_GMT — текущее время по Гринвичу;

DATE_LOCAL — текущее локальное (для сервера) время;

DOCUMENT_NAME — имя файла (без каталогов) документа, запрошенного пользователем;

DOCUMENT_URI — декодированный URL запрошенного пользователем документа;

LAST_MODIFIED — дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя «главного» документа, а не вложенного.

2.4 Подстановка переменных Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI директив. В этих случаях знак доллара можно вставить, предварив его слешем:

Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:

В результате такого присвоения переменная Zed будет иметь значение «Xbc_Y», если переменная a равна X, а переменная abc равна Y.

2.5 Условные операторы Базовыми элементами контроля являются:

Элементы elif и else являются необязательными.

Элемент endif заканчивает элемент if и является обязательным.

test_condition может быть одним из следующих:

string — истинно, если string не пуста;

string1 = string2

string1 ≠ string2

string1 < string2

string1 <= string2

string1 > string2

string1 >= string2

— истинно, если выполняется условие сравнения. Если string2 имеет форму /string/, то тогда она интерпретируется, как регулярное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;

(test_condition) — истинно, если test_condition истинно;

! test_condition — истинно, если test_condition ложно;

test_condition1 && test_condition2 — истинно, если как test_condition1, так и test_condition2 истинны;

test_condition1 || test_condition2 — истинно, если хотя бы test_condition1 или test_condition2 истинно.

" =" и «≠» имеют больший приоритет, чем «&&» и «||», а «!» имеет наивысший приоритет.

Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.

3. Практическое использование SSI

3.1 Добавление разметки Наиболее распространенным применением SSI является внедрение в документ некоего динамического куска разметки. Хрестоматийными примерами могут служить счетчики посещений, цитаты или баннеры рекламных сетей. В любом случае, будь то строка текста или целая таблица, вставка производится с помощью директивы include, помещаемой в то место, куда должен быть вставлен кусок разметки:

Документ с баннером внизу страницы

Программа или сценарий CGI, вставляемая с помощью SSI, ничем не отличается от стандартной CGI программы, за исключением того, что должен выдаваться не целый документ, а только кусок разметки.

Вот текст упомянутого выше сценария:

#!/usr/local/bin/perl

$login=$ENV{" QUERY_STRING" };

print «Content-type: text/htmlnn» ;

($IP)=($ENV{" REMOTE_ADDR" }=~s/.//g);

srand ($$+$IP+time);

$seed=int rand (10 000 000);

print «n»;

print «n» ;

print «

n" ;

Как видно из примера даже во включаемых сценариях необходимо выводить HTTP заголовок.

В результате сканирования нашего простейшего документа пользователю будет возвращен примерно (с точностью до случайной величины) следующий документ:

Документ с баннером внизу страницы

3.2 Формирование страницы из шаблона Вторым распространенным применением SSI является формирование страницы из шаблона. В простейшем случае — это документ в начало и конец, которого вставляются шапка и концовка:

Тестовая страница

Некий текст

Вставляемые блоки не обязательно должны быть законченными, например, header. html может заканчиваться тэгом

, а global_menu.html или footer. html начинаться с тэга. Таким образом, какими бы навороченными не были шапка и концовка документа, редактируемый документ выглядит чрезвычайно просто, и его легко редактировать.

В связи со всем вышесказанным рождается одно правило: желательно смысловую часть документа строить так, чтобы она никак не полагалась на содержимое шапок и концовок. В этом случае вы легко сможете перейти с табличной организации страниц на последовательную или на слоевую.

3.3 Пример начального файла сервера Далее приведен пример файла, вставляемого в начало каждого документа сервера http://www.citforum.ru/. Особенностью сервера является то, что каждый раздел имеет свой базовый цвет, и все это создается этим единственным файлом. Данный пример иллюстрирует работу с условными операторами, с шаблонами, а также возможность использования вложенных SSI (см. Приложение 1).

3.4 Пример трех шаблонов Следующий пример иллюстрирует, как с помощью SSI собираются страницы в Кладовой. Их особенность заключается в наличии повторяющихся блоков одинаково оформленного текста. Достигается это использованием трех шаблонов (см. Приложение 2).

Заключение

SSI представляет собой набор специальных инструкций, добавляемых прямо в код статической HTML-страницы. Инструкции исполняются веб-сервером в момент загрузки файла, содержащего страницу: веб-сервер вносит в результат, передаваемый браузеру посетителя, соответствующие изменения. Таким образом, технология SSI совершенно незаметна для пользователя и целиком реализуется на стороне сервера.

Первое преимущество SSI с точки зрения дизайнера заключается в том, что при таком подходе web-мастеру, занимающемуся поддержкой сайта, можно не бояться случайно, испортить дизайн. Элементы сложной верстки скрыты за счет использования SSI, и поддержка содержимого страничек становится гораздо более легким и приятным делом.

Второе, не менее важное преимущество, — это возможность мгновенной замены дизайна сайта, не требующая переделывания страничек с информационным содержанием сайта. Для смены дизайна достаточно переписать SSI-вставки, формирующие внешний вид сайта.

Только используя SSI, вы можете в считанные минуты полностью изменить внешний вид или обновить систему навигации на узле, имеющем сотни или тысячи документов, и так, что это пройдет безболезненно для пользователей узла, т.к. вам только потребуется заменить несколько файлов, а остальное за вас сделает сервер.

1. Нильсен Якоб. Веб-дизайн, 2006.

2. Спейнауэр С., Экштейн Р. Справочник веб-мастера (2-е издание). — СПб.: Символ-Плюс, 2000.

3. Хилайер. С; Мизик Д. Программирование Active Server Pages, 1999.

4. Джесси Рассел, Рональд Кон. SSI (Программирование).

5. Мейер Э. А. CSS-каскадные таблицы стилей. Подробное руководство, 2008.

6. Джон Дакетт. Основы веб-программирования с использованием HTML, XHTML и CSS, 2010.

7. Кристофер Шмитт, CSS: Cookbook, 2009.

8. Эрик Фримен, Э. Робсон, Изучаем программирование на HTML5, 2013.

9. Робин Никсон, Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS, 2011.

10. Алексей Петюшкин, HTML в Web-дизайне, 2004.

11. Владимир Дронов, HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов, 2011.

12. Николай Прохоренок, HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера, 2010.

13. Дэвид Пауэрс, PHP. Создание динамических страниц, 2012.

14. http://webdesign.site3k.net

15. http://www.rubestall.ru

16. http://www.webmasterwiki.ru

17. http://xpoint.ru

18. http://htmlbook.ru

19. http://httpd.apache.org

20. http://www.yourhtmlsource.com

21. http://www.ssi-developer.net

Приложение 1

Server for Information Technologies

Сервер содержит море (!) аналитической информации

Рубрикатор всех документов CIT Forum

Приложение 2

_head.html

" >" >

<h>КЛАДОВАЯ</h>

_item.html

" width=""

height="" border=0>

Узел поддержки:" >

Домашняя страница:" >

Она сама:" >

Она сама у нас: " >

Платформа:

Статус:

No description.


_foot.html

Показать весь текст
Заполнить форму текущей работой