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 KlasseImageActiondie 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)

