Servlet 上传文件

简介:

Java Web中在不使用第三方jar的情况下如何使用servlet 上传文件呢?

(1)上传表单,文件名为upload_servlet.jsp,内容如下:

 

Html代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  3.     pageEncoding="UTF-8"%>  
  4. <%  
  5.     String path = request.getContextPath();  
  6.     String basePath = request.getScheme() + "://"  
  7.             + request.getServerName() + ":" + request.getServerPort()  
  8.             + path + "/";  
  9. %>  
  10. <%@ taglib prefix="s" uri="/struts-tags"%>  
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  12. <html xmlns="http://www.w3.org/1999/xhtml">  
  13. <head>  
  14. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  15. <title>servlet upload file</title>  
  16. </head>  
  17. <body>  
  18. <center>  
  19. <form action="<%=basePath %>servlet/upload.servlet" enctype="multipart/form-data"  
  20.             method="post"  >  
  21. <input type="file" name="file2"  />  
  22. <br />  
  23. <input type="submit" value="上传" />  
  24. </form>  
  25. <br />  
  26. <a href="../index.jsp">index</a>  
  27. </center>  
  28. </body>  
  29. </html>  

 注意:上传文件表单必须指定 enctype="multipart/form-data" 和method="post

 

 

(2)后台servlet,名称是UploadFileServlet,代码如下:

 

Java代码   收藏代码
  1. package com.shop.jn.web.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Enumeration;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;  
  12.   
  13. import com.common.util.SystemHWUtil;  
  14. import com.common.web.servlet.upload.SUploadServlet;  
  15.   
  16. /** 
  17.  * Servlet implementation class UploadFileServlet 
  18.  */  
  19. public class UploadFileServlet extends SUploadServlet {  
  20.     private static final long serialVersionUID = 1L;  
  21.          
  22.       
  23.   
  24.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  25.         doPost(request, response);  
  26.     }  
  27.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  28.         System.out.println("UploadFileServlet");  
  29.         if(request instanceof MultiPartRequestWrapper){  
  30.             MultiPartRequestWrapper mp=(MultiPartRequestWrapper)request;  
  31.             Enumeration<String> multi=mp.getFileParameterNames();  
  32.             String formFileTagName=null;//"file2"  
  33.             for( ;multi.hasMoreElements();){  
  34.                 String element=multi.nextElement();  
  35.                 formFileTagName=element;//表单中标签的名称:file标签的名称  
  36.   
  37.                 break;  
  38.             }  
  39.             String fileName=mp.getFileNames(formFileTagName)[0];//上传的文件名  
  40.             //保存到哪儿  
  41.             File savedFile=super.getUploadedFilePath(request, "upload", fileName);//D:\eclipse\workspace\shop_goods\ upload  
  42.               
  43.             File[]files=mp.getFiles(formFileTagName);  
  44.             File uploadFile=files[0];//上传的文件  
  45.             SystemHWUtil.copyFile(uploadFile, savedFile/*new File("D:\\Temp\\a\\a\\c.zip")*/);  
  46.             uploadFile.delete();  
  47.         }  
  48.         response.sendRedirect("../upload_download/upload_servlet.jsp");  
  49.   
  50.                   
  51.     }  
  52.   
  53. }  

 说明:上传的文件保存到项目根目录下的upload文件夹中。

 

注意:上述servlet只能处理单文件上传。

servlet在web.xml中的配置如下:

 

Xml代码   收藏代码
  1. <servlet>  
  2.    <servlet-name>UploadFileServlet</servlet-name>  
  3.    <servlet-class>com.shop.jn.web.servlet.UploadFileServlet</servlet-class>  
  4.  </servlet>  
  5.  <servlet-mapping>  
  6.    <servlet-name>UploadFileServlet</servlet-name>  
  7.    <url-pattern>/servlet/upload.servlet</url-pattern>  
  8.  </servlet-mapping>  

 

 

UploadFileServlet 中使用的方法的源码

SystemHWUtil.copyFilejar io0007-find_progess_中的类com.common.util.SystemHWUtil)

 

