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.