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

作者:jingxian 时间:2022-03-03 06:35:04 

项目结构


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


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


<%@ 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


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


<%@ 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


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


<!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,文件,上传,下载
0
投稿

猜你喜欢

  • Java 数据结构链表操作实现代码

    2021-08-12 17:57:58
  • C#网络编程中常用特性介绍

    2021-09-03 23:07:51
  • Android仿直播类app赠送礼物功能

    2023-07-26 05:06:17
  • Java使用递归法解决汉诺塔问题的代码示例

    2023-09-05 20:31:28
  • c# 应用事务的简单实例

    2021-11-24 23:48:34
  • Android仿微信图片选择器ImageSelector使用详解

    2023-04-08 22:28:02
  • android利用handler实现倒计时功能

    2021-10-19 07:36:59
  • Java 数据结构与算法系列精讲之单向链表

    2023-07-10 08:22:12
  • SpringBoot整合Druid数据源过程详解

    2023-06-03 19:47:14
  • Unity中C#和Java的相互调用实例代码

    2022-02-28 13:40:53
  • Java连接Linux服务器过程分析(附代码)

    2023-05-28 19:57:09
  • springboot集成mybatis plus和dynamic-datasource注意事项说明

    2023-12-05 03:54:21
  • Spring AOP如何整合redis(注解方式)实现缓存统一管理详解

    2023-11-19 06:09:27
  • Android中使用ViewStub实现布局优化

    2023-11-28 21:16:18
  • 解决Java调用BAT批处理不弹出cmd窗口的方法分析

    2022-03-09 17:34:02
  • Android中Service实时向Activity传递数据实例分析

    2022-07-22 20:44:15
  • 基于java构造方法Vector创建对象源码分析

    2023-11-25 11:27:54
  • C# goto语句的具体使用

    2021-07-22 22:26:22
  • C#图表算法之有向图

    2021-11-25 14:50:57
  • 解决IDEA中 Ctrl+ALT+V这个快捷键无法使用的情况

    2022-02-27 07:51:36
  • asp之家 软件编程 m.aspxhome.com