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

Prijenos JSP datoteke

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.

Prijenos datoteke koriลกtenjem JSP operacija

Nakon klika na gumb za prijenos dobivamo poruku da je datoteka uspjeลกno prenesena.

Prijenos datoteke koriลกtenjem JSP operacija

Na donjem dijagramu moลพemo vidjeti da je datoteka uฤitana u mapu c:/guru/upload.

Prijenos datoteke koriลกtenjem JSP operacija

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:

Preuzimanje datoteke

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.

Saลพmite ovu objavu uz: