Exemple d’image dynamique Struts 2

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:

  1. Struts 2.3.1.2

  2. Eclipse 3.7

  3. Maven 3

1. Structure du répertoire

Structure de répertoire de ce didacticiel. Vérifiez le chemin du fichier image.

struts2 dynamic image directory structure

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)