Struts

adplus-dvertising
Application- 11 : Creating a Struts Application for Upload any kind of document into browser
Previous Home Next

In this chapter, you create a new Struts application for the purpose of upload any kind of document( like image, PDF, Txt , doc, and etc. ). This is very good example to show the great flexibility and dynamic property of dynaActionForm. For each piece of the application, we show you the code and then explain the code. This application design in NetBeans IDE- 6.8 with Struts 1.3.

Requirement for your struts application-

  • At least one view component is required in every Application.
  • A subclass of ActionForm is used to submit the date as application needed.
  • A subclass of Action class which provide specific processing functionality for the application.
  • A web.xml file is required for calling ActionServlet and struts-config.xml.
  • A struts-config.xml file is required for updating and mapping the update.

Let's Start the application, this application provide a good understanding how struts framework works and also understanding the development of Struts applications.

Now, Following the some steps for develop your first application name as FileUpload. FileUpload application contain following page-

  • Three View file name as index.jsp and Dispaly.jsp
  • One DynaActionForm class name as a UploadForm, used for store data as application need.
  • One Action class name as UploadAction.java, used for provide specific processing functionality.
  • Two XML file name as web.xml and struts-config.xml file, used for provide control, mapping and validation in application.

Step- 1 : Start your IDE ( NetBeans 6.8 with struts 1.3)

Step- 2 : Open a new project( Crtl+Shift+N), name it , add server( Apache Tomcat 6.0.20 ), then add struts framework 1.3 , and don't forget to add Struts TLDs.

Note:-When you click Finish button, your NetBeans IDE configure everything in place and project open in your IDE.

Step- 3: Open index.jsp page, from your struts application and code it as describe below.

<%-- Document    : index.jsp
Description : First Page of FileUpload_2 Application--%>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" 
prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" 
prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" 
prefix="logic" %>
<html:html lang="true">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title><bean:message key="welcome.title"/></title>
    </head>
    <body style="background-color: white">
<html:form method="post" action="/upload" 
enctype="multipart/form-data">
<h1><bean:message key="welcome.heading"/></h1>
<html:errors />
<ul>
    <table border="0" cellspacing="4" cellpadding="4">
<tbody>
    <tr>
<td><bean:message key="welocome.first" /></td>
<td><html:text property="name" size="30"/></td>
    </tr>
    <tr>
<td><bean:message key="welocome.second" /></td>
<td><html:file property="document" size="30" /></td>
    </tr>
    <tr>
<td></td>
<td align="left"><html:submit 
value=" FileUpload " /></td>
    </tr>
</tbody>
    </table>
</ul>
</html:form>
    </body>
</html:html>

Step- 4: Open Display.jsp page, from your struts application and code it as describe below.

<%-- Document: display.jsp
 Description : Second Page of FileUpload_2 Application--%>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean"
prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" 
prefix="html" %>
<html:html lang="true">
<head>
<meta http-equiv="Content-Type" 
content="text/html; charset=UTF-8">
   <title>Display page</title>
</head>
<body style="background-color: white">
<h1><bean:message key="welcome.dispaly" /></h1>
<ul>
Name of File: <b> <bean:write name="UploadForm"
property="name" /></b><BR><BR>
Name of Upload File: <b> <bean:write name="UploadForm" 
property="document" /></b><BR><BR>
Size of Upload File: <b>
<%= request.getAttribute("SizeofFile")%> bytes </b>
<BR><BR>
<img src="<bean:write name="UploadForm"
property="document" />" width="500" height="300"
 alt="<bean:write name="UploadForm"
 property="name" />" /> <BR><BR>
<strong>Only Image file display, but you can esily 
download any file link given below </strong><BR><BR>
<a href="<bean:write name="UploadForm" 
property="document"/>">  Click here to download that file </a>
</ul>
</body>
</html:html>

Step- 5: Open web.xml file place in WEB-INF folder, this file is used to map the ActionServlet( work as backbone of application, every Action, Validation and ActionForm class control by this class) , struts-config.xml file, welcome file and five different TagLibrary.

<!-- Save as a web.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<!-- ActionServlet map here, however you can't find 
this class within the project but it work as a backbone
of the project -->
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet</servlet-class>
<!-- Your struts-config.xml file map here-->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Action class map with URL -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<!-- Welcome file map here: -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<jsp-config>
<!-- All the Tag Library which used with in the project -->
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld
</taglib-location>
</taglib>
</jsp-config>
</web-app>

