JSP fájl feltöltése és letöltése
Ebben a példában megtudjuk, hogyan lehet fájlokat feltölteni és letölteni JSP-n keresztül.
A fájlbeviteli kimenet nagyon fontos művelet. Itt egy fájlt fogunk olvasni és írni JSP használatával.
JSP fájl feltöltése
- JSP használatával bármilyen fájlt feltölthetünk.
- Ez lehet szövegfájl, bináris fájl, képfájl vagy bármilyen más dokumentum.
- Itt fájlfeltöltés esetén csak a POST metódus kerül felhasználásra, a GET módszer nem.
- Az Enctype attribútumot multipart/form-data értékre kell állítani.
Példa: Művelet használata
Ebben a példában IO objektum használatával töltünk fel egy fájlt
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>
A kód magyarázata:
Action_file.jsp
12-18. kódsor: Itt létrehozunk egy űrlapot fájl mezővel, amely feltölti a fájlt a szerverre, és a művelet átkerül az action_file_upload.jsp fájlra.
Action_file_upload.jsp
20. kódsor: Itt megadjuk a fájl elérési útját egy adott elérési úthoz
23-38. kódsor: Itt ellenőrizzük, hogy a tartalomtípus multipart/form-data-e. Ha ez a helyzet, akkor a tartalom fájl típusú, és beolvasásra kerül. A fájl beolvasása után az ideiglenes fájlba kerül, majd az ideiglenes fájl a fő fájllá konvertálódik.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja
output:
A fájlt a Fájl kiválasztása gombbal töltjük fel, és a Fájl feltöltése gombbal a fájl feltöltődik a szerverre a megadott elérési útra.
Példa: JSP-műveletek használata
Ebben a példában JSP-műveletekkel fogunk feltölteni egy fájlt. Elveszünk egy űrlapot, amelyen a „feltöltés” gomb található, és amikor a feltöltés gombra kattint, akkor a fájl feltöltésre kerül.
Feltöltés_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>
A kód magyarázata:
11-12. kódsor: Itt egy olyan űrlapot veszünk fel, amely a guru_upload servlet-re vonatkozik, amely egy POST metóduson megy keresztül. Ezenkívül itt az enctype ie attribútumot is megadjuk, amely meghatározza, hogyan kell az űrlapadatokat kódolni és elküldeni a szervernek, és csak POST metódussal használható. Itt többrészes/forma-adatként állítjuk be, ami a fájlhoz tartozik (mivel az adatok nagyok lesznek).
13. kódsor: Itt adjuk meg a guru_file elemet fájl típussal, és a méretet 50-re adjuk meg.
15. kódsor: Ez egy „Feltöltés” nevű küldés típusú gomb, amelyen keresztül a műveleti szervlet meghívódik, és a kérés ebbe kerül feldolgozásra, a fájl beolvasása és írása a szervletbe.
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);
}
}
A kód magyarázata:
12-14. kódsor: Itt importálnunk kell az org.apache.commons könyvtárat a kód konfigurációjába. Importálnunk kell a fileupload osztályt az org.apache.commons könyvtárból.
23. kódsor: Itt van doPost() metódus, amelyet akkor hívunk meg, amikor a POST metódust adjuk át a JSP-ben, és paramétereiként objektumokat kér és válaszol
26. kódsor: Itt létrehozunk egy ServletFileUpload osztályú objektumot az org.apache.commons könyvtár fileUpload csomagjából, amely ellenőrzi, hogy vannak-e fájlobjektumok a JSP-ben. Ha talál ilyet, akkor az adott fájlobjektum lekerül a kérésből.
27-32. kódsor: A fájlok számát úgy iteráljuk, hogy ellenőrizzük, hány fájlelem található a többrészes objektumban, amely egy listaobjektum (ha több fájlt töltünk fel), és elmentjük a c:/guru/upload mappába a megadott fájlnévvel. . A fájlt a fájlobjektum írási módszerével írjuk az említett mappába.
34. kódsor: Ha nincs kivétel, akkor a kérésben lévő attribútumot gurumessage-ként állítjuk be „Fájl sikeresen feltöltve” értékkel.
35-36. kódsor: Ha kivétel történik, állítsa be a „Fájl feltöltése sikertelen” üzenetet.
40. kódsor: Ha a fájl nem található, állítsa be az üzenetet a „Nem található fájl”
42. kódsor: Kérelem továbbítása requestdispatcher objektummal a result.jsp fájlba kérés és válasz objektumokkal.
Eredmény.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>
A kód magyarázata:
10. kódsor: Itt az attribútumot a gurumessage értékkel rendelkező request objektumból egy string objektumba kapjuk.
11. kódsor: Itt nyomtatjuk ki ezt az üzenetet.
Amikor végrehajtjuk a fenti kódot, a következő kimenetet kapjuk
output:
Kapunk egy űrlapot, amelyben mezők találhatók a fájl kiválasztásához a könyvtárból. A fájl kiválasztása után a feltöltés gombra kell kattintanunk.
Miután a feltöltés gombra kattintott, üzenetet kapunk, hogy a fájl feltöltése sikeresen megtörtént.
Az alábbi diagramon láthatjuk, hogy a fájl a c:/guru/upload mappába került feltöltésre.
JSP fájl letöltése
Ebben a példában egy fájlt fogunk letölteni egy könyvtárból a gombra kattintva.
Letöltés_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>
A kód magyarázata:
10. kódsor: Itt adtunk egy hivatkozást a fájl letöltéséhez a c:/guru/upload mappából a guru_download servlet használatával.
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
}
}
A kód magyarázata:
3-5. kódsor: Itt importáljuk a FileInputStream , IO Exception és PrintWriter alkalmazást a java.io csomagból.
15. kódsor: Meghatározzuk a guru_letöltést szervlet amely kiterjeszti a HttpServletet.
18. kódsor: Ahogy definiáltunk egy href-et, amely az URL-be kerül, így a GET metódus feldolgozásra kerül (a doGet a servletben lesz meghívva), amely a kérés és válasz objektumokat is tartalmazza.
19-20. kódsor: Beállítjuk a tartalmat Írja be a válaszobjektumot, és lekéri az író objektumot is a válaszból.
21-22. kódsor: Változó meghatározása gurufileként test.txt értékként, gurupathként pedig c:/guru/upload/
23-25. kódsor: A tartalom típusát válaszobjektum segítségével állítjuk be, és a setHeader metódust használjuk, amely a feltöltött fájlnévként a válaszobjektum fejlécet állítja be.
27-28. kódsor: Létrehozzuk a FileInputStream-et, amelyben hozzáadjuk a gurupath+gurufile-t.
31-33. kódsor: Itt vettük a míg hurok amely a fájl beolvasásáig fut, ezért adtunk feltételt: != -1. Ebben az állapotban a printwriter object out használatával írunk.
Amikor végrehajtja a fenti kódot, a következő kimenetet kapja
output:
output:
A downloading_1.jsp-re kell kattintanunk, egy hiperhivatkozást kapunk, mint „Download Here”. Ha rákattint erre a hivatkozásfájlra, az letöltődik a rendszerbe.
Összegzésként
- Megtanultuk a regisztrációs űrlapot, amellyel bármilyen jelentkezésre lehet jelentkezni
- További információ a bejelentkezési és kijelentkezési űrlapok működéséről.
- Megtanulta továbbá a fájlok JSP-n keresztüli feltöltését és letöltését.





