servlet文件上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet文件上传相关的知识,希望对你有一定的参考价值。

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet实现文件的上传和下载实现步骤是差不多的,基本可以分为三个部分:

  1. 创建一个页面,form提交表单
  2. 写Servlet程序,实现上传/下载
  3. 配置web.xml

前期准备:

    导入commons-fileupload.jar和commons-io.jar两个jar包,项目导入路径:/WEB-INF/lib/。

实现原理:     

技术分享

A:表单提交有两种方式GET和POST,前者通常用于提交少量的数据,且安全性较低,POST可以上传文件和大量数据,安全性也较高

  1. 首先创建提交表单,jsp文件和html文件都可以,method方法必须是post,enctype我们需要设置成multipart/form-data
  1. 如果有中文乱码的问题,我们只需要将charset设置为和编译器一样的编码格式。.
  2. 若需要同时上传多个文件,我们需要在下面的程序中再添加<input>表单,然后修改其中的name就可以了。

首先创建表单文件,HTML或者JSP都可以。

        <h3>文件上传:</h3>

        请选择要上传的文件:<br />

         <form action="uploadServlet" method="post" enctype="multipart/form-data">

         <input type="file" name="file" size="50" />

         <br />

         <input type="submit" value="上传文件" />

         </form>

然后编写uploadServlet.java
public class uploadServlet extends HttpServlet {
   /**
     *
     */
    private static final long serialVersionUID = 1L;
    private boolean isMultipart;
    private int maxFileSize = 100*1024 * 1024;
    private int maxMemSize =8*1024 * 1024;
    private File file ;
    private File dtfilepath;
    private Throwable throwable = null;
    public uploadServlet(){
        super();
    }
    /**初始化文件上传路径*/
    public  void init() throws ServletException{
        Date date = new Date();
        String path = "D:/Dump/" + new SimpleDateFormat("yyyyMMdd").format(date);
        System.out.println("path:" + path);
        dtfilepath = new File(path);
        if(!dtfilepath.exists()){
            dtfilepath.mkdir();
        }
        System.out.println("dtfilepath: " + dtfilepath);
    }
    
    public void doPost(HttpServletRequest request,HttpServletResponse response)
                               throws ServletException, java.io.IOException {
        isMultipart = ServletFileUpload.isMultipartContent(request);
        response.setCharacterEncoding("UTF-8");                         
        if( !isMultipart ){
            return;
        }
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(maxMemSize);
        factory.setRepository(new File("D:/temp"));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax( maxFileSize );
        try{
            List<FileItem> fileItems = upload.parseRequest(request);
            System.out.println("fileItems=" + fileItems);
            Iterator<FileItem> i = fileItems.iterator();
            while ( i.hasNext () )  {
                FileItem fi = (FileItem)i.next();
                System.out.println("fi=" + fi.getSize());
                if(fi.getSize()<=0)
                {
                         response.setStatus(404);
                         throwable.getMessage();
                 }
                /**写入文件*/
                 if ( !fi.isFormField())   
                 {
                    String fileName = fi.getName();
                    if( fileName.lastIndexOf("\\\\") >= 0 ){
                         file = new File( dtfilepath + fileName.substring( fileName.lastIndexOf("\\\\"))) ;
                         System.out.println("file = " + file);
                    }else{
                         file = new File( dtfilepath + fileName.substring(fileName.lastIndexOf("\\\\")+1)) ;
                    }
                    fi.write( file ) ;  
                    String pathjsp = dtfilepath.toString();
                    request.getSession().setAttribute("pathjsp", pathjsp);
                    response.sendRedirect("success.jsp");
                 }
          }
       }catch(Exception ex) {
             System.out.println(ex);
       }
   }
   public void doGet(HttpServletRequest request,HttpServletResponse response)
                       throws ServletException, java.io.IOException {
        doPost(request,response);
   }
}

最后配置web.xml

<welcome-file-list>
    <welcome-file>upload.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>uploadServlet</servlet-name>
    <servlet-class>uploadDemo.uploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>/uploadServlet</url-pattern>
  </servlet-mapping>

最后再编写Java文件中调用的success.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传成功</title>
</head>
<body>
<p style="color:green"> 文件上传成功</p>
<%String pathjsp = (String)request.getSession().getAttribute("pathjsp"); %>
<p>文件上传路径:<%=pathjsp %></p>
</body>
</html>

 

一个基本的文件上传就可以了



































































































以上是关于servlet文件上传的主要内容,如果未能解决你的问题,请参考以下文章

在servlet中怎样上传文件?

配置servlet支持文件上传

Servlet3.0学习总结——基于Servlet3.0的文件上传

Servlet的文件上传

servlet上传文件

Servlet 文件上传