W tym przykładzie dowiemy się o wysyłaniu i pobieraniu pliku przez JSP.
Plik wyjściowy to bardzo ważne operacje. Tutaj będziemy czytać i zapisywać plik za pomocą JSP.
Przesyłanie plików JSP
- Możemy przesyłać dowolne pliki za pomocą JSP.
- Może to być plik tekstowy, plik binarny, plik obrazu lub dowolny inny dokument.
- Tutaj w przypadku przesyłania plików zostanie użyta tylko metoda POST, a nie metoda GET.
- Atrybut Enctype powinien mieć wartość multipart / form-data.
Przykład: użycie akcji
W tym przykładzie przesyłamy plik przy użyciu obiektu IO
Action_file.jsp
<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%>Plik Guru Przesyłanie pliku Guru: Wybierz plik:
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. *"%>Przesyłanie pliku Guru <%Plik pliku;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 = new DiskFileItemFactory ();factory.setSizeThreshold (maxMemSize);factory.setRepository (nowy plik ("c: \\ temp"));ServletFileUpload upload = new ServletFileUpload (fabryka);upload.setSizeMax (maxFileSize);próbować{Lista fileItems = upload.parseRequest (żądanie);Iterator i = fileItems.iterator ();out.println ("");out.println ("");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 (plik);out.println ("Przesłana nazwa pliku: + ścieżka_pliku + nazwa_pliku + "
");}}out.println ("");out.println ("");} catch (Exception ex) {System.out.println (ex);}}jeszcze{out.println ("");out.println ("");out.println ("Nie przesłano żadnego pliku
");out.println ("");out.println ("");}%>
Wyjaśnienie kodu:
Action_file.jsp
Linia kodu 12-18: Tutaj tworzymy formularz z polem pliku, który załaduje plik na serwer, a akcja zostanie przekazana do action_file_upload.jsp
Action_file_upload.jsp
Code Line 20: Tutaj podajemy ścieżkę do pliku do określonej ścieżki
Code Line 23-38: Tutaj sprawdzamy, czy typ zawartości to multipart / form-data. W takim przypadku zawartość jest typu pliku i jest odczytywana. Po odczytaniu pliku jest on zapisywany do pliku tymczasowego, a następnie plik tymczasowy jest konwertowany do pliku głównego.
Po wykonaniu powyższego kodu otrzymasz następujące dane wyjściowe
Wynik:
Wgrywamy plik za pomocą opcji przycisk wyboru pliku, a przycisk wgraj plik załaduje plik na serwer pod wskazaną ścieżkę.
Przykład: korzystanie z operacji JSP
W tym przykładzie zamierzamy przesłać plik przy użyciu operacji JSP.
Przyjmiemy formularz, który będzie miał przycisk „prześlij”, a po kliknięciu przycisku wysyłania plik zostanie przesłany.
Uploading_1.jsp
<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%>Przesyłanie pliku przez guru Plik:
Wyjaśnienie kodu:
Linia kodu 11-12: Tutaj bierzemy formularz, który ma akcję na serwlecie guru_upload, który przejdzie przez metodę POST. Tutaj również szyfrujemy np. Atrybut, który określa, w jaki sposób dane formularza mają być kodowane i wysyłane na serwer i jest używany tylko z metodą POST. Tutaj ustawiamy jako dane wieloczęściowe / formularze, które są przeznaczone dla pliku (ponieważ dane będą duże).
Linia kodu 13: Tutaj określamy element guru_file z plikiem typu i podajemy rozmiar 50.
Linia kodu 15: Jest to przycisk typu przesyłania z nazwą „Prześlij”, za pomocą którego zostanie wywołany serwlet akcji i żądanie zostanie przetworzone w nim, a plik zostanie odczytany i zapisany w serwlecie.
Guru_upload.java
pakiet 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 rozszerza HttpServlet {prywatne statyczne końcowe długie serialVersionUID = 1L;public guru_upload () {Wspaniały();// TODO Automatycznie wygenerowany kod konstruktora}protected void doPost (żądanie HttpServletRequest, odpowiedź HttpServletResponse) throws ServletException, IOException {if (ServletFileUpload.isMultipartContent (request)) {próbować {Listmultiparts = new ServletFileUpload (new DiskFileItemFactory ()). ParseRequest (request);for (element FileItem: multiparts) {if (! item.isFormField ()) {Nazwa ciągu = nowy Plik (item.getName ()). GetName ();item.write (new File ("c: / guru / upload" + File.separator + name));}}// Plik został pomyślnie przesłanyrequest.setAttribute ("gurumessage", "Plik przesłany pomyślnie");} catch (Exception ex) {request.setAttribute ("gurumessage", "Przesyłanie pliku nie powiodło się z powodu" + ex);}}jeszcze{request.setAttribute ("gurumessage", "Nie znaleziono pliku");}request.getRequestDispatcher ("/ result.jsp"). forward (żądanie, odpowiedź);}}
Wyjaśnienie kodu:
Linia kodu 12-14: Tutaj będziemy musieli zaimportować bibliotekę org.apache.commons do konfiguracji kodu. Będziemy musieli zaimportować klasę fileupload z biblioteki org.apache.commons.
Linia kodu 23: Mamy tutaj metodę doPost (), która zostanie wywołana podczas przekazywania metody POST w JSP i będzie żądać i odpowiadać na obiekty jako parametry
Linia kodu 26: Tutaj tworzymy obiekt klasy ServletFileUpload z pakietu fileUpload z biblioteki org.apache.commons, który sprawdzi, czy w JSP są jakieś obiekty plików. Jeśli jakikolwiek zostanie znaleziony, ten obiekt pliku zostanie pobrany z żądania.
Linia kodu 27-32: Będziemy iterować liczbę plików, sprawdzając, ile elementów pliku znajduje się w obiekcie wieloczęściowym, który jest obiektem listy (jeśli załadujemy więcej niż jeden plik) i zapiszemy go do folderu c: / guru / upload z podana nazwa pliku. Zapisujemy plik metodą write obiektu fileobject do wspomnianego folderu.
Linia kodu 34: Jeśli nie ma wyjątku, ustawiamy atrybut w żądaniu jako gurumessage o wartości "Plik został przesłany pomyślnie".
Wiersz kodu 35-36: Jeśli wystąpi wyjątek, ustawia się komunikat „Przesyłanie pliku nie powiodło się”
Linia kodu 40: jeśli nie znaleziono pliku, ustaw komunikat jako „Nie znaleziono pliku”
Linia kodu 42: Przekazywanie żądania przy użyciu obiektu requestdispatcher do result.jsp z obiektami żądania i odpowiedzi.
Result.jsp
<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%>Wynik guru <% String msg = (String) request.getAttribute ("wiadomość");out.println (msg);%>
Wyjaśnienie kodu:
Linia kodu 10: Tutaj pobieramy atrybut z obiektu żądania o wartości gurumessage do obiektu typu string.
Code Line11: Tutaj drukujemy tę wiadomość.
Kiedy wykonujemy powyższy kod, otrzymujemy następujące dane wyjściowe
Wynik:
Otrzymujemy formularz, w którym znajdują się pola do wyboru pliku z katalogu. Po wybraniu pliku musimy kliknąć przycisk przesyłania.
Po kliknięciu przycisku przesyłania otrzymujemy komunikat, że plik został pomyślnie przesłany.
Na poniższym diagramie widzimy, że plik został przesłany do folderu c: / guru / upload.
Pobieranie pliku:
W tym przykładzie pobieramy plik z katalogu, klikając przycisk.
Pobieranie_1.jsp
<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%>Pobieranie przykładu guru Guru Pobieranie pliku Pobierz tutaj !!!
Wyjaśnienie kodu:
Linia kodu 10: Tutaj podaliśmy link do pobrania pliku z folderu c: / guru / upload przy użyciu serwletu guru_download.
Guru_download.java
pakiet 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;/ *** Klasa implementacji serwletu guru_download* /public class guru_download rozszerza HttpServlet {prywatne statyczne końcowe długie serialVersionUID = 1L;protected void doGet (żądanie HttpServletRequest, odpowiedź HttpServletResponse) 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 ("Dyspozycja zawartości", "załącznik; nazwa_pliku = \" "+ gurufile + "\" ");FileInputStream fileInputStream = nowy FileInputStream (gurupath+ gurufile);int i;while ((i = fileInputStream.read ())! = -1) {out.write (i);}fileInputStream.close ();out.close ();}/ *** @see HttpServlet # doPost (żądanie HttpServletRequest, odpowiedź HttpServletResponse)* /protected void doPost (żądanie HttpServletRequest, odpowiedź HttpServletResponse) throws ServletException, IOException {// TODO Automatycznie wygenerowany kod pośredniczący metody}}
Wyjaśnienie kodu:
Linia kodu 3-5: Tutaj importujemy FileInputStream, IO Exception i PrintWriter z pakietu java.io.
Linia kodu 15: Definiujemy serwlet guru_download, który rozszerza HttpServlet.
Linia kodu 18: Tak jak zdefiniowaliśmy href, który będzie zawarty w adresie URL, więc metoda GET zostanie przetworzona (doGet zostanie wywołana w serwlecie), która zawiera również obiekty żądań i odpowiedzi.
Code Line 19-20: Ustawiamy typ zawartości w obiekcie odpowiedzi, a także otrzymujemy obiekt pisarza z odpowiedzi.
Code Line 21-22: Definiowanie zmiennej jako gurufile jako wartość test.txt i gurupath jako c: / guru / upload /
Linia kodu 23-25: Ustawiamy typ zawartości za pomocą obiektu odpowiedzi i używamy metody setHeader, która ustawia nagłówek w obiekcie odpowiedzi jako nazwę przesłanego pliku.
Linia kodu 27-28: Tworzymy FileInputStream, w którym dodamy gurupath + gurufile.
Linia kodu 31-33: Tutaj zrobiliśmy pętlę while, która będzie działać do momentu odczytania pliku, stąd warunek podaliśmy jako! = -1. W tym stanie piszemy używając obiektu printwriter out.
Po wykonaniu powyższego kodu otrzymasz następujące dane wyjściowe
Wynik:
Wynik:
Musimy kliknąć download_1.jsp, otrzymamy hiperłącze w postaci „Pobierz tutaj”. Po kliknięciu tego pliku hiperłącza zostanie on pobrany do systemu.
Podsumowanie:
- Dowiedzieliśmy się o formularzu rejestracyjnym, aby zarejestrować się w dowolnej aplikacji
- Dowiedz się więcej o tym, jak działają formularze logowania i wylogowania.
- Dowiedziałem się również o wysyłaniu i pobieraniu pliku przez JSP.