Пример простият сървър за приложения на Java

UploadServer програма - пример за просто приложение, сървър в Java. Осигурява изходния код с подробни обяснения за всеки фрагмент. Prdstavlyaet интерес на тези, които тепърва започват да се учат програмиране в Java.

UploadServer програма - просто, една уеб-сървър за сваляне на файлове на компютъра, на който се изпълнява. Тя е написана от мен на с Java, и имах две цели: да се направи програмата, което е удобно да се хвърлят върху файловете на местната (и не само) на мрежата, без инсталиране и конфигуриране на тромава софтуер, както и да се направи проста, но функционална и богато разнообразие от "функции направено" за пример сървърни приложения в Java.

Работата с програмата не е по-малко, отколкото просто тя го направи. Вие работите с програма от командния ред, номер на порт (трябва да се допуска в защитната стена за достъп отвън), а след това от компютъра, където има файлове за изтегляне, отидете на компютъра си по обичайния уеб браузъра. Във формуляра, който се показва, изберете искате върху файла "Преглед". И това натиснете бутона "Качване". След успешно изтегляне на файла страница ще се появи с посочване на размера и MD5-сбора на изтегления файл.

Програмата изисква Java Runtime Environment 1.4 или по-нова версия (аз го изпитва на 1.6, но ако смятате, че документацията, всички необходими функции не са били по-късно от 1.4). Изтеглете най-новата версия на платформата от официалния сайт Java. Ако имате намерение да се търси не само в програмата, но и да го променят, ще трябва също Java-компилатор, който, заедно с други полезни инструменти в развитието на част от комплекта за създаване на Java приложения (JDK), който може да бъде изтеглен там.

Програмата се разпространява безплатно, текстът може да бъде напълно или частично се използва за всякакви цели, като същевременно се запази името си тази уеб страница връзки в изходния код. Взимам не носи отговорност за използването на програмата и не дава никакви гаранции по отношение на нейната ефективност, приложимост за определена ситуация или липса на грешки в него.

Програмата идва като компресиран файл, съдържащ изходния код (файл UploadServer.java) и компилиран клас (файл UploadServer.class)

UploadServer програма (Архив Zip, 5 к)

За да стартирате програмата, тип в директорията с компилиран файл UploadServer.class следния ред:

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

Внос на употребявани класове

Java програми се състоят от класове, които са групирани в пакети, образувайки йерархична структура като файлова система. Ако използвате класове от други пакети, те трябва да бъдат внесени с помощта на директивата за внос. Като опция, можете да укажете името на определен клас или звездичка след името на пакета, което би означавало да импортира всички класове от опаковката.

Заглавие клас и дефинирането на променливи

Конструкторът на класа

Дизайнер - специална функция, която се извиква при създаването на обект. Тук конструктор взема като аргумент номера на порта, на която е установено със сървъра, създава сокет на сървъра слушане на указания порт, и отпечатва съобщение за успешното стартиране.
Когато създавате гнездо изключение може да се случи, защото на проектанта не се справя сам, и предава изключение на кода на разговори, както е посочено в заглавието на функция (хвърля изключение).

Функция, с която започва изпълнението на потока

Функция обработка на клиент връзка - определянето на променливи

Четене клиент заглавките

"GET" тип на обработка на заявката

Ако първата низа започва с низа "GET", клиентът се изпраща предварително формирани отговор на HTML-документа, съдържащ формата за качване на файла.

Обработка "POST" тип заявка, определението на променливи

Ако типът на желание на клиента започва с ред "POST", ние приемаме, че формата е била представена на файл за изтегляне. Първоначално на Content-Дължина параметър се определя от дължината глава на предадените данни. Освен това, тъй като данните ще бъдат предадени на клиента във формат MIME, трябва да получите разделител за определяне на Content-Type и форма от него сепаратор линия, за да се определи края на предава файл (Приложение А на втория описанието на формат част MIME). За да намерите оригиналното име на файла (на клиента) се формира от променлива fileNamePattern регулярен израз. За да се изчисли контролната сума на полученото файл е създаден MessageDigest обект чрез алгоритъма на хеширане, MD5. Също така се определят променливите за zapisyvatelya (писател), име на файл, създаден буфер, за да се буферира прочетете файла.

Body цикъл на четене форми за обработка на заглавната част на заявката

При подаване на формуляр, чрез HTTP в съставното / формат форм-данни за всяко поле файл е създаден под формата на блок, отделни линии са с ограничители, които се състои от текстово поле с името на файла, и отделени от тях с по един празен ред единица двоични данни на самия файл. В тази част на кода, четем текстовите полета и да ги погледнем името на файла с помощта на регулярни изрази. Тъй като в този случай регулярния израз обхваща не целия низ, а само част от нея, за да се провери дали методът на метод подниз находка () вместо мачове () в заглавната разбор разследване.
След като прочетете празен низ се произвежда създаване на обекти за четене на изпратен файл. Ако не е установено името на файла, той създава изключение тип RuntimeException с обяснителен текст низ. Ако е установено, името, то създава изходен поток от файл във файл с посоченото име в текущата директория. прозрачен DigestOutputStream поток също е създаден, който по време на запис тя изпраща копие от данните за храносмилане обект да брои "в движение" контролна получи файл. zapisyvatel създадена за конвертиране на символи в байтове за запис, използвайки същия CHARSET, както и че при четене.

Четене на данни изпраща файл и да го напиша на диска

Завършването на получаване на файл, изпращане на отговора на клиента

След приключване на цикъла на четене затваря zapisyvatel и показва съобщение за диагностика. След това се изчислява MD5 контролна сума, в резултат на масив от байтове се превръща в шестнадесетичен низ и генерира отговор на клиента на успешното изтегляне на файл.

Utility трансфер функция байт шестнадесетичен низ

Тази функция се използва за разпечатка, MD5 сума в отговор на клиента. Тя получава байта, тя се превръща в цяло число от изхвърлянето на високо байт (байт като - подписан тип, в случай на отрицателни стойности през цялото горно байта ще бъдат настроени да 0xFF). На следващо място, методът използва статичен клас toHexString Цяло число, което преобразува цяло число, за да шестнадесетичен низ. Този метод се отпечатва само значещи цифри, така че за по-малко от 16 числа, е необходимо да се допълнят получения низ символ "0" в ляво.

Основната функция

Изпълнение на програма на Java започва с основните функции на класа, в който е посочен като начало командния ред. Тази статична функция се нарича, когато всеки обект на класа все още не е създаден. Функцията трябва да бъде описано точно, както в този пример, защото в противен случай има java.lang.NoSuchMethodError грешка (метод не е намерен), когато програмата започва.
Основната функция получава параметрите на командния ред под формата на масив от низове. В нашия случай, чиято основна функция проверява броя на аргументите, сравнявайки дължината на масива с една единица, ако няма спор, той се отпечатва информацията за конзола за формата на командния ред и програмата приключва. Ако потребителят да има поне един аргумент, обектът се създава UploadServer клас, конструкторът е преминал първият аргумент, превърнат в брой, а след това са създали един обект, наречен метод на старт. Този метод на тема базов клас, който създава нова тема, да го тичам метод и се връща прави. По този начин, на първия поток, в който функцията се нарича основна, е завършена, но програмата продължава да работи в новата нишка да се изпълнява функцията връща.