Secara umum, saat menggunakan servlet untuk memproses elemen formulir, elemen formulir adalah semua teks sederhana, dan servlet mudah diproses dengan request.getParameter (). Tetapi ketika formulir berisi lebih dari sekadar beberapa teks sederhana, seperti mengunggah bidang file, itu masih merupakan tugas yang sangat rumit untuk menguraikan setiap sub-bagian dari bentuk komposit langsung dari objek HttpservletRequest.
Untuk menyederhanakan pemrosesan data jenis "multipart/form-data", komponen yang sesuai dapat digunakan untuk pemrosesan, yang dapat menghemat banyak pengkodean, mendukung penggunaan kembali, dan juga sangat efisien.
Ada juga beberapa komponen Java: Fileupload, Smartupload, COS, dll. Artikel ini akan menjelaskannya dengan fileupload Apache.
Untuk menggunakan Fileupload, Anda harus terlebih dahulu mengunduh komponen yang sesuai:
1. Paket FileUpload: http://commons.apache.org/fileupload/
2.OIO Paket: http://commons.apache.org/io/
Setelah mengunduh, unzip paket zip dan salin commons-fileupload-1.2.1.jar dan commons-io-1.4.jar ke webapp/web-inf/lib Tomcat.
1. Halaman formulir (untuk menentukan enctype = "multipart/form -data" dari formulir) - unggah.html
<html><head><title>Upload</title></head><body > <form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA" action="upload"> <table> <tr> <td><div align="right">User Name:</div></td> <td><input type="text" name="username" size="30"/> </td> </tr> <tr> <td> <div align = "right"> Unggah file1: </div> </td> <td> <input type = "file" name = "file1" size = "30"/> </td> </tr> <td> <Div Align = "Right"> unggah: "> </ttr> <td> <td> <td> <td> <td> <td> <td> <td> <td> <Div Align =" Right "> unggahan:" Name = "File2" size = "30"/> </td> </tr> <tr> <td> <input type = "kirim" name = "kirim" value = "unggah"> </td> <td> <input type = "reset" name = "reset" value = "reset"> </td> </tr> </tabel> form = "reset"> </td> </tr> </tabel> form "reset =" reset "> </td> </tr> </tabel> </form house/reset"> </td> </tr> </tabel> </form house </form </form HIT/</td> </tr> </tabel> </form house> </tder> </td> </tran> </tabel> </form HIT//</td> </tr> </tode>
2. Formulir Pemrosesan Servlet - UploadServlet
paket mypack; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import org.apache.commons.fileupload. UnggahanServlet memperluas httpservlet {private string filePath; // direktori di mana file yang diunggah adalah string pribadi tempfilePath; // direktori di mana file sementara disimpan public void init (servletconfig config) melempar servletException {super.init (config); filepath = config.getInitparameter ("filepath"); tempfilePath = config.getInitparameter ("tempfilePath"); filepath = getServletContext (). getRealPath (filepath); tempfilePath = getServletContext (). getRealpath (tempfilePath); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/polos"); // Kirim Badan Respons ke klien printwriter outnet = response.getWriter (); Coba {// Buat pabrik FileItem berbasis hard disk DiskFileItemFactory factory = new DiskFileItemFactory (); // Atur ukuran buffer yang digunakan untuk menulis data ke hard disk, berikut adalah 4K factory.setsizeThreshold (4*1024); // Atur pabrik direktori sementara. // Buat prosesor unggahan file servletfileupload unggah = servletfileupload baru (pabrik); // Atur ukuran maksimum file yang diizinkan untuk diunggah, berikut adalah 4m unggahan.setsizeMax (4*1024*1024); Daftar / * FileItem * / item = unggah.ParSequest (permintaan); Iterator iter = items.iterator (); while (iter.hasnext ()) {fileItem item = (fileItem) iter.next (); if (item.isFormField ()) {ProcessFormField (item, outnet); // menangani bidang formulir biasa} else {ProcessuploadedFile (item, outnet); // menangani file unggah}} outnet.close (); } catch (Exception e) {lempar servletException baru (e); }} private void processFormField (item fileItem, printwriter outnet) {string name = item.getFieldName (); Nilai string = item.getString (); outnet.println (name+":"+value+"/r/n"); } private void ProcessUploadedFile (item fileItem, printwriter outnet) melempar Exception {string filename = item.getName (); int index = filename.LastIndexOf ("//"); filename = filename.substring (indeks+1, filename.length ()); long filessize = item.getSize (); if (filename.equals ("") && filesize == 0) return; File unggahedfile = file baru (filepath+"/"+fileName); item.write (unggahedfile); outnet.println (nama file+"disimpan."); outnet.println ("Ukuran"+fileName+"adalah"+fileze+"/r/n"); }} Servlet ini dikonfigurasi dalam web.xml sebagai:
<servlet> <servlet-name> unggah </servlet-name> <servlet-class> mypack.uploadservlet </servlet-class> <InT-param> <param-name> FilePath </param-name> <param-value> </param-value> </init-param> <init-param> <param--name> </param-value> </init-param> <init-param> <param--name> <param> <param-value> temp </param-value> </it-param> </servlet> <servlet-papping> <servlet-name> Unggah </servlet-name> <rats-pola>/unggah </RURL-Pattern> </Servlet-Mapping>
Pada titik ini, fungsi unggahan file sederhana telah selesai - akses halaman formulir, pilih file dan klik unggah file. Jika Anda ingin menyimpan file ke database saat mengunggah file ke server, Anda dapat menyimpan nama file ke database setelah mendapatkan nama file, sehingga Anda dapat memilih file pengguna sesuai dengan nama file di masa mendatang!
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.