Struts 2 Beispiel für ein dynamisches Bild

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:

  1. Streben 2.3.1.2

  2. Eclipse 3.7

  3. Maven 3

1. Verzeichnisaufbau

Verzeichnisstruktur dieses Tutorials. Überprüfen Sie den Pfad der Bilddatei.

struts2 dynamic image directory structure

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)