Завантаження файлів JSP
У цьому прикладі ми збираємося дізнатися про завантаження та завантаження файлу через JSP.
Файл Вхідний вихід є дуже важливими операціями. Тут ми будемо читати та писати файл за допомогою JSP.
Завантаження файлу JSP
- Ми можемо завантажити будь-які файли за допомогою JSP.
- Це може бути текстовий файл, двійковий файл, файл зображення або будь-який інший документ.
- Тут у разі завантаження файлу буде використано лише метод POST, а не метод GET.
- Для атрибута enctype має бути встановлено multipart/form-data.
Приклад: Використання дії
У цьому прикладі ми завантажуємо файл за допомогою об’єкта IO
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>
Пояснення коду:
Action_file.jsp
Рядок коду 12-18: Тут ми створюємо форму з полем файлу, яке буде завантажувати файл на сервер і дія буде передана action_file_upload.jsp
Action_file_upload.jsp
Рядок коду 20: Тут ми надаємо шлях до файлу певному шляху
Рядок коду 23-38: Тут ми перевіряємо, чи є тип вмісту multipart/form-data. Якщо це так, то вміст має тип файлу, і його можна прочитати. Після читання файл записується у тимчасовий файл, а потім тимчасовий файл перетворюється на основний файл.
Коли ви виконуєте наведений вище код, ви отримуєте наступний результат
вихід:
Ми завантажуємо файл за допомогою кнопки «Вибрати файл», а кнопка «Завантажити файл» завантажить файл на сервер за вказаним шляхом.
Приклад: використання операцій JSP
У цьому прикладі ми збираємося завантажити файл за допомогою операцій JSP. Ми візьмемо форму з кнопкою «завантажити», і коли ви натиснете кнопку завантаження, файл буде завантажено.
Завантаження_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>
Пояснення коду:
Рядок коду 11-12: Тут ми беремо форму, яка виконує дію на сервлет guru_upload, який проходитиме через метод POST. Крім того, тут ми вводимо атрибут ie, який визначає, як дані форми мають кодуватися та надсилатися на сервер, і він використовується лише з методом POST. Тут ми встановлюємо multipart/form-data для файлу (оскільки дані будуть великими).
Рядок коду 13: Тут ми вказуємо елемент guru_file з типом file і розміром 50.
Рядок коду 15: Це кнопка типу надсилання з назвою «Завантажити», за допомогою якої буде викликано сервлет дій, і запит буде оброблено в нього, а файл читатиметься та записуватиметься в сервлет.
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);
}
}
Пояснення коду:
Рядок коду 12-14: Тут нам доведеться імпортувати бібліотеку org.apache.commons у конфігурацію коду. Нам доведеться імпортувати клас fileupload з бібліотеки org.apache.commons.
Рядок коду 23: Тут у нас є метод doPost(), який буде викликаний, оскільки ми передаємо метод POST у JSP, і він буде запитувати та відповідати об’єкти як його параметри
Рядок коду 26: Тут ми створюємо об’єкт класу ServletFileUpload із пакета fileUpload із бібліотеки org.apache.commons, який перевірятиме наявність файлових об’єктів у JSP. Якщо такі файли будуть знайдені, ці файлові об’єкти буде взято із запиту.
Рядок коду 27-32: Ми будемо повторювати кількість файлів, перевіряючи, скільки елементів файлу присутні в багатокомпонентному об’єкті, який є об’єктом списку (якщо ми завантажуємо більше одного файлу), і збережемо його в папці c:/guru/upload із вказаною назвою файлу . Ми записуємо файл за допомогою методу write об’єкта file у згадану папку.
Рядок коду 34: Якщо немає винятку, ми встановлюємо атрибут у запиті як gurumessage зі значенням «Файл завантажено успішно».
Рядок коду 35-36: Якщо виникає виняток, тоді встановлюється повідомлення «Помилка завантаження файлу»
Рядок коду 40: Якщо файл не знайдено, встановіть повідомлення як «Файл не знайдено»
Рядок коду 42: Пересилання запиту за допомогою об’єкта requestdispatcher у файл result.jsp із об’єктами запиту та відповіді.
Result.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>
Пояснення коду:
Рядок коду 10: Тут ми отримуємо атрибут із об’єкта запиту зі значенням gurumessage у рядковий об’єкт.
Рядок коду 11: Ось ми друкуємо це повідомлення.
Коли ми виконуємо наведений вище код, ми отримуємо наступний результат
вихід:
Отримуємо форму, в якій є поля для вибору файлу з каталогу. Після вибору файлу ми повинні натиснути кнопку завантаження.
Після натискання кнопки завантаження ми отримуємо повідомлення про те, що файл завантажено успішно.
На діаграмі нижче ми бачимо, що файл було завантажено в папку c:/guru/upload.
Завантаження файлу JSP
У цьому прикладі ми збираємося завантажити файл із каталогу, натиснувши кнопку.
Завантаження_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>
Пояснення коду:
Рядок коду 10: Тут ми надали посилання для завантаження файлу з папки c:/guru/upload за допомогою сервлета 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
}
}
Пояснення коду:
Рядок коду 3-5: Тут ми імпортуємо FileInputStream, IO Exception і PrintWriter із пакета java.io.
Рядок коду 15: Ми визначаємо guru_download сервлет який розширює HttpServlet.
Рядок коду 18: Оскільки ми визначили href, який буде вкладено в URL-адресу, тому метод GET буде оброблено (doGet буде викликано в сервлеті), який також містить об’єкти запиту та відповіді.
Рядок коду 19-20: Ми встановлюємо тип вмісту в об’єкті відповіді, а також отримуємо об’єкт запису з відповіді.
Рядок коду 21-22: Визначення змінної як gurufile як значення test.txt і gurupath як c:/guru/upload/
Рядок коду 23-25: Ми встановлюємо тип вмісту за допомогою об’єкта відповіді та використовуємо метод setHeader, який встановлює заголовок в об’єкт відповіді як назву файлу, який було завантажено.
Рядок коду 27-28: Ми створюємо FileInputStream, до якого ми додамо gurupath+gurufile.
Рядок коду 31-33: Тут ми взяли a поки петля який виконуватиметься, доки файл не буде прочитано, отже ми вказали умову як != -1. У цій умові ми пишемо за допомогою об’єкта printwriter out.
Коли ви виконаєте наведений вище код, ви отримаєте наступний результат
вихід:
вихід:
Нам потрібно натиснути downloading_1.jsp, і ми отримаємо гіперпосилання «Завантажити тут». Коли ви натискаєте на цей файл гіперпосилання, він завантажується в систему.
Резюме
- Ми дізналися про реєстраційну форму для реєстрації в будь-якому додатку
- Дізналися більше про те, як працюють форми входу та виходу.
- Також дізнався про завантаження та завантаження файлу через JSP.





