Geralmente, ao usar o servlet para processar elementos de formulário, os elementos do formulário são todos um texto simples e os servlets são fáceis de processar com o request.getParameter (). Mas quando o formulário contém mais do que apenas algum texto simples, como o upload de campos de arquivo, ainda é uma tarefa muito complicada para analisar cada sub-separação do formulário composto diretamente do objeto HttpServletRequest.
Para simplificar o processamento de dados do tipo "Multipart/Form-Data", os componentes correspondentes podem ser usados para processamento, o que pode economizar muita codificação, suportar reutilização e também é muito eficiente.
Existem também alguns componentes Java: FileUpload, SmartUpload, Cos, etc. Este artigo o explicará com o FileUpload da Apache.
Para usar o FileUpload, você deve primeiro baixar o componente correspondente:
1. Pacote de FileUpload: http://commons.apache.org/fileupload/
2.io pacote: http://commons.apache.org/io/
Após o download, descompacte o pacote ZIP e copie o Commons-FileUpload-1.2.1.jar e o Commons-1.4.Jar para o WebApp/Web-Inf/Lib do Tomcat.
1. Página de formulário (para especificar o ENCTYPE = "Multipart/Form -Data" do formulário) - Upload.html
<html> <head> <title> upload </title> </head> <body> <formulário name = "uploadform" method = "post" Enctype = "Multipart/form-data" action = "upload"> <table> <tr> <td> <div align = "direita"> Nome do usuário: </div> </td> <t> </td> </tr> <tr> <td> <div align = "direita"> upload file1: </div> </td> <td> <input type = "file" name = "file1" size = "30"/> </td> </tr> <t> <td> <div align = "30"> ultload2: </td> name = "file2" size = "30"/> </td> </tr> <tr> <td> <input type = "submit" name = "submit" value = "upload"> </td> <td> <input type = "reset" name = "reset" = "resset"> </td> </tlaym </thant "</thant" </thant "</thant" name = "
2. Formulário de processamento de servlet - UploadServlet
pacote mypack; importar javax.servlet.*; importar javax.servlet.http.*; importar java.io.*; importar java.util.*; importar org.apache.commons.fileuppload.*; org.apache.commons.fileupload.disk.*; classe pública uploadServlet estende httpServlet {private string filepath; // diretório em que os arquivos enviados é privada string tempfilepath; // diretório em que os arquivos temporários são armazenados public void init (servletConfig config) lança servletexception {super.init (config); filepath = config.getInitParameter ("filepath"); tempfilepath = config.getinitParameter ("tempfilepath"); filepath = getServletContext (). getRealPath (filepath); tempfilepath = getServletContext (). getRealPath (tempFilePath); } public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {Response.setContentType ("text/plana"); // Envie o corpo de resposta ao cliente PrintWriter outnet = Response.getWriter (); tente {// Crie um FILEItem de fábrica baseado em disco rígido Factory DiskFileItemFactory Factory = new DiskFileItemFactory (); // Defina o tamanho do buffer usado para gravar dados no disco rígido, aqui está o 4K Factory.SetSizETHreshold (4*1024); // Defina o diretório temporário Factory.SetRepository (novo arquivo (TempFilePath)); // Crie um processador de upload de arquivos servletfileUpload upload = new ServletFileUpload (Factory); // Defina o tamanho máximo do arquivo permitido ser carregado, aqui está o upload 4M.SetSizEMAX (4*1024*1024); List / * fileItem * / itens = upload.parserequest (request); Iterator iter = items.iterator (); while (iter.hasnext ()) {fileItem item = (fileItem) iter.Next (); if (item.isformfield ()) {processformfield (item, outnet); // manipula os campos de forma comum} else {processuploadedfile (item, outnet); // manipula arquivos de upload}} outnet.close (); } catch (Exceção e) {lança nova servletexception (e); }} private void ProcessFormField (item FileItem, PrintWriter outnet) {string name = item.getfieldName (); String value = item.getString (); outnet.println (nome+":"+valor+"/r/n"); } private void ProcessUploadedFile (item FileItem, PrintWriter Outnet) lança Exceção {string filename = item.getName (); int index = filename.lastIndexOf ("//"); FILENAME = FILENAME.SUBSTRING (INDEX+1, FILENAME.LENGLEN ()); long fileSize = item.getSize (); if (filename.equals ("") && filesize == 0) retornar; Arquivo uploadedfile = novo arquivo (filepath+"/"+arquivo de arquivo); item.write (uploadfile); outnet.println (nome do arquivo+"é salvo."); outnet.println ("O tamanho de"+nome do arquivo+"é"+filesize+"/r/n"); }} O servlet está configurado em web.xml como:
</servlet> <Verlet-name> upload </vetlet-name> <Servlet-class> mypack.uploadservlet </servlet-class> <iit-param> <amam-name> filepath </param-name> <amul-value> store </amam-value> </init-paparam> <intername> <amil-name> teme </param-value> </init-paparm> <inter-param> <amil-name> teme </param-value> </init-paparm> <inter-Param> <amile> temp </param-value> </init-paparm> <inter-Param> <amile> teme> _Milile> <amam-value> temp </amam-value> </irit-param> </servlet> <Vertlet-mapping> <Verlet-name> upload </servlet-name> <url-pattern>/upload </url-pattern> </servlet>
Neste ponto, uma função simples de upload de arquivo foi concluída - acesse a página do formulário, selecione o arquivo e clique em fazer upload do arquivo. Se você deseja salvar o arquivo no banco de dados enquanto carrega o arquivo para o servidor, você pode salvar o nome do arquivo no banco de dados após obter o nome do arquivo, para poder selecionar o arquivo do usuário de acordo com o nome do arquivo no futuro!
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.