Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Struts2 posee una amplia gama de funciones que permiten hacer mas gil el desarrollo y que estn
puestas a disposicin de los desarrolladores a travs de los interceptores que vienen por default.
Usaremos FileUploadInterceptor en nuestro ejemplo para subir el archivo. El Struts 2 Carga de
archivos Interceptor se basa en MultiPartRequestWrapper, que se aplica de forma automtica a la
solicitud si contiene el elemento de archivo.
userImage.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
<h2>File Upload</h2>
<s:actionerror />
<s:form action="userImage" method="post" enctype="multipart/form-data">
<s:file name="userImage" label="Imagen" />
<s:submit value="Cargar"/>
</s:form>
</body>
</html>
SuccessUserImage.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
<h2>File Upload</h2>
NOMBRE : <s:property value="userImageFileName"/>
<br/>
<%-TIPO : <s:property value="userImageContentType"/>
<br/>
RUTA : <s:property value="userImage"/>
<br/>
--%>
IMAGEN :
<br/>
<img src="<s:property value="userImageFileName"/>"/>
</body>
</html>
FileUploadAction.java
import
import
import
import
import
java.io.File;
javax.servlet.http.HttpServletRequest;
org.apache.commons.io.FileUtils;
org.apache.struts2.interceptor.ServletRequestAware;
com.opensymphony.xwork2.ActionSupport;
FileUtils.copyFile(this.userImage, fileToCreate);
}
catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
return INPUT;
}
return SUCCESS;
}
public File getUserImage() {
return userImage;
}
public void setUserImage(File userImage) {
this.userImage = userImage;
}
public String getUserImageContentType() {
return userImageContentType;
}
public void setUserImageContentType(String userImageContentType) {
this.userImageContentType = userImageContentType;
}
public String getUserImageFileName() {
return userImageFileName;
}
public void setUserImageFileName(String userImageFileName) {
this.userImageFileName = userImageFileName;
}
@Override
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
}
</interceptor-ref>
<interceptor-ref name="defaultStack"> </interceptor-ref>
<result name="success">SuccessUserImage.jsp</result>
<result name="input">UserImage.jsp</result>
</action>
</package>
</struts>
CARGA DE ARCHIVOS
El interceptor FileUpload est dado de alta en la pila de interceptores del paquete default que
maneja Struts2.
org.apache.struts2.interceptor.FileUploadInterceptor
Si ya tenemos configurado nuestro proyecto solo es necesario agregar estas libreras:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
Lo primero que haremos es crear un formularioDeCargaDeArchivo.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head> </head>
<body>
<h1>Carga de archivos</h1>
<s:form action="CargaArchivo" method="post" enctype="multipart/formdata">
<s:file name="archivo" label="Agregar Archivo"/>
<s:submit value="Subir"/>
</s:form>
</body>
</html>
com.opensymphony.xwork2.ActionSupport;
java.io.BufferedReader;
java.io.File;
java.io.FileReader;
La variable de tipo File tiene un nombre arbitrario, sin embargo las otras dos deben cumplir con un
formato establecido para que el interceptor pueda encontrarlas y establecer los datos
correspondientes al tipo de contenido y al nombre del archivo.
archivo - Es el nombre del archivo.
archivoContentType - Contiene el tipo de contenido del archivo.
archivoFileName - Contiene el nombre del archivo tal como fue almacenado en el servidor.
Con esto el Framework a travs del inteceptor toma el archivo y lo relacione con las variables que
declaramos en el Action.
Creamos la jsp de respuesta archivoCargado.jsp, que solo mostrar algunos datos del archivo que
se esta subiendo al servidor.
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head> </head>
<body>
<h1>Archivo cargado con exito</h1>
Nombre del archivo : <s:property value="archivoFileName"/><br>
Contenido del archivo :<br>
<s:textarea name="dat" value="%{datos}" cols="50" />
</body>
</html>
Cambiamos el archivo de configuracin de struts.xml para hacer referencia a las clases y jsps que
acabamos de crear.
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="FormularioCargaArchivo" >
<result>/formularioDeCargaDeArchivo.jsp</result>
</action>
<action name="CargaArchivo" class="AccionCargaArchivo">
<result>/archivoCargado.jsp</result>
<result name="input">/formularioDeCargaDeArchivo.jsp</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>formularioDeCargaDeArchivo.jsp</welcome-file>
</welcome-file-list>
</web-app>
DESCARGA DE ARCHIVOS
Para descargar un fichero con Struts 2, seguimoes estos 3 pasos:
1. slo tenemos que crear un atributo de tipo FileInputStream en nuestro Action,
asegurndonos de incluir su getter y su setter, de modo que el controlador pueda hacer uso
del mismo.
2. Por otro lado, configuramos un nuevo result de tipo stream en nuestro struts.xml,
3. y crear el enlace de descarga en nuestra JSP.
downloadPage.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<h1>Descarga de Archivos</h1>
<s:url id="fileDownload" namespace="/" action="download" ></s:url>
<h4>
Download file - <s:a href="%{fileDownload}">fileABC.txt</s:a>
</h4>
</body>
</html>
DownloadAction.java
import
import
import
import
java.io.File;
java.io.FileInputStream;
java.io.InputStream;
com.opensymphony.xwork2.ActionSupport;
struts.xml
<?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" />
<package name="default" namespace="/" extends="struts-default">
<action name="">
<result name="success">downloadPage.jsp</result>
</action>
<action name="download" class="DownloadAction">
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename="fileABC.txt"</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSch
ema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>downloadPage.jsp</welcome-file>
</welcome-file-list>
</web-app>