Príklad stiahnutia súboru na servlete

1. Prehľad

Spoločnou vlastnosťou webových aplikácií je schopnosť sťahovať súbory.

V tomto návode uvedieme jednoduchý príklad vytvorenia súboru na stiahnutie a jeho poskytovania z aplikácie Java Servlet.

Súbor, ktorý používame, bude z prostriedkov webapp.

2. Maven závislosti

Ak používate program Jakarta EE, nemuseli by sme pridávať žiadne závislosti. Ak však používame Java SE, budeme potrebovať závislosť javax.servlet-api:

 javax.servlet javax.servlet-api 4.0.1 k dispozícii 

Najnovšiu verziu závislosti nájdete tu.

3. Servlet

Poďme sa najskôr pozrieť na kód a potom zistiť, čo sa deje:

@WebServlet ("/ download") verejná trieda DownloadServlet rozširuje HttpServlet {private final int ARBITARY_SIZE = 1048; @Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) hodí ServletException, IOException {resp.setContentType ("text / plain"); resp.setHeader ("Content-dispozícia", "príloha; názov súboru = sample.txt"); try (InputStream in = req.getServletContext (). getResourceAsStream ("/ WEB-INF / sample.txt"); OutputStream out = resp.getOutputStream ()) {byte [] buffer = nový bajt [ARBITARY_SIZE]; int numBytesRead; while ((numBytesRead = in.read (buffer))> 0) {out.write (buffer, 0, numBytesRead); }}}}

3.1. Vyžiadajte si koncový bod

@WebServlet („/ stiahnutie“) anotačné značky DownloadServlet triedy na vybavenie požiadaviek smerovaných na "/Stiahnuť ▼" koncový bod.

Prípadne to môžeme urobiť opísaním mapovania v súbore web.xml.

3.2. Odozva Druh obsahu

The HttpServletResponse objekt má metódu nazvanú ako setContentType pomocou ktorého môžeme nastaviť Druh obsahu hlavička odpovede HTTP.

Druh obsahu je historický názov vlastnosti hlavičky. Ďalším názvom bol typ MIME (Multipurpose Internet Mail Extensions). Teraz túto hodnotu jednoducho označíme ako Typ média.

Táto hodnota môže byť „application / pdf“, „text / plain“, „text / html“, „image / jpg“ atď., oficiálny zoznam vedie internetový úrad pre pridelené čísla (IANA). Nachádza sa tu.

Pre náš príklad používame jednoduchý textový súbor. The Druh obsahu pre textový súbor je „text / obyčajný“.

3.3. Odozva Dispozícia obsahu

Nastavenie Dispozícia obsahu hlavička v objekte odpovede informuje prehliadač, ako má zaobchádzať so súborom, ku ktorému pristupuje.

Prehliadače rozumejú použitiu Dispozícia obsahu ako konvencia, ale v skutočnosti to nie je súčasť štandardu HTTP. W3 má poznámku o použití Dispozícia obsahu k dispozícii na čítanie tu.

The Dispozícia obsahu hodnoty pre hlavný text odpovede budú buď „vložené“ (pre obsah webovej stránky, ktorý sa má vykresliť), alebo „príloha“ (pre súbor na stiahnutie).

Ak nie je zadané, predvolené Dispozícia obsahu je „vložený“.

Pomocou voliteľného parametra hlavičky môžeme určiť názov súboru „sample.txt“.

Niektoré prehliadače okamžite stiahnu súbor pomocou daného názvu súboru a iné zobrazia dialógové okno na stiahnutie obsahujúce našu preddefinovanú hodnotu.

Presná vykonaná akcia bude závisieť od prehliadača.

3.4. Čítanie zo súboru a zápis do výstupného toku

V zostávajúcich riadkoch kódu vezmeme ServletContext z žiadosti a použite ju na získanie súboru na adrese „/WEB-INF/sample.txt“.

Použitím HttpServletResponse#getOutputStream (), potom načítame zo vstupného toku zdroja a zapíšeme do odpovede OutputStream.

Veľkosť použitého bajtového poľa je ľubovoľná. Môžeme rozhodnúť, že veľkosť na základe množstva pamäte je rozumné prideliť na prenos údajov z InputStream do OutputStream; čím menší je nuber, tým viac slučiek; čím väčšie číslo, tým väčšie využitie pamäte.

Tento cyklus pokračuje až do numByteRead je 0, čo označuje koniec súboru.

3.5. Zatvorte a prepláchnite

Prúd inštancie musia byť po použití uzavreté, aby sa uvoľnili zdroje, ktoré momentálne drží. Spisovateľ inštancie musia byť tiež vyprázdnené, aby sa do cieľového miesta zapísali všetky zostávajúce bajty s medzipamäťou.

Pomocou a vyskúšajte zdroje vyhlásenie, aplikácia sa automaticky Zavrieť akýkoľvek Automatické uzatváranie inštancia definovaná ako súčasť skús vyhlásenie. Viac informácií o prostriedkoch na vyskúšanie nájdete tu.

Tieto dve metódy používame na uvoľnenie pamäte, aby sme zabezpečili, že údaje, ktoré sme pripravili, sa odošlú z našej aplikácie.

3.6. Stiahnutie súboru

Keď je všetko na svojom mieste, sme pripravení spustiť náš servlet.

Teraz, keď navštívime relatívny koncový bod "/Stiahnuť ▼", náš prehliadač sa pokúsi stiahnuť súbor ako „simple.txt“.

4. Záver

Stiahnutie súboru zo servletu sa stáva jednoduchým procesom. Používanie streamov nám umožňuje rozdávať údaje ako bajty a typy médií informujú prehliadač klienta o tom, aký typ údajov možno očakávať.

Je na prehliadači, aby určil, ako s odpoveďou naloží, môžeme mu však poskytnúť určité pokyny Dispozícia obsahu hlavička.

Celý kód v tomto článku nájdete na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found