Prijenos i preuzimanje JSP datoteke
โก Pametni saลพetak
Prijenos i preuzimanje JSP datoteka su osnovne ulazne i izlazne operacije koje omoguฤuju web aplikaciji primanje datoteka od korisnika i njihovo vraฤanje. Ovaj resurs objaลกnjava oba toka koriลกtenjem JSP obrazaca za akcije, Apache Commons FileUploada i servlet klasa, s cjelovitim radnim kodom.

Prijenos JSP datoteke
- Moลพemo uฤitati bilo koje datoteke pomoฤu JSP-a.
- To moลพe biti tekstualna datoteka, binarna datoteka, slikovna datoteka ili bilo koji drugi dokument.
- Ovdje ฤe se u sluฤaju uฤitavanja datoteke koristiti samo POST metoda, a ne GET metoda.
- Enctype atribut bi trebao biti postavljen na multipart/form-data.
Primjer: Koriลกtenje akcije
U ovom primjeru uฤitavamo datoteku pomoฤu IO objekta.
Action_file.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File</title> </head> <body> <a>Guru File Upload:</a> Select file: <br /> <form action="action_file_upload.jsp" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
Action_file_upload.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.*,java.util.*, javax.servlet.*" %> <%@ page import="javax.servlet.http.*" %> <%@ page import="org.apache.commons.fileupload.*" %> <%@ page import="org.apache.commons.fileupload.disk.*" %> <%@ page import="org.apache.commons.fileupload.servlet.*" %> <%@ page import="org.apache.commons.io.output.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File Upload</title> </head> <body> <% File file ; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; String filePath = "E:/guru99/data"; String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(maxMemSize); factory.setRepository(new File("c:\\temp")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ List fileItems = upload.parseRequest(request); Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { String fieldName = fi.getFieldName(); String fileName = fi.getName(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); file = new File( filePath + "yourFileName") ; fi.write( file ) ; out.println("Uploaded Filename: " + filePath + fileName + "<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } }else{ out.println("<html>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); } %> </body> </html>
Objaลกnjenje koda:
Action_file.jsp
Code Redak 12-18: Ovdje stvaramo obrazac s poljem datoteke koje ฤe prenijeti datoteku na posluลพitelj, a akcija ฤe biti proslijeฤena na action_file_upload.jsp.
Action_file_upload.jsp
Code Redak 20: Ovdje dajemo putanju datoteke do odreฤene putanje.
Code Redak 23-38: Ovdje provjeravamo je li tip sadrลพaja multipart/form-data. Ako je to sluฤaj, tada je sadrลพaj tipa datoteke i ฤita se. Nakon ลกto je datoteka proฤitana, zapisuje se u privremenu datoteku, a zatim se privremena datoteka pretvara u glavnu datoteku.
Kada izvrลกite gornji kod, dobit ฤete sljedeฤi izlaz:
Izlaz:
Datoteku prenosimo pomoฤu opcije gumba za odabir datoteke, a gumb za prijenos datoteke prenijet ฤe datoteku na posluลพitelj na navedenu putanju.
Primjer: koriลกtenje JSP operacija
U ovom primjeru, prenijet ฤemo datoteku koristeฤi JSP operacije. Uzet ฤemo obrazac koji ฤe imati gumb "prenesi" i kada kliknete na gumb za prenesi, datoteka ฤe se prenijeti.
Prijenos_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Uploading File</title> </head> <body> File: <br /> <form action="guru_upload" method="post" enctype="multipart/form-data"> <input type="file" name="guru_file" size="50" /> <br /> <input type="submit" value="Upload" /> </form> </body> </html>
Objaลกnjenje koda:
Code Redak 11-12: Ovdje uzimamo obrazac koji ima akciju na servletu guru_upload, koja ฤe proฤi kroz POST metodu. Takoฤer, ovdje atribut enctype odreฤuje kako se podaci obrasca trebaju kodirati i slati na posluลพitelj, a koristi se samo s POST metodom. Ovdje ga postavljamo kao multipart/form-data, ลกto je za datoteku (jer ฤe podaci biti veliki).
Code Redak 13: Ovdje specificiramo element guru_file tipa file i dajemo veliฤinu 50.
Code Redak 15: Ovo je gumb tipa slanja s nazivom "Upload" (Prenesi), putem kojeg ฤe se pozvati servlet akcije i zahtjev ฤe se obraditi u njega, a datoteka ฤe se proฤitati i zapisati u servlet.
Guru_upload.java
package demotest; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class guru_upload extends HttpServlet { private static final long serialVersionUID = 1L; public guru_upload() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(ServletFileUpload.isMultipartContent(request)){ try { List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for(FileItem item : multiparts){ if(!item.isFormField()){ String name = new File(item.getName()).getName(); item.write( new File("c:/guru/upload" + File.separator + name)); } } //File uploaded successfully request.setAttribute("gurumessage", "File Uploaded Successfully"); } catch (Exception ex) { request.setAttribute("gurumessage", "File Upload Failed due to " + ex); } }else{ request.setAttribute("gurumessage","No File found"); } request.getRequestDispatcher("/result.jsp").forward(request, response); } }
Objaลกnjenje koda:
Code Redak 12-14: Ovdje ฤemo morati uvesti biblioteku org.apache.commons u konfiguraciju koda. Morat ฤemo uvesti klasu fileupload iz biblioteke org.apache.commons.
Code Redak 23: Ovdje imamo metodu doPost() koja ฤe se pozvati dok prosljeฤujemo POST metodu u JSP-u, a kao parametre ฤe uzimati objekte zahtjeva i odgovora.
Code Redak 26: Ovdje stvaramo objekt klase ServletFileUpload iz paketa fileUpload biblioteke org.apache.commons, koji ฤe provjeriti postoje li objekti datoteka u JSP-u. Ako se pronaฤu, ti ฤe se objekti datoteka uzeti iz zahtjeva.
Code Redak 27-32: Ponavljat ฤemo broj datoteka provjeravajuฤi koliko se stavki datoteke nalazi u objektu tipa multiparts, koji je objekt liste (ako prenesemo viลกe od jedne datoteke), i spremiti ga u mapu c:/guru/upload s navedenim nazivom datoteke. Datoteku zapisujemo pomoฤu metode write objekta datoteke u spomenutu mapu.
Code Redak 34: Ako nema iznimke, tada u zahtjevu postavljamo atribut kao gurumessage s vrijednoลกฤu โDatoteka uspjeลกno prenesenaโ.
Code Redak 35-36: Ako se dogodi iznimka, postavljamo poruku da โPrijenos datoteke nije uspioโ.
Code Redak 40: Ako datoteka nije pronaฤena, tada postavljamo poruku kao โDatoteka nije pronaฤenaโ.
Code Redak 42: Prosljeฤivanje zahtjeva pomoฤu objekta requestdispatcher na result.jsp s objektima request i response.
Rezultat.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Result</title> </head> <body> <% String msg = (String)request.getAttribute("message"); out.println(msg); %> </body> </html>
Objaลกnjenje koda:
Code Redak 10: Ovdje dobivamo atribut iz objekta zahtjeva s vrijednoลกฤu gurumessage u objekt string.
Code Redak 11: Ovdje ispisujemo tu poruku.
Kada izvrลกimo gornji kod, dobivamo sljedeฤi izlaz:
Izlaz:
Dobivamo obrazac u kojem postoje polja za odabir datoteke iz direktorija. Nakon ลกto je datoteka odabrana, moramo kliknuti na gumb za prijenos.
Nakon ลกto kliknemo na gumb za prijenos, dobivamo poruku da je datoteka uspjeลกno prenesena.
Na donjem dijagramu moลพemo vidjeti da je datoteka prenesena u mapu c:/guru/upload.
Preuzimanje JSP datoteke
U ovom primjeru ฤemo preuzeti datoteku iz direktorija klikom na gumb.
Preuzimanje_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Downloading Guru Example</title> </head> <body> Guru Downloading File<a href="guru_download">Download here!!!</a> </body> </html>
Objaลกnjenje koda:
Code Redak 10: Ovdje smo dali poveznicu za preuzimanje datoteke iz mape c:/guru/upload pomoฤu servleta guru_download.
Guru_download.java
package demotest; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_download */ public class guru_download extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String gurufile = "test.txt"; String gurupath = "c:/guru/upload/"; response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + gurufile + "\""); FileInputStream fileInputStream = new FileInputStream(gurupath + gurufile); int i; while ((i = fileInputStream.read()) != -1) { out.write(i); } fileInputStream.close(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Objaลกnjenje koda:
Code Redak 3-5: Ovdje uvozimo FileInputStream, IOException i Print.Writer iz paketa java.io.
Code Redak 15: Definiramo guru_download servlet koji proลกiruje HttpServlet.
Code Redak 18: Kao ลกto smo definirali href, koji ฤe biti zatvoren u URL, pa ฤe se obraditi GET metoda (doGet ฤe se pozvati u servletu), koja takoฤer obuhvaฤa objekte zahtjeva i odgovora.
Code Redak 19-20: Postavljamo tip sadrลพaja u objektu odgovora i takoฤer dobivamo objekt pisanja iz odgovora.
Code Redak 21-22: Definiranje varijable kao gurufile s vrijednoลกฤu test.txt i gurupath kao c:/guru/upload/.
Code Redak 23-25: Tip sadrลพaja postavljamo pomoฤu objekta odgovora i koristimo metodu setHeader koja postavlja zaglavlje u objekt odgovora kao naziv datoteke koja je prenesena.
Code Redak 27-28: Izraฤujemo FileInputStream u koji ฤemo dodati gurupath+gurufile.
Code Redak 31-33: Ovdje smo uzeli a dok petlje koji ฤe se izvrลกavati dok se datoteka ne proฤita, stoga smo uvjet zadali kao != -1. U ovom uvjetu piลกemo pomoฤu objekta printwriter.
Kada izvrลกite gornji kod, dobit ฤete sljedeฤi izlaz:
Izlaz:
Moramo kliknuti na downloading_1.jsp i dobit ฤemo hipervezu kao "Preuzmi ovdje". Kada kliknete na ovu datoteku hiperveze, ona ฤe se preuzeti u sustav.





