Struts 2の動的イメージの例

Struts 2ダイナミックイメージの例

このチュートリアルでは、カスタム結果タイプを使用してStruts 2で動的イメージを生成する方法を示します。 例えば、

imageIdの値は、サーバーパスのイメージ名です。 上記の場合、ImageActionクラスはimageIdパラメーターに基づいて画像ファイルを出力します。

このチュートリアルで使用されるツールとStruts:

  1. Struts 2.3.1.2

  2. Eclipse 3.7

  3. メーベン3

1. ディレクトリ構造

このチュートリアルのディレクトリ構造。 イメージファイルのパスを確認します。

struts2 dynamic image directory structure

2. アクションクラス

File : DisplayAction.java –通常のアクションで、何もしません。

package com.example.image.action;

import com.opensymphony.xwork2.ActionSupport;

public class DisplayAction extends ActionSupport  {

}

File : ImageAction.java –コアアクションクラス。指定されたimageIdパラメータに基づいて画像を取得し、バイト配列に変換します。

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. カスタム結果タイプ

カスタム結果タイプ。画像をブラウザに出力します。

ファイル: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

すべてが一緒にリンクされている方法を参照してください。

ファイル:struts.xml





    

        
            
        

        
            pages/display.jsp
        

        
            
            
        

    

5. JSPページ

ImageActionを介して動的画像を表示するJSPページ。

ファイル:display.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>



    

Struts 2 Dynamic Image Example

6. Demo

出力を参照してください。

struts2 dynamic image demo

ソースコードをダウンロード

ダウンロード–Struts2-Dynamic-Image-Example.zip(26kb)