Java Servlet简单实例分享(文件上传下载demo)

时间:2022-01-19 18:01:26

项目结构

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
src
  com
    servletdemo
        DownloadServlet.java
        ShowServlet.java
        UploadServlet.java
        
WebContent
  jsp
    servlet
        download.html
        fileupload.jsp
        input.jsp
        
  WEB-INF
    lib
        commons-fileupload-1.3.1.jar
        commons-io-2.4.jar

1.简单实例

ShowServlet.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.servletdemo;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class ShowServlet
 */
@WebServlet("/ShowServlet")
public class ShowServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  PrintWriter pw=null
  /**
   * @see HttpServlet#HttpServlet()
   */
  public ShowServlet() {
    super();
    // TODO Auto-generated constructor stub
  }
 
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    this.doPost(request, response);
  }
 
  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("gb2312");
    response.setContentType("text/html;charset=gb2312");
    pw=response.getWriter();
    String name=request.getParameter("username");
    String password=request.getParameter("password");
    pw.println("user name:" + name);
    pw.println("<br>");
    pw.println("user password:" + password);
  }
 
}

input.jsp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>servlet demo</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/ShowServlet">
    <table>
      <tr>
        <td>name</td>
        <td><input type="text" name="username"></td>
      </tr>
      <tr>
        <td>password</td>
        <td><input type="text" name="password"></td>
      </tr>
      <tr>
        <td><input type="submit" value="login"></td>
        <td><input type="reset" value="cancel"></td>
      </tr>
    </table>
  </form>
</body>
</html>

2.文件上传实例

UploadServlet.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.servletdemo;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/servlet/UploadServlet")
public class UploadServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
    
  /**
   * @see HttpServlet#HttpServlet()
   */
  public UploadServlet() {
    super();
    // TODO Auto-generated constructor stub
  }
 
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //设置编码
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter pw = response.getWriter();
    try {
      //设置系统环境
      DiskFileItemFactory factory = new DiskFileItemFactory();
      //文件存储的路径
      String storePath = getServletContext().getRealPath("/WEB-INF/files");
      //判断传输方式 form enctype=multipart/form-data
      boolean isMultipart = ServletFileUpload.isMultipartContent(request);
      if(!isMultipart)
      {
        pw.write("传输方式有错误!");
        return;
      }
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setFileSizeMax(4*1024*1024);//设置单个文件大小不能超过4M
      upload.setSizeMax(4*1024*1024);//设置总文件上传大小不能超过6M
      //监听上传进度
      upload.setProgressListener(new ProgressListener() {
 
        //pBytesRead:当前以读取到的字节数
        //pContentLength:文件的长度
        //pItems:第几项
        public void update(long pBytesRead, long pContentLength,
            int pItems) {
          System.out.println("已读去文件字节 :"+pBytesRead+" 文件总长度:"+pContentLength+"  第"+pItems+"项");
           
        }
      });
      //解析
      List<FileItem> items = upload.parseRequest(request);
      for(FileItem item: items)
      {
        if(item.isFormField())//普通字段,表单提交过来的
        {
          String name = item.getFieldName();
          String value = item.getString("UTF-8");
          System.out.println(name+"=="+value);
        }else
        {
//         String mimeType = item.getContentType(); 获取上传文件类型
//         if(mimeType.startsWith("image")){
          InputStream in =item.getInputStream();
          String fileName = item.getName(); 
          if(fileName==null || "".equals(fileName.trim()))
          {
            continue;
          }
          fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
          fileName = UUID.randomUUID()+"_"+fileName;
           
          //按日期来建文件夹
          String newStorePath = makeStorePath(storePath);
          String storeFile = newStorePath+"\\"+fileName;
          OutputStream out = new FileOutputStream(storeFile);
          byte[] b = new byte[1024];
          int len = -1;
          while((len = in.read(b))!=-1)
          {
             out.write(b,0,len);    
          }
          in.close();
          out.close();
          item.delete();//删除临时文件
        }
       }
//     }
    }catch(org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException e){ 
       //单个文件超出异常
      pw.write("单个文件不能超过4M");
    }catch(org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException e){
      //总文件超出异常
      pw.write("总文件不能超过6M");
       
    }catch (FileUploadException e) {
      e.printStackTrace();
    }
  }
 
  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }
  
  private String makeStorePath(String storePath) {
    
    Date date = new Date();
    DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
    String s = df.format(date);
    String path = storePath+"\\"+s;
    File file = new File(path);
    if(!file.exists())
    {
      file.mkdirs();//创建多级目录,mkdir只创建一级目录
    }
    return path;
      
  }
  private String makeStorePath2(String storePath, String fileName) {
    int hashCode = fileName.hashCode();
    int dir1 = hashCode & 0xf;// 0000~1111:整数0~15共16个
    int dir2 = (hashCode & 0xf0) >> 4;// 0000~1111:整数0~15共16个
   
    String path = storePath + "\\" + dir1 + "\\" + dir2; // WEB-INF/files/1/12
    File file = new File(path);
    if (!file.exists())
      file.mkdirs();
   
    return path;
  }
 
}

fileupload.jsp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!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=ISO-8859-1">
<title>Upload File Demo</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/UploadServlet" method="post" enctype="multipart/form-data">
  user name<input type="text" name="username"/> <br/>
  <input type="file" name="f1"/><br/>
  <input type="file" name="f2"/><br/>
  <input type="submit" value="save"/>
 </form>
</body>
</html>

3.文件下载实例

DownloadServlet.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.servletdemo;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
 
 
 
import java.net.URLEncoder;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletResponse;
 
/**
 * Servlet implementation class DownloadServlet
 */
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
    
  /**
   * @see HttpServlet#HttpServlet()
   */
  public DownloadServlet() {
    super();
    // TODO Auto-generated constructor stub
  }
 
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    download1(response);
  }
 
  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }
  
  public void download1(HttpServletResponse response) throws IOException{
    //获取所要下载文件的路径
     String path = this.getServletContext().getRealPath("/files/web配置.xml");
     String realPath = path.substring(path.lastIndexOf("\\")+1);
   
     //告诉浏览器是以下载的方法获取到资源
     //告诉浏览器以此种编码来解析URLEncoder.encode(realPath, "utf-8"))
    response.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(realPath, "utf-8"));
    //获取到所下载的资源
     FileInputStream fis = new FileInputStream(path);
     int len = 0;
      byte [] buf = new byte[1024];
      while((len=fis.read(buf))!=-1){
        response.getOutputStream().write(buf,0,len);
      }
   }
 
}

download.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Download Demo</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<a href = "/JavabeanDemo/DownloadServlet">download</a>
</body>
</html>

以上这篇Java Servlet简单实例分享(文件上传下载demo)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。