EXEMPLUL mai simplă aplicație server de pe Java

Programul UploadServer - un exemplu de aplicație server simplu în Java. Oferă codul sursă cu explicații detaliate ale fiecărui fragment. interes Prdstavlyaet pentru cei care abia încep să învețe programare în Java.

Programul UploadServer - un simplu, cu un singur web-server pentru a descărca fișiere pe calculatorul pe care rulează. A fost scris de mine pe de Java, și am avut două obiective: pentru a face programul, care este convenabil de a arunca peste fișierele de pe locale (și nu numai) rețeaua fără instalarea și configurarea software-ului greoaie, precum și pentru a face un simplu, dar funcțional și o varietate bogată de „caracteristici făcut“ un exemplu aplicatii server în Java.

Lucrul cu programul nu este mai simplu decât ea. Executați un program de pe linia de comandă, numărul de port (ar trebui să fie permisă în firewall pentru a avea acces la exterior), apoi de la computer în cazul în care există fișiere pentru a descărca, du-te la computer în browser-ul web obișnuit. În formularul care apare, alegeți fișierul pe care doriți faceți clic pe „Browse.“ Și apăsați pe butonul „Încărcare“. După un succes fișier de descărcare a paginii va fi afișat cu indicarea mărimii și MD5 suma fișierul descărcat.

Programul necesită Java Runtime Environment 1.4 sau o versiune ulterioară (l-am testat pe 1.6, dar dacă credeți că documentația, toate funcțiile necesare nu au fost mai târziu de 1.4). Descărcați cea mai recentă versiune a platformei de pe site-ul oficial Java. Dacă aveți de gând să se uite nu numai la program, dar, de asemenea, să-l modifice, veți avea nevoie, de asemenea, Java-compilator, care, împreună cu alte instrumente utile în dezvoltarea unei părți a Java Development Kit (JDK), care poate fi descărcat de acolo.

Programul este distribuit în mod gratuit, textul poate fi utilizat în totalitate sau parțial, în orice aplicație menținând în același timp numele meu pe această pagină de web link-uri în codul sursă. Eu iau nici o responsabilitate pentru orice utilizare a programului și nu oferă nici o garanție cu privire la eficiența acestuia, aplicabilitate într-o anumită situație sau lipsa de erori.

Programul vine ca un fișier zip care conține codul sursă (fișier UploadServer.java) și clasa compilat (fișier UploadServer.class)

Programul UploadServer (Arhiva Zip, 5 k)

Pentru a rula programul, introduceți în directorul cu fișierul compilat UploadServer.class linia următoare:

O bună practică pentru a insera aceste linii pentru fiecare fișier de cod sursă, în timp ce în cazul proiectelor mari, mai ușor de licență dintr într-un fișier separat, în codul sursă pentru a lăsa doar o mențiune a acestui fișier.

Import de clasele utilizate

Programele Java constau din clase care sunt grupate în pachete, formând o structură ierarhică ca un sistem de fișiere. Dacă utilizați clase de la alte pachete, acestea trebuie să fie importate utilizând directiva de import. Ca o opțiune, puteți specifica numele unei anumite clase sau un asterisc după numele pachetului, ceea ce ar însemna importarea tuturor claselor din pachetul.

Titlul clasei și definirea variabilelor

Constructorul clasei

Designer - o funcție specială care se numește atunci când este creat un obiect. Aici constructorul are ca argument numărul portului pe care este stabilit serverul, creează un socket server de a asculta la portul specificat, și imprimă un mesaj despre pornire cu succes.
Când creați o excepție de socket poate apărea deoarece proiectantul nu face fata le și transmite o excepție de la codul de apel, astfel cum a raportat în antetul funcției (aruncă excepție).

Funcția, cu care începe executarea debitului

Funcția de conectare client de procesare - definirea variabilelor

Citirea antet cererea clientului

„GET“ tip de procesare de interogare

Dacă primul șir de interogare începe cu șirul „GET“, clientul este trimis un răspuns de pre-format la-documentul HTML care conține formularul pentru a încărca fișierul.

Prelucrarea „POST“ tip de solicitare, definiția variabilelor

