Описанное здесь приложение представляет собой простой HTTP-сервер с кэшированием. Приложение запускается java-интерпретатором и использует стандартный поток вывода для ведения журнала обращений к серверу.
Формат запуска:
java -jar httpd.jar <путь> [<порт>]
<путь> - путь к корневому каталогу сайта.
<порт> - порт, который прослушивает сервер. По умолчанию 80.
Пример:
java -jar httpd.jar C:\Docs\MySite\ 8080
устанавливает HTTP-сервер на порт 8080 с корневым каталогом сайта C:\Docs\MySite\
| Файл | Размер (байт) | Описание |
|---|---|---|
| httpd.jar | 7,511 | Java-архив содержащий откомпилированный код сервера пригодный к запуску. |
| httpd-s.zip | 4,417 | Исходные тексты сервера сжатые в формате zip. |
MimeHeader.java
Этот файл содержит исходный код класса MimeHeader, который предназначен для представления заголовков MIME. MIME считается стандартом Internet для связи приложений через систему электронной почты (RFC 1341). Протокол HTTP расширяет понятие заголовка MIME-передачи стандартных пар атрибут/значение между клиентом и сервером HTTP.
Класс MimeHeader расширяет стандартный класс Hashtable и используется для сохранения MIME-атрибута и его значения в виде пары ключ/значение. Класс имеет два конструктора: для создания пустого заголовка и для создания заголовка из строки.
Метод parse() используется для заполнения хеш-таблицы заголовка из строки, имеющей формат MIME.
Метод toString() является антонимом parse() и предназначен для создания строки в формате MIME на основе данных класса.
UrlCasheEntry.java
Файл содержит класс UrlCasheEntry и предназначен для приведение в соответствие URL, по которому запрашивается документ, с соответствующему данному документу объекту MimeHeader и самими данными документа.
LogMessage.java
Содержит описание интерфейса LogMessage. Этот интерфейс определяет один метод log(), которому передаётся единственный параметр класса String. Этот метод используется для осуществления вывода сообщений от сервера.
Httpd.java
Содержит основной класс, реализующий функциональность HTTP-сервера.
Этот класс содержит четыре главных переменных экземпляра: port, docRoot, log и cache. Три из этих переменных инициализируются самим конструктором httpd:
httpd(int порт, String каталог, LogMessage журнал)
Четвёртая переменная cache является объектом класса Hashtable, где собрана информация о всех кэшируемых в памяти файлах, и инициализируется после создания объекта.
Алгоритм функционирования сервера следующий: после инициализации создаётся сокет сервера и в бесконечном цикле ожидается подключение. После подключения клиентского сокета анализируется запрос из входного потока и если это команда GET, анализируется запрашиваемый документ. Если такой документ есть в кэше, в поток вывода выводится ответ сервера, MIME-заголовок этого документа и сам документ. Если такого документа в кэше нет, то производится поиск запрашиваемого файла на диске, и если файл существует, для него создаётся MIME-заголовок и запись в кэше, после чего он выдаётся в выходной поток. После выдачи документа в поток вывода ожидается подключение следующего клиентского сокета.