From 368fb608f7741553ae294d021979ee41d91b425e Mon Sep 17 00:00:00 2001 From: Thoughtscript Date: Sun, 13 May 2018 23:56:37 +0100 Subject: [PATCH] BAEL-1740: Cleanup and Annotation Approach --- .../baeldung/{servlets => }/Constants.java | 7 +- .../com/baeldung/servlets/FormServlet.java | 4 +- .../baeldung/servlets/MultipartServlet.java | 49 ++++++++++ .../com/baeldung/servlets/UploadServlet.java | 91 +++++++++---------- .../src/main/webapp/WEB-INF/web.xml | 9 ++ javax-servlets/src/main/webapp/upload.jsp | 12 ++- 6 files changed, 117 insertions(+), 55 deletions(-) rename javax-servlets/src/main/java/com/baeldung/{servlets => }/Constants.java (73%) create mode 100644 javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/Constants.java b/javax-servlets/src/main/java/com/baeldung/Constants.java similarity index 73% rename from javax-servlets/src/main/java/com/baeldung/servlets/Constants.java rename to javax-servlets/src/main/java/com/baeldung/Constants.java index 3195e95088..90c64870ad 100644 --- a/javax-servlets/src/main/java/com/baeldung/servlets/Constants.java +++ b/javax-servlets/src/main/java/com/baeldung/Constants.java @@ -1,12 +1,11 @@ -package com.baeldung.servlets; +package com.baeldung; public class Constants { public static final String UPLOAD_DIRECTORY = "upload"; - public static final String ENDPOINT = "/jspupload/uploadFile"; + public static final String DEFAULT_FILENAME = "default.file"; public static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; public static final int MAX_FILE_SIZE = 1024 * 1024 * 40; public static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; - -} +} \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/FormServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/FormServlet.java index 79004f9d94..c78129a9cf 100644 --- a/javax-servlets/src/main/java/com/baeldung/servlets/FormServlet.java +++ b/javax-servlets/src/main/java/com/baeldung/servlets/FormServlet.java @@ -24,10 +24,10 @@ public class FormServlet extends HttpServlet { response.setHeader("Test", "Success"); response.setHeader("BMI", String.valueOf(bmi)); - RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/upload.jsp"); + RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/index.jsp"); dispatcher.forward(request, response); } catch (Exception e) { - response.sendRedirect("upload.jsp"); + response.sendRedirect("index.jsp"); } } diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java new file mode 100644 index 0000000000..18296ca1d8 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java @@ -0,0 +1,49 @@ +package com.baeldung.servlets; + +import com.baeldung.Constants; + +import javax.servlet.ServletException; +import javax.servlet.annotation.MultipartConfig; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import static com.baeldung.Constants.UPLOAD_DIRECTORY; + +@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5) +public class MultipartServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + private String getFileName(Part part) { + for (String content : part.getHeader("content-disposition").split(";")) { + if (content.trim().startsWith("filename")) + return content.substring(content.indexOf("=") + 2, content.length() - 1); + } + return Constants.DEFAULT_FILENAME; + } + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; + File uploadDir = new File(uploadPath); + if (!uploadDir.exists()) + uploadDir.mkdir(); + + try { + String fileName = ""; + for (Part part : request.getParts()) { + fileName = getFileName(part); + part.write(uploadPath + File.separator + fileName); + } + request.setAttribute("message", "File " + fileName + " has uploaded successfully!"); + } catch (FileNotFoundException fne) { + request.setAttribute("message", "There was an error: " + fne.getMessage()); + } + getServletContext().getRequestDispatcher("/result.jsp").forward(request, response); + } +} \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java index c809a9e818..e67bc349a1 100644 --- a/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java +++ b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java @@ -1,61 +1,58 @@ package com.baeldung.servlets; -import static com.baeldung.servlets.Constants.MAX_FILE_SIZE; -import static com.baeldung.servlets.Constants.MAX_REQUEST_SIZE; -import static com.baeldung.servlets.Constants.MEMORY_THRESHOLD; -import static com.baeldung.servlets.Constants.UPLOAD_DIRECTORY; - -import java.io.File; -import java.io.IOException; -import java.util.List; -import javax.servlet.ServletException; -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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import static com.baeldung.Constants.*; + public class UploadServlet extends HttpServlet { - - private static final long serialVersionUID = 1L; - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + private static final long serialVersionUID = 1L; - if (ServletFileUpload.isMultipartContent(request)) { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - DiskFileItemFactory factory = new DiskFileItemFactory(); - factory.setSizeThreshold(MEMORY_THRESHOLD); - factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); + if (ServletFileUpload.isMultipartContent(request)) { - ServletFileUpload upload = new ServletFileUpload(factory); - upload.setFileSizeMax(MAX_FILE_SIZE); - upload.setSizeMax(MAX_REQUEST_SIZE); - String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; - File uploadDir = new File(uploadPath); - if (!uploadDir.exists()) { - uploadDir.mkdir(); - } + DiskFileItemFactory factory = new DiskFileItemFactory(); + factory.setSizeThreshold(MEMORY_THRESHOLD); + factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); - try { - List formItems = upload.parseRequest(request); + ServletFileUpload upload = new ServletFileUpload(factory); + upload.setFileSizeMax(MAX_FILE_SIZE); + upload.setSizeMax(MAX_REQUEST_SIZE); + String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; + File uploadDir = new File(uploadPath); + if (!uploadDir.exists()) { + uploadDir.mkdir(); + } - if (formItems != null && formItems.size() > 0) { - for (FileItem item : formItems) { - if (!item.isFormField()) { - String fileName = new File(item.getName()).getName(); - String filePath = uploadPath + File.separator + fileName; - File storeFile = new File(filePath); - item.write(storeFile); - request.setAttribute("message", "File " + fileName + " has uploaded successfully!"); - } - } - } - } catch (Exception ex) { - request.setAttribute("message","There was an error: " + ex.getMessage()); - } - getServletContext().getRequestDispatcher("/result.jsp").forward(request, response); - } - } + try { + List formItems = upload.parseRequest(request); + + if (formItems != null && formItems.size() > 0) { + for (FileItem item : formItems) { + if (!item.isFormField()) { + String fileName = new File(item.getName()).getName(); + String filePath = uploadPath + File.separator + fileName; + File storeFile = new File(filePath); + item.write(storeFile); + request.setAttribute("message", "File " + fileName + " has uploaded successfully!"); + } + } + } + } catch (Exception ex) { + request.setAttribute("message", "There was an error: " + ex.getMessage()); + } + getServletContext().getRequestDispatcher("/result.jsp").forward(request, response); + } + } } \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/WEB-INF/web.xml b/javax-servlets/src/main/webapp/WEB-INF/web.xml index 6f1220fa12..e5a854f5d0 100644 --- a/javax-servlets/src/main/webapp/WEB-INF/web.xml +++ b/javax-servlets/src/main/webapp/WEB-INF/web.xml @@ -12,4 +12,13 @@ UploadServlet /uploadFile + + + MultiPartServlet + com.baeldung.servlets.MultipartServlet + + + MultiPartServlet + /multiPartServlet + \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/upload.jsp b/javax-servlets/src/main/webapp/upload.jsp index 8a0fcfc220..f365484892 100644 --- a/javax-servlets/src/main/webapp/upload.jsp +++ b/javax-servlets/src/main/webapp/upload.jsp @@ -1,4 +1,4 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> @@ -8,8 +8,16 @@ +
Apache FileUpload
- Choose a file: + Choose a file: +
+ +
+ +
Servlet Multipart
+
+ Choose a file:
\ No newline at end of file