În cazul în care tipul de solicitare client începe cu „POST“ rând, presupunem că forma a fost depusă la dosar descărcabil. Initial Content-Length parametru este determinată de lungimea antet a datelor transmise. Mai mult, din moment ce datele vor fi transmise clientului în format MIME, trebuie să obțineți un separator de setare Content-Type și sub formă de aceasta linie de separare pentru a determina sfârșitul fișierului transmis (Anexa A a doua descriere de format parte MIME). Pentru a găsi numele fișierului original (pe client) este format dintr-un fileNamePattern variabilă expresie regulată. Pentru a calcula suma de control a fișierului primit este creat MessageDigest obiect folosind algoritmul MD5 hash. De asemenea, definește variabilele pentru zapisyvatelya (scriitor), nume de fișier, a creat un tampon pentru a tampona fișierul citit.

Ciclul Organismul de citire a formelor de prelucrare a cererii de antet

La depunerea unui formular prin HTTP în format multipart / form-date pentru fiecare fișier câmp este creat sub forma unui bloc, linii separate de limitare, care constă dintr-un câmp de text cu numele de fișier, și separate de ele printr-o unitate de linie goală de date binare ale fișierului în sine. În această parte a codului, am citit câmpurile de text si uita-te la ei numele de fișier folosind expresii regulate. Deoarece, în acest caz, expresia regulată nu acoperă întregul șir, ci doar o parte a acesteia, pentru a verifica dacă metoda subșir find () metoda în loc de meciuri () în antetul parsare anchetă.
Dupa ce a citit un șir gol este produs crearea de obiecte pentru citirea fișierului trimis. Dacă numele de fișier nu a fost găsit, creează un tip RuntimeException excepție cu șir de text explicativ. În cazul în care numele a fost găsit, creează un flux de fișier de ieșire într-un fișier cu numele specificat în directorul curent. este, de asemenea, creat DigestOutputStream flux transparent, care atunci când înregistrarea trimite o copie a datelor pentru a digera obiect pentru a conta „din zbor“ de control a primit fișier. zapisyvatel creat pentru convertirea simbolurilor în octeți pentru înregistrare folosind același charset, și că, atunci când citesc.

Citirea fișierelor de date trimise și scrie pe disc

Finalizarea primirii dosarului, transmiterea răspunsului la client

După finalizarea ciclului de citire zapisyvatel se închide și afișează un mesaj de diagnosticare. MD5 este apoi calculată suma de control, rezultată matrice octet este convertit într-un șir hexazecimal și a generat răspuns clientului de succes descărcarea unui fișier.

Funcția de transfer de utilitate octet șir hexazecimal

Această funcție este utilizată pentru imprimare MD5-sumă ca răspuns la client. Acesta primește octeți, îl convertește la un întreg prin aruncarea unui octet mare (octet ca - semnat de tip, în cazul valorilor negative, în octeții superioare întregi vor fi setate la 0xFF). Apoi, metoda utilizează o clasă statică toHexString Integer, care convertește un întreg la un șir hexazecimal. Această metodă imprimă doar cifrele semnificative, astfel încât pentru un număr mai mic de 16, este necesar să se completeze simbolul sir rezultat „0“ din partea stângă.

Funcția principală

Executarea programului Java începe cu principalele funcții ale clasei care este specificat ca linia de comandă de start. Această funcție statică este numit atunci când nu a fost creat încă nici un obiect al clasei. Funcția trebuie descrise exact ca în acest exemplu, pentru că altfel nu java.lang.NoSuchMethodError eroare (metoda nu a fost găsit) la pornirea programului.
Funcția principală devine parametrii de linie de comandă sub forma unei matrice de siruri de caractere. În cazul nostru, funcția principală verifică numărul de argumente, comparând lungimea matrice cu o unitate în cazul în care nu există nici un argument, acesta este imprimat la informațiile consola cu privire la formatul de linie de comandă și programul se încheie. În cazul în care utilizatorul să aibă cel puțin un argument, obiectul este creat clasa UploadServer, constructorul este trecut primul argument, convertit la un număr, iar apoi au creat un obiect numit metoda de pornire. Această metodă de clasă de bază fir care creează un fir nou, el metoda de a alerga și se întoarce face. Astfel, primul flux, în care funcția a fost numit principal, este finalizat, dar programul continuă să ruleze în noul fir pentru a rula funcția întoarce.