JSP-faili üleslaadimine ja allalaadimine
Selles näites käsitleme faili üles- ja allalaadimist JSP kaudu.
Faili sisendväljund on väga olulised toimingud. Siin loeme ja kirjutame faili JSP abil.
JSP-faili üleslaadimine
- Saame JSP-ga üles laadida mis tahes faile.
- See võib olla tekstifail, binaarfail, pildifail või mõni muu dokument.
- Siin kasutatakse failide üleslaadimisel ainult POST-meetodit, mitte GET-meetodit.
- Enctype atribuudiks tuleks määrata multipart/form-data.
Näide: toimingu kasutamine
Selles näites laadime faili üles IO-objekti abil
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>
Koodi selgitus:
Action_file.jsp
Koodirida 12–18: Siin loome failiväljaga vormi, mis laadib faili serverisse ja toiming edastatakse aadressile action_file_upload.jsp
Action_file_upload.jsp
Koodirida 20: Siin anname faili tee konkreetsele teele
Koodirida 23–38: Siin kontrollime, kas sisutüüp on multipart/form-data. Kui see on nii, siis on sisu failitüüpi ja seda loetakse. Pärast faili lugemist kirjutatakse see ajutisse faili ja seejärel teisendatakse ajutine fail põhifailiks.
Kui käivitate ülaltoodud koodi, saate järgmise väljundi
Väljund:
Laadime faili üles, kasutades nuppu Vali fail ja faili üleslaadimise nupp laadib faili serverisse üles antud teele.
Näide: JSP-operatsioonide kasutamine
Selles näites laadime faili üles JSP-toimingute abil. Me võtame vormi, millel on nupp "Laadi üles" ja kui klõpsate üleslaadimisnupul, laaditakse fail üles.
Üleslaadimine_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>
Koodi selgitus:
Koodirida 11–12: Siin võtame vormi, millel on toiming servleti guru_upload jaoks, mis läbib meetodi POST. Samuti kasutame siin atribuuti enctype ie, mis määrab, kuidas vormiandmeid tuleb kodeerida ja serverisse saata ning seda kasutatakse ainult POST-meetodiga. Siin seadistame faili mitmeosalise/vormiandmetena (kuna andmed on suured).
Koodirida 13: Siin määrame elemendi guru_file failitüübiga ja anname suuruseks 50.
Koodirida 15: See on esitamistüübi nupp nimega "Laadi üles", mille kaudu kutsutakse välja toiminguservlet ja töödeldakse päring sellesse ning faili loetakse ja kirjutatakse servletti.
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);
}
}
Koodi selgitus:
Koodirida 12–14: Siin peame importima teegi org.apache.commons koodi konfiguratsiooni. Peame importima faili üleslaadimise klassi teegist org.apache.commons.
Koodirida 23: Siin on meil meetod doPost(), mida kutsutakse välja siis, kui me edastame JSP-s POST-meetodi ning see küsib ja vastab parameetritena objekte
Koodirida 26: Siin loome org.apache.commonsi teegist fileUpload paketist ServletFileUpload klassi objekti, mis kontrollib, kas JSP-s on failiobjekte. Kui mõni leitakse, võetakse need failiobjektid päringust.
Koodirida 27–32: Kordame failide arvu, kontrollides mitu failiüksust on mitmeosalises objektis, mis on loendiobjekt (kui laadime üles rohkem kui ühe faili) ja salvestame selle antud failinimega kausta c:/guru/upload . Kirjutame faili failiobjekti kirjutamismeetodil mainitud kausta.
Koodirida 34: Kui erandit pole, siis määrame päringu atribuudi gurumissage'iks väärtusega "Fail on edukalt üles laaditud".
Koodirida 35–36: Kui ilmneb erand, määrake teade "Faili üleslaadimine ebaõnnestus"
Koodirida 40: Kui faili ei leitud, määrake teade "Faili ei leitud"
Koodirida 42: Päringu edastamine objekti requestdispatcher abil päringu- ja vastuseobjektidega faili result.jsp.
Tulemus.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>
Koodi selgitus:
Koodirida 10: Siin saame atribuudi päringuobjektist koos väärtusega gurumessage stringobjektiks.
Koodirida 11: Siin me trükime selle sõnumi.
Ülaltoodud koodi käivitamisel saame järgmise väljundi
Väljund:
Saame vormi, kus on väljad faili valimiseks kataloogist. Kui fail on valitud, peame klõpsama üleslaadimisnupul.
Kui klõpsate üleslaadimisnupul, saame teate, et fail on edukalt üles laaditud.
Alloleval diagrammil näeme, et fail laaditi üles kausta c:/guru/upload.
JSP-faili allalaadimine
Selles näites laadime faili kataloogist alla, klõpsates nuppu.
Allalaadimine_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>
Koodi selgitus:
Koodirida 10: Siin oleme andnud lingi faili allalaadimiseks kaustast c:/guru/upload, kasutades servleti 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
}
}
Koodi selgitus:
Koodirida 3–5: Siin impordime java.io paketist FileInputStream , IO Exception ja PrintWriter.
Koodirida 15: Me määratleme guru_download servett mis laiendab HttpServleti.
Koodirida 18: Nagu oleme määratlenud href, mis lisatakse URL-i, töödeldakse GET-meetodit (servletis kutsutakse doGet), mis hõlmab ka päringu ja vastuse objekte.
Koodirida 19–20: Seadistame sisu Tüüp vastuseobjektis ja saame vastusest ka kirjutajaobjekti.
Koodirida 21–22: Muutuja määratlemine gurufile'ina väärtusena test.txt ja gurupath kui c:/guru/upload/
Koodirida 23–25: Sisutüübi määrame vastuseobjekti abil ja kasutame meetodit setHeader, mis määrab vastuseobjekti päise üleslaaditud failinimeks.
Koodirida 27–28: Loome FileInputStreami, kuhu lisame gurupath+gurufile.
Koodirida 31–33: Siin oleme võtnud a samas silmus mis töötab kuni faili lugemiseni, seega oleme andnud tingimuse != -1. Selles olekus kirjutame kasutades printwriter object out.
Kui käivitate ülaltoodud koodi, saate järgmise väljundi
Väljund:
Väljund:
Peame klõpsama failil downloading_1.jsp, saame hüperlingi nimega "Laadi alla siit". Kui klõpsate sellel hüperlingifailil, laaditakse see süsteemi alla.
kokkuvõte
- Oleme õppinud kasutama registreerimisvormi, et registreerida mis tahes taotlust
- Lisateavet sisse- ja väljalogimisvormide toimimise kohta.
- Õppis ka JSP kaudu faili üles- ja allalaadimise kohta.





