Back to: Java Struts Tutorials
Struts 2 Uploading files with Examples
In this article, I am going to discuss Struts 2 Uploading Files with Examples. Please read our previous article where we discussed Struts 2 Value Stack and OGNL.
Struts 2 Uploading files
In this project, we will be using struts2 to upload files. Follow the steps to do so:
Step 1: Create a new maven project in Eclipse. We will use Maven to manage the dependencies of struts2. This way, we do not have to import JARs.
Remember to set the packaging to war. This is because we shall be deploying a web application.
Finally, click on the finish button to create the project. The following project directories need to be created:
Step 2: Initially, the pom.xml file should contain the following content:
Modify pom.xml to add the required dependencies and the build configuration:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.dotnet</groupId> <artifactId>strutex</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>6.1.2.1</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>6.1.2.1</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts-taglib</artifactId> <version>1.3.10</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins> </build> </project>
Step 3: In the src/main/webapp directory, create a new file called index.jsp. This file contains the code which allows you to upload the file. Add the following content to the file:
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1" pageEncoding = "ISO-8859-1"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Upload file in Struts2</title> </head> <body> <form action = "upload" method = "post" enctype = "multipart/form-data"> <label for = "myFile"> Select and upload your file here: </label> <input type = "file" name = "myFile" /> <input type = "submit" value = "Upload"/> </form> </body> </html>
Step 4: In the src/main/webapp directory, create a new file called success.jsp. This file will be displayed if the file is successfully uploaded. Add the following content to the file:
<%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>File Upload Success</title> </head> <body> You have successfully uploaded <s:property value = "fileName"/> </body> </html>
Step 5: In the src/main/webapp directory, create a new file called error.jsp. This file will be displayed if there is an error when the file upload is in progress. Add the following content to the file:
<%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>File Upload Error</title> </head> <body> File upload error! </body> </html>
Step 6: In the src/main/java directory, create a new file called FileUploadAction.java. The file contains the Java action code. This code should be executed when the “upload” button is clicked. Add the following content to the file:
package com.dotnet; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionSupport; public class FileUploadAction extends ActionSupport { private File file; private String fileContentType, fileName, destPath; public String execute() { destPath = "/Users/suhaskamath672/Desktop"; try { System.out.println("Source file name: " + file); System.out.println("Destination file name: " + fileName); FileUtils.copyFile(file, new File(destPath, fileName)); } catch (Exception e) { e.printStackTrace(); return ERROR; } return SUCCESS; } public File getFile() {return file;} public void setFile(File file) {this.file = file;} public String getFileContentType() {return fileContentType;} public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;} public String getFileName() {return fileName;} public void setFileName(String fileName) {this.fileName = fileName;} public String getDestPath() {return destPath;} public void setDestPath(String destPath) {this.destPath = destPath;} }
The execute() function simply copies the source file to the destination file. Based on the outcome of the copy operation, the method returns SUCCESS or ERROR.
Step 7: In the src/main/resources directory, create a new file called struts.xml. The file is responsible for configuring struts2. Add the following content to the file:
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <constant name = "struts.multipart.maxSize" value = "1000000" /> <package name = "helloworld" extends = "struts-default"> <action name = "upload" class = "com.dotnet.FileUploadAction"> <interceptor-ref name = "basicStack"/> <interceptor-ref name = "fileUpload"/> <result name = "success">/success.jsp</result> <result name = "error">/error.jsp</result> </action> </package> </struts>
This file configures string to allow a maximum of 1000000 bytes, which is approximately equal to 977 kilobytes.
Step 8: In the src/main/webapp directory, create a new directory called WEB-INF. In this directory, create a new file called web.xml. This file is responsible for implementing struts2 in the web application. Add the following content to the file:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/web-app_3_0.xsd" id="apache-struts-config-example" version="3.0"> <display-name>Struts Config XML</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Step 9: Compile and execute the program on the Tomcat server. The following page must open in your default web browser:
Upon clicking the “Browse…” button, a file explorer window will open, asking you to select a file. Note that the file should not be more than 900 kilobytes (as we have configured in struts.xml). Upon selecting the file, we webpage will upload to show the name of the file:
Click on upload. The following webpage must load:
Congratulations! You have successfully uploaded a file using struts2.
In the next article, I am going to discuss Struts 2 Database with Examples. Here, in this article, I try to explain Struts 2 Uploading Files with Examples and I hope you enjoy this Struts 2 Uploading Files article.