Prijenos i preuzimanje JSP datoteke
U ovom primjeru nauฤit ฤemo o uฤitavanju i preuzimanju datoteke putem JSP-a.
File Input output su vrlo vaลพne operacije. Ovdje ฤemo ฤitati i pisati datoteku koristeฤi JSP.
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
Redak koda 12-18: Ovdje stvaramo obrazac s poljem datoteke, koji ฤe uฤitati datoteku na posluลพitelj, a radnja ฤe biti proslijeฤena na action_file_upload.jsp
Action_file_upload.jsp
Redak koda 20: Ovdje dajemo put datoteke do odreฤenog puta
Redak koda 23-38: Ovdje provjeravamo je li vrsta sadrลพaja multipart/form-data. Ako je to sluฤaj, onda je sadrลพaj tipa datoteke i ฤita se. Nakon ลกto se datoteka proฤita, 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:
Uฤitavamo datoteku pomoฤu opcije odabira gumba datoteke, a gumb za uฤitavanje datoteke ฤe uฤitati datoteku na posluลพitelj na stazu koja je navedena.
Primjer: koriลกtenje JSP operacija
U ovom primjeru ฤemo prenijeti datoteku pomoฤu JSP operacija. Uzet ฤemo obrazac koji ฤe imati gumb "upload" i kada kliknete na gumb za prijenos, datoteka ฤe biti uฤitana.
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:
Redak koda 11-12: Ovdje uzimamo obrazac koji ima radnju na servlet guru_upload koji ฤe proฤi kroz metodu POST. Takoฤer, ovdje enctype ie atribut koji specificira kako se podaci obrasca trebaju kodirati i poslati posluลพitelju i koristi se samo s POST metodom. Ovdje postavljamo kao multipart/form-data koji je za datoteku (jer ฤe podaci biti veliki).
Redak koda 13: Ovdje specificiramo guru_file element s tipom file i dajemo veliฤinu 50.
Redak koda 15: Ovo je tipka za slanje s nazivom "Uฤitaj" preko koje ฤe se pozvati akcijski servlet i zahtjev ฤe se obraditi u to, a datoteka ฤe se ฤitati i pisati 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:
Redak koda 12-14: Ovdje ฤemo morati uvesti biblioteku org.apache.commons u konfiguraciju koda. Morat ฤemo uvesti klasu za uฤitavanje datoteka iz knjiลพnice org.apache.commons.
Redak koda 23: Ovdje imamo doPost() metodu, koja ฤe biti pozvana dok prosljeฤujemo POST metodu u JSP-u i ona ฤe zahtijevati i odgovarati objekte kao svoje parametre
Redak koda 26: Ovdje stvaramo objekt klase ServletFileUpload iz fileUpload paketa iz biblioteke org.apache.commons koji ฤe provjeriti postoje li objekti datoteka u JSP-u. Ako se bilo koji pronaฤe, taj objekt datoteke bit ฤe preuzet iz zahtjeva.
Redak koda 27-32: Ponavljat ฤemo broj datoteka provjeravajuฤi koliko je stavki datoteke prisutno u viลกedijelnom objektu koji je objekt popisa (ako uฤitamo viลกe od jedne datoteke) i spremit ฤemo je u mapu c:/guru/upload s navedenim nazivom datoteke . Zapisujemo datoteku koristeฤi metodu pisanja fileobject-a u mapu koja je spomenuta.
Redak koda 34: Ako nema iznimke, tada postavljamo atribut u zahtjevu kao gurumessage s vrijednoลกฤu "Datoteka je uspjeลกno uฤitana".
Redak koda 35-36: Ako doฤe do iznimke, postavlja se poruka da "Prijenos datoteke nije uspio"
Redak koda 40: Ako datoteka nije pronaฤena, postavlja se poruka kao "Datoteka nije pronaฤena"
Redak koda 42: Prosljeฤivanje zahtjeva pomoฤu objekta requestdispatcher u result.jsp s objektima zahtjeva i odgovora.
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:
Redak koda 10: Ovdje dobivamo atribut iz objekta zahtjeva s vrijednoลกฤu gurumessage u objekt niza.
Kodna linija 11: Ovdje ispisujemo tu poruku.
Kada izvrลกimo gornji kod, dobivamo sljedeฤi izlaz
Izlaz:
Dobivamo formu u kojoj postoje polja za odabir datoteke iz direktorija. Nakon ลกto je datoteka odabrana tada moramo kliknuti na gumb za prijenos.
Nakon klika na gumb za prijenos dobivamo poruku da je datoteka uspjeลกno prenesena.
Na donjem dijagramu moลพemo vidjeti da je datoteka uฤitana 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:
Redak koda 10: Ovdje smo dali poveznicu za preuzimanje datoteke iz mape c:/guru/upload koristeฤi servlet 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:
Redak koda 3-5: Ovdje uvozimo FileInputStream, IO Exception i PrintWriter iz paketa java.io.
Redak koda 15: Definiramo guru_download servlet koji proลกiruje HttpServlet.
Redak koda 18: Kako smo definirali href, koji ฤe biti priloลพen u URL-u, tako ฤe GET metoda biti obraฤena (doGet ฤe biti pozvan u servletu) koja takoฤer ukljuฤuje objekte zahtjeva i odgovora.
Redak koda 19-20: Postavljamo tip sadrลพaja u objektu odgovora i takoฤer dobivamo objekt pisca iz odgovora.
Redak koda 21-22: Definiranje varijable kao gurufile kao value test.txt i gurupath kao c:/guru/upload/
Redak koda 23-25: Vrstu sadrลพaja postavljamo pomoฤu objekta odgovora i koristimo metodu setHeader koja postavlja zaglavlje u objekt odgovora kao naziv datoteke koja je prenesena.
Redak koda 27-28: Kreiramo FileInputStream u koji ฤemo dodati gurupath+gurufile.
Redak koda 31-33: Ovdje smo uzeli a dok petlje koji ฤe se izvoditi dok se datoteka ne proฤita, stoga smo dali uvjet kao != -1. U ovom stanju piลกemo koriลกtenjem printwriter objekta out.
Kada izvrลกite gornji kod, dobit ฤete sljedeฤi izlaz
Izlaz:
Izlaz:
Moramo kliknuti downloading_1.jsp i dobit ฤemo hipervezu kao "Preuzmi ovdje". Kada kliknete na ovu datoteku hiperveze, ona ฤe se preuzeti u sustav.
Rezime
- Nauฤili smo o obrascu za registraciju za bilo koju aplikaciju
- Nauฤili smo viลกe o tome kako funkcioniraju obrasci za prijavu i odjavu.
- Takoฤer nauฤili o uฤitavanju i preuzimanju datoteke putem JSP-a.





