Beispiel für ein dynamisches Bild von Struts 2
In diesem Tutorial zeigen wir Ihnen, wie Sie in Struts 2 mithilfe eines benutzerdefinierten Ergebnistyps ein dynamisches Bild generieren. Zum Beispiel,
Der Wert vonimageId
ist der Image-Name in Ihrem Serverpfad. Im obigen Fall gibt die KlasseImageAction
die Bilddatei basierend auf dem Parameter imageId aus.
In diesem Tutorial verwendete Werkzeuge und Streben:
-
Streben 2.3.1.2
-
Eclipse 3.7
-
Maven 3
1. Verzeichnisaufbau
Verzeichnisstruktur dieses Tutorials. Überprüfen Sie den Pfad der Bilddatei.
2. Aktionsklasse
File : DisplayAction.java - Eine normale Aktion, nichts tun.
package com.example.image.action; import com.opensymphony.xwork2.ActionSupport; public class DisplayAction extends ActionSupport { }
File : ImageAction.java - Kernaktionsklasse, um das Bild basierend auf dem angegebenenimageId
-Parameter abzurufen und in ein Byte-Array zu konvertieren.
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. Benutzerdefinierter Ergebnistyp
Ein benutzerdefinierter Ergebnistyp und Ausgabe des Bildes an den Browser.
Datei: 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
Sehen Sie, wie alles miteinander verbunden ist.
Datei: struts.xml
pages/display.jsp
5. JSP-Seite
Eine JSP-Seite zum Anzeigen des dynamischen Bildes überImageAction
.
Datei: display.jsp
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>Struts 2 Dynamic Image Example
![]()
Quellcode herunterladen
Laden Sie es herunter -Struts2-Dynamic-Image-Example.zip (26kb)