Java代码   收藏代码
  1. /** 
  2.      *  
  3.      * @param srcFile 
  4.      *            :must be regular file,can not be folder; 
  5.      * @param targetFile 
  6.      *            :must be regular file,can not be folder; 
  7.      * @throws IOException 
  8.      */  
  9.     public static void copyFile(File srcFile, File targetFile)  
  10.             throws IOException {  
  11.         FileInputStream in = new FileInputStream(srcFile);  
  12.   
  13.         FileOutputStream out = new FileOutputStream(targetFile);  
  14.         copyFile(in, out);  
  15.   
  16.     }  
  17.   
  18.     public static void copyFile(InputStream in, FileOutputStream target)  
  19.             throws IOException {  
  20.         // File targetFile = new File(targetFileName);  
  21.         // FileOutputStream target = null;  
  22.         // if (targetFile.isDirectory())  
  23.         // {  
  24.         // targetFile = new File(targetFile, simpleName);  
  25.         // }  
  26.         try {  
  27.             // target = new FileOutputStream(targetFile);  
  28.             byte[] buffer = new byte[BUFF_SIZE];  
  29.             int byteNum;  
  30.   
  31.             while ((byteNum = in.read(buffer)) != NEGATIVE_ONE) {  
  32.                 target.write(buffer, 0, byteNum);  
  33.   
  34.             }  
  35.             System.out.println("[SystemUtil:copyFile]:file copy successfully!");  
  36.         } catch (Exception e) {  
  37.             e.printStackTrace();  
  38.         } finally {  
  39.             if (in != null) {  
  40.                 in.close();  
  41.                 in = null;  
  42.             }  
  43.             if (target != null) {  
  44.                 target.close();  
  45.                 target = null;  
  46.             }  
  47.         }  
  48.     }  

 WebServletUtil.getUploadedPath(jar io0007-find_progess_中的类com.common.util.WebServletUtil):

 

Java代码   收藏代码
  1. /*** 
  2.      * java web // 
  3.      * D:\xxx\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server 
  4.      * .core\tmp0\wtpwebapps\shop_goods\images // 
  5.      * D:\xxx\eclipse\workspace\shop_goods\ upload 
  6.      *  
  7.      * @param uploadFolderName 
  8.      * @param projectName 
  9.      * @param sContext 
  10.      * @return 
  11.      */  
  12.     public static String getUploadedPath(String uploadFolderName,  
  13.             String projectName, ServletContext sContext) {  
  14.         String uploadFolder_tmp = null;  
  15.         if (uploadFolderName.startsWith("/")) {  
  16.             uploadFolder_tmp = uploadFolderName;  
  17.         } else {  
  18.             uploadFolder_tmp = "/" + uploadFolderName;// "/upload"  
  19.         }  
  20.         String realpath = sContext.getRealPath(uploadFolder_tmp);  
  21.         // project name ,eg.shop_goods  
  22.         projectName = SystemHWUtil.deleteFrontSlash(projectName);  
  23.         realpath = SystemHWUtil.getRealPath(realpath, projectName);  
  24.         return realpath;  
  25.     }  

 

注意:

(1)使用的容器是tomcat,不是jetty;

(2)没有使用第三方上传jar包

相关文章
|
11月前
|
JavaScript 前端开发 Java
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙
虽然Cookie和Session都是暂时存在的,不久就会被删掉,但是我们要退出登录的时候,就不能等待其自然消除了~
49 0
|
11月前
|
存储 前端开发 Java
【JavaEE】使Cookie与Session失效-Servlet上传文件操作-优化表白墙
虽然Cookie和Session都是暂时存在的,不久就会被删掉,但是我们要退出登录的时候,就不能等待其自然消除了~
78 0
|
Windows 应用服务中间件
Servlet 上传文件
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.
726 0
|
Java
JAVA SERVLET上传文件的样码
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.
738 0
|
存储 安全 Apache
|
Java Apache 数据库连接
【java】利用servlet解析报文,上传文件
由于工作需要,需要做一个excel导入的功能,这就需要上传excel文件到服务器,服务器做逻辑判断此文件是否是excel文件,接着利用poi的api就可以将内容转化为利用jdbc插入到数据库,达到批量数据导入的功能。
1021 0
纯Servlet上传文件
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class UploadServlet extends HttpServlet {    ...
460 0
|
1天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
13 5
|
1天前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
9 1