Exemple d'image dynamique Struts 2
Dans ce tutoriel, nous vous montrons comment générer une image dynamique dans Struts 2, via un type de résultat personnalisé. Par exemple,
La valeur deimageId
est le nom de l'image dans le chemin de votre serveur. Dans le cas ci-dessus, la classeImageAction
affichera le fichier image en fonction du paramètre imageId.
Outils et entretoises utilisés dans ce didacticiel:
-
Struts 2.3.1.2
-
Eclipse 3.7
-
Maven 3
1. Structure du répertoire
Structure de répertoire de ce didacticiel. Vérifiez le chemin du fichier image.
2. Classe d'action
File : DisplayAction.java - Une action normale, ne rien faire.
package com.example.image.action; import com.opensymphony.xwork2.ActionSupport; public class DisplayAction extends ActionSupport { }
File : ImageAction.java - classe d'action principale, pour obtenir l'image en fonction du paramètreimageId
fourni et la convertir en tableau d'octets.
package com.example.image.action; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; public class ImageAction extends ActionSupport implements ServletRequestAware { byte[] imageInByte = null; String imageId; private HttpServletRequest servletRequest; public String getImageId() { return imageId; } public void setImageId(String imageId) { this.imageId = imageId; } public ImageAction() { System.out.println("ImageAction"); } public String execute() { return SUCCESS; } public byte[] getCustomImageInBytes() { System.out.println("imageId" + imageId); BufferedImage originalImage; try { originalImage = ImageIO.read(getImageFile(this.imageId)); // convert BufferedImage to byte array ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", baos); baos.flush(); imageInByte = baos.toByteArray(); baos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return imageInByte; } private File getImageFile(String imageId) { String filePath = servletRequest.getSession().getServletContext().getRealPath("/"); File file = new File(filePath + "/Image/", imageId); System.out.println(file.toString()); return file; } public String getCustomContentType() { return "image/jpeg"; } public String getCustomContentDisposition() { return "anyname.jpg"; } @Override public void setServletRequest(HttpServletRequest request) { this.servletRequest = request; } }
3. Type de résultat personnalisé
Un type de résultat personnalisé et la sortie de l'image vers le navigateur.
Fichier: CustomImageBytesResult.java
package com.example.image.result; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.example.image.action.ImageAction; public class CustomImageBytesResult implements Result { public void execute(ActionInvocation invocation) throws Exception { ImageAction action = (ImageAction) invocation.getAction(); HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(action.getCustomContentType()); response.getOutputStream().write(action.getCustomImageInBytes()); response.getOutputStream().flush(); } }
4. Struts.xml
Voyez comment tout est lié.
Fichier: struts.xml
pages/display.jsp
5. Page JSP
Une page JSP pour afficher l'image dynamique viaImageAction
.
Fichier: display.jsp
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>Struts 2 Dynamic Image Example
![]()
Télécharger le code source
Téléchargez-le -Struts2-Dynamic-Image-Example.zip (26kb)