Как правило, при использовании сервлета для обработки элементов формы все элементы формы - это простой текст, а сервлеты легко обрабатывать с request.getParameter (). Но когда форма содержит больше, чем просто какой-то простой текст, такой как загрузка полей файлов, это все еще очень сложная задача, чтобы анализировать каждую подразделение композитной формы непосредственно из объекта httpservlectrequest.
Чтобы упростить обработку данных типа «Multipart/Form-Data», соответствующие компоненты могут использоваться для обработки, которые могут сохранить много кодирования, повторное использование поддержки, а также очень эффективно.
Есть также некоторые компоненты Java: FileUpload, Smartupload, Cos и т. Д. Эта статья объяснит ее с помощью Apache's FileUpload.
Чтобы использовать FileUpload, вы должны сначала загрузить соответствующий компонент:
1. FileUpload Package: http://commons.apache.org/fileupload/
2.IO пакет: http://commons.apache.org/io/
После загрузки распадайте пакет ZIP и копируйте Commons-FileUpload-1.2.1.jar и Commons-IO-I-1.4.jar в WebApp/webApp/web-inf/lib.
1. Страница формы (чтобы указать ectype = "Multipart/Form -Data" формы) - upload.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"> name: </div> </td> <td> <входной тип "=" name "=". </td> </tr> <tr> <td> <div align = "right"> upload file1: </div> </td> <td> <input type = "file" name = "file1" size = "30"/> </td> </tr> <tr> <td> <div align = "right"> upload file2: </div> </td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <pired> " name = "file2" size = "30"/> </td> </tr> <tr> <td> <input type = "propect" name = "value =" upload "> </td> <td> <input type =" reset "name =" reset "value =" reset "> </td> </tr> </table> </form> </body> </html> </html> </html> </html> </html> </html> </td> </tr> </table> </form> </warue ="
2. Форма обработки сервлета - uploadservlet
Пакет MyPack; импортировать javax.servlet.*; import javax.servlet.http.*; импортировать java.io.*; import java.util.*; импорт org.apache.commons.fileupload.*; import org.apache.commons.fileupload.servlet. Uploadservlet расширяет httpservlet {private String filePath; // каталог, где загруженные файлы - частная строка TempfilePath; // каталог, где временные файлы хранятся public void init (конфигурация ServletConfig). filePath = config.getInitParameter ("filePath"); tempfilepath = config.getinitParameter ("tempfilePath"); filePath = getServletContext (). getRealPath (filePath); tempfilePath = getServletContext (). getRealPath (tempfilePath); } public void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/plain"); // Отправить тело ответа на клиенту PrintWriter Outnet = response.getWriter (); try {// Создать жесткий диск FileItem Factory DiskFileItemFactory Factory = new DiskFileItemFactory (); // Установить размер буфера, используемого для записи данных на жесткий диск, здесь 4K Factory.SetSizeThroshold (4*1024); // Установить временный каталог factory.setRepository (новый файл (tempfilePath)); // Создание загрузки файла процессор ServletFileUpload upload = new ServletFileUpload (Factory); // Установить максимальный размер файла, который разрешен для загрузки, здесь 4M upload.setsizemax (4*1024*1024); List / * fileitem * / items = opload.parserequest (request); Итератор iter = item.iterator (); while (iter.hasnext ()) {fileitem item = (fileitem) iter.next (); if (item.isformfield ()) {processformfield (item, outnet); // обрабатывать обычные поля формы} else {processuploadedFile (item, outnet); // обрабатывать файлы загрузки}} outnet.close (); } catch (Exception e) {бросить новое ServletException (e); }} private void processformfield (элемент fileitem, printwriter outnet) {string name = item.getfieldname (); String value = item.getString (); OutNet.println (name+":"+value+"/r/n"); } private void processuploadedFile (элемент fileitem, printwriter outnet) throws exception {string filename = item.getName (); int index = filename.lastIndexof ("//"); filename = filename.substring (index+1, filename.length ()); long fileSize = item.getSize (); if (filename.equals ("") && filesize == 0) return; Файл uploadedfile = new File (filePath+"/"+filename); item.write (uploadedfile); OutNet.println (filename+"сохраняется."); outnet.println («размер«+fileName+» - это«+файл размером+»/r/n»); }} Сервлет настроен в web.xml как:
<servlet> <servlet-name> upload </servlet-name> <berlet-class> mypack.uploadservlet </servlet-class> <init-param> <param-name> filePath </param-name> <value> store </param-value> </init-param> <init-param> <param-name> tempfileepath <param-value> temp </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> upload </servlet-name> <url-pattern>/upload </url-pattern> </servlet-mapping>
На этом этапе была завершена простая функция загрузки файла - доступ к странице формы, выберите файл и нажмите «Загрузить файл». Если вы хотите сохранить файл в базу данных при загрузке файла на сервер, вы можете сохранить имя файла в базу данных после получения имени файла, чтобы вы могли выбрать файл пользователя в соответствии с именем файла в будущем!
Вышеуказанное - все содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.