Step- 6: Open struts-config.xml file place in WEB-INF folder, this file is used to map Model class, Exception class, Validation class, Action class( Action class further choose View class) and ApplicationResource class.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation
//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts
/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- Used DynaAction Class -->
<form-beans>
<form-bean name="UploadForm" 
type="org.apache.struts.action.DynaActionForm" >
<form-property name="name" 
type="java.lang.String" />
<form-property name="document" 
type="org.apache.struts.upload.FormFile" />
</form-bean>
</form-beans>
<global-exceptions>
</global-exceptions>
<global-forwards>
</global-forwards>
<action-mappings>
<action input="/index.jsp" name="UploadForm" path="/upload"
scope="request" type="com.myapp.struts.UploadAction">
<forward name="success" path="/display.jsp"/>
<forward name="failure" path="/index.jsp"/>
</action>
</action-mappings>
<controller processorClass="org.apache.struts
.tiles.TilesRequestProcessor"/>
<message-resources parameter="com/myapp/struts
/ApplicationResource"/>
<!-- ========= Tiles plugin =========-->
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config"
value="/WEB-INF/tiles-defs.xml" />
<set-property property="moduleAware" value="true" />
</plug-in>
<!-- =========== Validator plugin =========== -->
<plug-in className="org.apache.struts
.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>

Step- 7: Now introduce Bean class into struts-config.xml file, Since In this application we used DynaActionClass so no need to make another Bean/Form class.

/* Save as a UploadForm.java
 * Bean class of FileUpload Application */
package r4r.struts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;
public class UploadForm extends 
	org.apache.struts.action.ActionForm {
private String name = null;
private FormFile document = null;
public String getName() {
return name;
}
public void setName(String string) {
name = string;
}
public FormFile getDocument() {
return document;
}
public void setDocument(FormFile document) {
this.document = document;
}
public UploadForm() {
super();
}
//Reset method
@Override
public void reset(ActionMapping mapping, 
	HttpServletRequest request) {
name = null;
document = null;
}
/* This is the action called from the Struts framework.*/
@Override
public ActionErrors validate(ActionMapping mapping
	, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (name == null || name.length() < 1) {
errors.add("name", new ActionMessage
	("error.name.required"));
}
if (document.getFileSize() == 0) {
errors.add("Zerosize", new ActionMessage
	("error.Zerosize.required"));
}
return errors;
}
}

Step- 8: Introduce Action class in to struts-config.xml file, as we define in our first application, that Netbean IDE able to configure your action class in struts-config.xml file

/* Save as a UploadAction.java
 * Action class of FileUpload_2 application */
package com.myapp.struts;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.upload.FormFile;
public class UploadAction extends 
org.apache.struts.action.Action {
/* forward name="" path="" */
private static final String SUCCESS = "success";
private static final String FAILURE = "failure";
private FileOutputStream outputStream = null;
 private FormFile formFile = null;
/* This is the action called from the Struts framework. */
@Override
public ActionForward execute
(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
DynaActionForm actionForm = (DynaActionForm) form;
ActionErrors errors = new ActionErrors();
//Set up flag
boolean flag1 = false;
// Provide validation into JSP page
String name = (String) actionForm.get("name");
formFile = (FormFile) actionForm.get("document");
if (name == null || name.length() < 1) {
errors.add("name", new ActionMessage("error.name"));
}
if (formFile.getFileSize() == 0) {
errors.add("size", new ActionMessage("error.size"));
}
   /*Save error messages keys into HTTP request a
   ttribute for use by the <html:errors> tag*/
saveErrors(request, errors);
if (errors.isEmpty()) {
flag1 = true;
} else {
flag1 = false;
}
// Now Upload document into Browser
try {
//Provide the real path of document
String path = getServlet().getServletContext()
.getRealPath("") + "/" + formFile.getFileName();
outputStream = new FileOutputStream(new File(path));
outputStream.write(formFile.getFileData());
} catch (IOException ex) {
// throw new IOException(ex.fillInStackTrace());
} finally {
if (outputStream != null) {
outputStream.close();
}
}
//set property of document in DynaActionForm
actionForm.set("document", formFile);
//Set property direct into JSP page
request.setAttribute("SizeofFile",
formFile.getFileSize());
if (flag1 == true) {
return mapping.findForward(SUCCESS);
} else {
return mapping.findForward(FAILURE);
}
}
}

Run your application:

Now your application is complete, so now start run your application. Start your server( which you embedded when configure our struts application), then right click your application and click upon Run option or open your welcome( index.jsp) page and press shift+F6.

Task-1: Upload Image into browser.

Check validation in to JSP page.

File successfully upload into browser( also display the size of document).

Task-2 Upload a Zip document into browser.

Previous Home Next