Java Servlet簡單實例,文件上傳下載demo


Java Servlet簡單實例,文件上傳下載demo

項目結構

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);
    }

}
View Code

input.jsp

 1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 2     pageEncoding="ISO-8859-1"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 7 <title>servlet demo</title>
 8 </head>
 9 <body>
10 <form action="<%=request.getContextPath()%>/ShowServlet">  
11         <table>  
12             <tr>  
13                 <td>name</td>  
14                 <td><input type="text" name="username"></td>  
15             </tr>  
16             <tr>  
17                 <td>password</td>  
18                 <td><input type="text" name="password"></td>  
19             </tr>  
20             <tr>  
21                 <td><input type="submit" value="login"></td>  
22                 <td><input type="reset" value="cancel"></td>  
23             </tr>  
24         </table>  
25     </form>
26 </body>
27 </html>
View Code

 

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;  
    } 

}
View Code

fileupload.jsp

 1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 2     pageEncoding="ISO-8859-1"%>
 3 
 4 <%  
 5 String path = request.getContextPath();  
 6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
 7 %>
 8 
 9 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
10 <html>
11 <head>
12 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
13 <title>Upload File Demo</title>
14 </head>
15 <body>
16 <form action="${pageContext.request.contextPath}/servlet/UploadServlet" method="post" enctype="multipart/form-data">  
17    user name<input type="text" name="username"/> <br/>  
18    <input type="file" name="f1"/><br/>  
19    <input type="file" name="f2"/><br/>  
20    <input type="submit" value="save"/>  
21  </form>
22 </body>
23 </html>
View Code

 

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);  
           }  
      }

}
View Code

download.html

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM