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.