Généralement, lors de l'utilisation du servlet pour traiter les éléments de formulaire, les éléments de formulaire sont tous du texte simple et les servlets sont faciles à traiter avec request.getParameter (). Mais lorsque le formulaire contient plus qu'un simple texte simple, tel que le téléchargement des champs de fichiers, il s'agit toujours d'une tâche très compliquée d'analyser chaque sous-partie du formulaire composite directement de l'objet httpservletRequest.
Afin de simplifier le traitement des données de type "multipart / formulaire", les composants correspondants peuvent être utilisés pour le traitement, ce qui peut économiser beaucoup de codage, de réutilisation de support et est également très efficace.
Il existe également des composants Java: Fileupload, SmartUpload, Cos, etc. Cet article l'expliquera avec Fileupload d'Apache.
Pour utiliser Fileupload, vous devez d'abord télécharger le composant correspondant:
1. FileUpload Package: http://commons.apache.org/fileupload/
2.IO Package: http://commons.apache.org/io/
Après le téléchargement, dézip le package zip et copier Commons-fileupload-1.2.1.jar et commons-io-1.4.jar à Tomcat WebApp / web-inf / lib.
1. Page de formulaire (pour spécifier le formype = "multipart / formulaire-data" du formulaire) - upload.html
<Html> <A-head> <ititle> upload </ title> </ head> <body> <form name = "uploadform" metheth = "post" EncType = "multipart / form-data" action = "upload> <s table> <tr> <td> <div Align =" Right "> Nom d'utilisateur: </v> </td> <td> <entrée type =" Text "Name =" USERNAME " </td> </ tr> <tr> <td> <div align = "droite"> upload file1: </ div> </td> <td> <input type = "file" name = "file1" size = "30" /> </td> </tr> <tr> <td> <div align = "Right"> File2: </v> </td> name = "file2" size = "30" /> </ td> </ tr> <tr> <td> <input type = "soumi" name = "soumi" value = "upload"> </td> <td> <input type = "reset" name = "reset" value = "reset"> </td> </tr> </ table> </ form> </ body> </ body> </ body> </ body> </ body> </ body> </odody> </ HORD> </ HORD> </ HORD> </html>
2. Formulaire de traitement du servlet - Téléchargement de merde
Package MyPack; Importer Javax.servlet. *; Importer Javax.servlet.http. *; Importer java.io. *; import java.util. *; import org.apache.commons.fileupload. *; import org.apache.commons.fileupload.servlet. UploadServlet étend HttpServlet {private String filepath; // Répertoire où les fichiers téléchargés sont des chaînes privées TempFilePath; // Le répertoire où les fichiers temporaires sont stockés publics void init (servletconfig config) lève ServletException {super.init (config); filepath = config.getInitParameter ("filepath"); tempFilePath = config.getInitParameter ("tempFilePath"); filepath = getServletContext (). getRealPath (filepath); tempFilePath = getServletContext (). getRealPath (tempFilePath); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / plaine"); // Envoi du corps de réponse au client printwriter outnet = réponse.getWriter (); Essayez {// Créez un Disk Factory DiskFileItemFactory Factory = new DiskFileItemFactory (); // Définissez la taille du tampon utilisé pour écrire des données sur le disque dur, voici 4K Factory.SetSizethReshold (4 * 1024); // Définit le répertoire temporaire factory.setRepository (nouveau fichier (tempFilePath)); // Créer un processeur de téléchargement de fichiers ServletFileUpload upload = new ServletFileUpload (Factory); // Définissez la taille maximale du fichier autorisé à être téléchargé, voici 4m upload.setSizemax (4 * 1024 * 1024); List / * fileItem * / items = upload.parseRequest (request); Iterator iter = items.Itator (); while (iter.hasnext ()) {fileItem item = (fileItem) iter.next (); if (item.isformField ()) {processFormField (item, outnet); // gérer les champs de formulaire ordinaires} else {processUploadFile (item, outnet); // gérer les fichiers de téléchargement}} outnet.close (); } catch (exception e) {lancer un nouveau servletException (e); }} private void processFormField (item fileItem, printwriter outnet) {string name = item.getFieldName (); String value = item.getString (); outnet.println (name + ":" + valeur + "/ r / n"); } private void processUpLoadDFile (item fileItem, printwriter outnet) lève 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; File Téléchargé de fichier = nouveau fichier (filepath + "/" + nom de fichier); item.Write (Téléchargé); outnet.println (nom de fichier + "est enregistré."); outnet.println ("La taille de" + nom de fichier + "est" + file size + "/ r / n"); }} Le servlet est configuré dans web.xml comme:
<Serplet> <Servlet-Name> upload </vrlet-name> <servlet-class> mypack.uploadServlet </ servlet-Class> <Init-Param> <Amam-Name> FilePath </onsam-name> <param-Value> Store </ Param-Value> <Am param-Value> Temp </ Param-Value> </ Init-Param> </ Servlet> <Servlet-Mapping> <Servlet-Name> Téléchargez </ servlet-name> <URL-Pattern> / Téléchargez </url-Pattern> </ Servlet-Mapping>
À ce stade, une fonction de téléchargement de fichiers simple a été terminée - accédez à la page du formulaire, sélectionnez le fichier et cliquez sur Télécharger le fichier. Si vous souhaitez enregistrer le fichier dans la base de données lors du téléchargement du fichier sur le serveur, vous pouvez enregistrer le nom du fichier dans la base de données après avoir obtenu le nom du fichier, afin que vous puissiez sélectionner le fichier de l'utilisateur en fonction du nom de fichier dans le futur!
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.