Példa a fájl letöltésére Servlet-ben

1. Áttekintés

A webalkalmazások közös jellemzője a fájlok letöltése.

Ebben az oktatóanyagban bemutatunk egy egyszerű példát egy letölthető fájl létrehozására és Java Servlet alkalmazásból történő kiszolgálására.

Az általunk használt fájl a webapp forrásokból származik.

2. Maven-függőségek

Ha Jakarta EE-t használ, akkor nem kell hozzáadnunk semmilyen függőséget. Ha azonban Java SE-t használunk, szükségünk lesz a javax.servlet-api függőségre:

 javax.servlet javax.servlet-api 4.0.1 biztosított 

A függőség legújabb verziója itt található.

3. Servlet

Először vessünk egy pillantást a kódra, majd megtudhatjuk, mi folyik itt:

@WebServlet ("/ download") nyilvános osztály A DownloadServlet kiterjeszti a HttpServlet {private final int ARBITARY_SIZE = 1048; @Orride protected void doGet (HttpServletRequest req, HttpServletResponse resp) dobja a ServletException, IOException {resp.setContentType ("text / plain"); resp.setHeader ("Tartalom-elrendezés", "melléklet; fájlnév = minta.txt"); próbáld meg (InputStream in = req.getServletContext (). getResourceAsStream ("/ WEB-INF / sample.txt"); OutputStream out = ill.getOutputStream ()) {byte [] puffer = new byte [ARBITARY_SIZE]; int numBytesRead; while ((numBytesRead = beolvasott (puffer))> 0) {out.write (puffer, 0, numBytesRead); }}}}

3.1. Kérjen végpontot

@WebServlet (“/ letöltés”) annotációval jelöli a DownloadServlet osztály a "/Letöltés" végpont.

Alternatív megoldásként megtehetjük ezt úgy, hogy leírjuk a leképezést a web.xml fájlban.

3.2. Válasz Tartalom típus

A HttpServletResponse Az objektumnak van egy úgynevezett metódusa setContentType amellyel beállíthatjuk a Tartalom típus a HTTP válasz fejlécét.

Tartalom típus a fejléc tulajdonságának korábbi neve. Egy másik név a MIME típus volt (Többcélú internetes levélkiterjesztések). Most egyszerűen csak Media Type-nak nevezzük az értéket.

Ez az érték lehet „alkalmazás / pdf”, „szöveg / sima”, „szöveg / html”, „kép / jpg” stb., a hivatalos listát az Internet Assigned Numbers Authority (IANA) vezeti, és itt található.

Példánkhoz egy egyszerű szöveges fájlt használunk. A Tartalom típus mert egy szöveges fájl „text / plain”.

3.3. Válasz Tartalom-elhelyezés

A Tartalom-elhelyezés A válaszobjektum fejléce megmondja a böngészőnek, hogyan kell kezelni a hozzáférett fájlt.

A böngészők megértik a Tartalom-elhelyezés mint egyezmény, de valójában nem része a HTTP szabványnak. A W3-nak emlékeztetője van a Tartalom-elhelyezés itt olvasható.

A Tartalom-elhelyezés A válasz törzsének értékei vagy „inline” (a weboldal tartalmának megjelenítéséhez) vagy „attachment” (letölthető fájlhoz).

Ha nincs megadva, akkor az alapértelmezett Tartalom-elhelyezés „inline”.

Az opcionális fejlécparaméter használatával megadhatjuk a „sample.txt” fájlnevet.

Néhány böngésző azonnal letölti a fájlt a megadott fájlnévvel, mások pedig egy letöltési párbeszédpanelt jelenítenek meg, amely előre definiált értékünket tartalmazza.

A pontos intézkedés a böngészőtől függ.

3.4. Olvasás fájlból és írásból a kimeneti adatfolyamba

A fennmaradó kódsorokban a ServletContext a kérésből, és használja a fájl megszerzésére a „/WEB-INF/sample.txt” címen.

Használata HttpServletResponse#getOutputStream (), ezután leolvassuk az erőforrás bemeneti adatfolyamáról, és írunk a válaszra OutputStream.

Az általunk használt bájt tömb mérete tetszőleges. A memória mennyisége alapján eldönthetjük a méretet, amelyet ésszerű kiosztani az adatok továbbításához a InputStream hoz OutputStream; minél kisebb a nuber, annál több hurok; minél nagyobb a szám, annál nagyobb a memóriahasználat.

Ez a ciklus egészen addig folytatódik numByteRead 0, mivel ez a fájl végét jelzi.

3.5. Bezárás és öblítés

Folyam a példányokat használat után le kell zárni a jelenleg birtokában lévő erőforrások felszabadításához. Író a példányokat szintén ki kell öblíteni, hogy a megmaradt pufferelt bájtokat a rendeltetési helyre írja.

Használva erőforrásokkal próbálkozzon utasítás, az alkalmazás automatikusan Bezárás Bármi Automatikusan zárható részeként definiált példány próbáld ki nyilatkozat. További információ az erőforrásokkal való próbálkozásról itt található.

Ezt a két módszert alkalmazzuk a memória felszabadítására, biztosítva, hogy az előkészített adatokat elküldjük az alkalmazásunkból.

3.6. A fájl letöltése

Miután minden a helyén van, készen állunk a Servlet futtatására.

Most, amikor meglátogatjuk a relatív végpontot "/Letöltés", böngészőnk megpróbálja letölteni a fájlt “simple.txt” néven.

4. Következtetés

Egy fájl letöltése egy Servletről egyszerű folyamat lesz. A folyamok használata lehetővé teszi számunkra az adatok bájtként történő továbbítását, és a médiatípusok tájékoztatják az ügyfél böngészőjét, hogy milyen típusú adatokra számíthat.

A böngésző feladata, hogy meghatározza a válasz kezelésének módját, azonban a Tartalom-elhelyezés fejléc.

A cikk összes kódja megtalálható a GitHubon.


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