En general, cuando se usa servlet para procesar elementos de formulario, los elementos de formulario son de texto simple, y los servlets son fáciles de procesar con request.getParameter (). Pero cuando el formulario contiene más que solo algún texto simple, como cargar campos de archivo, sigue siendo una tarea muy complicada analizar cada subparte del formulario compuesto directamente desde el objeto httpservletRequest.
Para simplificar el procesamiento de los datos de tipo "multipart/forma de forma", los componentes correspondientes se pueden utilizar para el procesamiento, lo que puede ahorrar mucha codificación, reutilización de soporte y también es muy eficiente.
También hay algunos componentes de Java: FileUpload, SmartUpload, COS, etc. Este artículo lo explicará con FileUpload de Apache.
Para usar FileUpload, primero debe descargar el componente correspondiente:
1. PAQUETE DE FILEPLOAD: http://commons.apache.org/fileupload/
2.io paquete: http://commons.apache.org/io/
Después de descargar, descomprima el paquete Zip y copie Commons-FileUpload-1.2.1.jar y Commons-IO-1.4.Jar a WebApp/Web-Inf/lib.
1.
<html> <fead> <title> cargar </title> </head> <body> <form de nombre = "uploadform" método = "post" enctype = "multipart/form-data" Action = "cargar"> <table> <tr> <td> </td> </tr> <tr> <td> <div align = "right"> cargar archivo1: </div> </td> <td> <input type = "file" name = "file1" size = "30"/> </td> </tr> <tr> <tr> <td> <div align = "derecho"> cargar archivo2: </iv> </td <td> <td> <tinte> file name = "file2" size = "30"/> </td> </tr> <tr> <td> <input type = "subt" name = "subt" value = "upload"> </td> <td> <input type = "reset" name = "reet" value = "reet"> </td> </tr> </table> </form> </body> </html>
2. Formulario de procesamiento de servlet - SubloadServlet
paquete mypack; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; importar org.apache.commons.fileupload.*; import org.apache.commons.fileupload.servlet.*; importación org.apache.commons.fileUpload.disk.*; public class uploadServlet extiende httpservlet {private string filepath; // Directorio Donde los archivos cargados es una cadena privada tempfilePath; // Directorio donde los archivos temporales se almacenan public void init (servletConfig config) lanza ServletException {super.init (config); filepath = config.getInitParameter ("FilePath"); tempfilePath = config.getInitParameter ("tempfilePath"); filePath = getServletContext (). GetRealPath (filePath); tempfilePath = getServletContext (). getRealPath (tempfilePath); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Plain"); // Enviar cuerpo de respuesta al cliente PrintWriter Outnet = Response.getWriter (); Pruebe {// Cree una fábrica de fábrica de Factory de Factory de Hard Disk Factory = New DiskFileItemFactory (); // Establecer el tamaño del búfer utilizado para escribir datos en el disco duro, aquí está 4K fábrica. Setsizethreshold (4*1024); // Establecer el directorio temporal Factory.SetRepository (nuevo archivo (tempfilePath)); // Crear un procesador de carga de archivo ServletFileUpload upload = new ServLetFileUpload (fábrica); // Establecer el tamaño máximo del archivo que se puede cargar, aquí está 4m upload.setsizeMax (4*1024*1024); List / * fileItem * / elementos = upload.parserequest (solicitud); Iterator iter = items.iterator (); while (iter.hasnext ()) {fileItem item = (fileItem) iter.next (); if (item.isformfield ()) {ProcessFormfield (item, outnet); // manejar campos de formulario ordinarios} else {ProcessUploadedFile (item, outnet); // manejar archivos de carga}} outnet.close (); } catch (Exception e) {Throw New ServLetException (e); }} private void ProcessFormField (elemento de fileitem, printWriter Outnet) {String name = item.getFieldName (); Valor de cadena = item.getString (); outnet.println (nombre+":"+valor+"/r/n"); } private void ProcessUploadedFile (elemento FileItem, PrintWriter Outnet) lanza la excepción {String filename = item.getName (); int index = filename.lastIndexof ("//"); FileName = FileName.Substring (índice+1, filename.length ()); Long filesize = item.getSize (); if (filename.equals ("") && filesize == 0) return; Archivo uploadedFile = nuevo archivo (filepath+"/"+nombre de archivo); item.write (cargueedfile); outnet.println (nombre de archivo+"se guarda"); outnet.println ("El tamaño de"+nombre de archivo+"es"+filesize+"/r/n"); }} El servlet está configurado en web.xml como:
<servlet> <servlet-name>upload</servlet-name> <servlet-class>mypack.UploadServlet</servlet-class> <init-param> <param-name>filePath</param-name> <param-value>store</param-value> </init-param> <init-param> <param-name>tempFilePath</param-name> <Amam-Value> TEMP </param-value> </it-param> </servlet> <ervlet-mapping> <ervlet-name> upload </servlet-name> <url-pattern>/upload </ url-patern> </servlet-mapping>
En este punto, se ha completado una función de carga de archivo simple: acceda a la página del formulario, seleccione el archivo y haga clic en cargar el archivo. Si desea guardar el archivo en la base de datos al cargar el archivo en el servidor, puede guardar el nombre del archivo en la base de datos después de obtener el nombre del archivo, para que pueda seleccionar el archivo del usuario de acuerdo con el nombre del archivo en el futuro.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.