From eceb73823bbd7bf3b3b326c5308cf308fd3ce3c0 Mon Sep 17 00:00:00 2001 From: Thoughtscript Date: Sun, 13 May 2018 03:48:53 +0100 Subject: [PATCH] BAEL-1740 --- javax-servlets/pom.xml | 109 +++++++++++------- .../java/com/baeldung/servlets/Constants.java | 12 ++ .../com/baeldung/servlets/FormServlet.java | 4 +- .../com/baeldung/servlets/UploadServlet.java | 61 ++++++++++ .../src/main/webapp/WEB-INF/web.xml | 14 ++- javax-servlets/src/main/webapp/result.jsp | 13 +++ javax-servlets/src/main/webapp/upload.jsp | 15 +++ 7 files changed, 183 insertions(+), 45 deletions(-) create mode 100644 javax-servlets/src/main/java/com/baeldung/servlets/Constants.java create mode 100644 javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java create mode 100644 javax-servlets/src/main/webapp/result.jsp create mode 100644 javax-servlets/src/main/webapp/upload.jsp diff --git a/javax-servlets/pom.xml b/javax-servlets/pom.xml index 69d952da9c..41a3bb69be 100644 --- a/javax-servlets/pom.xml +++ b/javax-servlets/pom.xml @@ -1,46 +1,75 @@ - - 4.0.0 - javax-servlets - 1.0-SNAPSHOT + + 4.0.0 + javax-servlets + 1.0-SNAPSHOT - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} - - - org.apache.httpcomponents - httpclient - ${org.apache.httpcomponents.version} - test - - - commons-logging - commons-logging - - - - - org.springframework - spring-test - ${spring-test.version} - test - - + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + commons-io + commons-io + 2.6 + - - 3.1.0 - 4.5.3 - 5.0.5.RELEASE - + + + javax.servlet + javax.servlet-api + 4.0.1 + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + javax.servlet.jsp + javax.servlet.jsp-api + 2.3.1 + + + javax.servlet + jstl + 1.2 + + + + org.apache.httpcomponents + httpclient + ${org.apache.httpcomponents.version} + test + + + commons-logging + commons-logging + + + + + org.springframework + spring-test + ${spring-test.version} + test + + + + + 4.5.3 + 5.0.5.RELEASE + \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/Constants.java b/javax-servlets/src/main/java/com/baeldung/servlets/Constants.java new file mode 100644 index 0000000000..3195e95088 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/Constants.java @@ -0,0 +1,12 @@ +package com.baeldung.servlets; + +public class Constants { + + public static final String UPLOAD_DIRECTORY = "upload"; + public static final String ENDPOINT = "/jspupload/uploadFile"; + + 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; + +} 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 c78129a9cf..79004f9d94 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/index.jsp"); + RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/upload.jsp"); dispatcher.forward(request, response); } catch (Exception e) { - response.sendRedirect("index.jsp"); + response.sendRedirect("upload.jsp"); } } diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java new file mode 100644 index 0000000000..c809a9e818 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java @@ -0,0 +1,61 @@ +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; + +public class UploadServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + if (ServletFileUpload.isMultipartContent(request)) { + + DiskFileItemFactory factory = new DiskFileItemFactory(); + factory.setSizeThreshold(MEMORY_THRESHOLD); + factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); + + 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(); + } + + 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 66934d8fd3..6f1220fa12 100644 --- a/javax-servlets/src/main/webapp/WEB-INF/web.xml +++ b/javax-servlets/src/main/webapp/WEB-INF/web.xml @@ -1,7 +1,15 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" + version="3.1"> + + UploadServlet + com.baeldung.servlets.UploadServlet + + + UploadServlet + /uploadFile + \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/result.jsp b/javax-servlets/src/main/webapp/result.jsp new file mode 100644 index 0000000000..2e985cb322 --- /dev/null +++ b/javax-servlets/src/main/webapp/result.jsp @@ -0,0 +1,13 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + Upload Result + + + +

${message}

+ + \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/upload.jsp b/javax-servlets/src/main/webapp/upload.jsp new file mode 100644 index 0000000000..8a0fcfc220 --- /dev/null +++ b/javax-servlets/src/main/webapp/upload.jsp @@ -0,0 +1,15 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + File Upload Demo + + + +
+ Choose a file: +
+ + \ No newline at end of file