Struts 2の動的イメージの例
このチュートリアルでは、カスタム結果タイプを使用してStruts 2で動的イメージを生成する方法を説明します。例えば、
<img src="<s:url action='ImageAction?imageId=darksouls.jpg'/>"/>
`imageId`の値はあなたのサーバーパスのイメージ名です。上記の場合、 `ImageAction`クラスはimageIdパラメータに基づいて画像ファイルを出力します。
このチュートリアルで使用されているツールとStruts:
-
Struts 2.3.1.2
-
Eclipse 3.7
-
Maven 3
1.ディレクトリ構造
このチュートリアルのディレクトリ構造。画像ファイルのパスを確認します。

2.アクションクラス
File:DisplayAction.java
– 通常の動作です。何もしません。
package com.mkyong.image.action;
import com.opensymphony.xwork2.ActionSupport;
public class DisplayAction extends ActionSupport {
}
File:ImageAction.java
– コアアクションクラス。提供された `imageId`パラメータに基づいてイメージを取得し、バイト配列に変換します。
package com.mkyong.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.カスタム結果の種類
カスタムの結果の種類、およびブラウザに画像を出力します。
File:CustomImageBytesResult.java
package com.mkyong.image.result;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.mkyong.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
すべてがどのようにリンクされているかをご覧ください。
File:struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="image" namespace="/Image" extends="struts-default">
<result-types>
<result-type name="imageResult"
class="com.mkyong.image.result.CustomImageBytesResult"/>
</result-types>
<action name="Display" class="com.mkyong.image.action.DisplayAction">
<result>pages/display.jsp</result>
</action>
<action name="ImageAction" class="com.mkyong.image.action.ImageAction">
<result name="success" type="imageResult">
</result>
</action>
</package>
</struts>
5. JSPページ
`ImageAction`を使って動的イメージを表示するJSPページ。
File:display.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
<h1>Struts 2 Dynamic Image Example</h1>
<img src=" <s:url action='ImageAction?imageId=darksouls.jpg'/>"/>
</body>
</html>
ソースコードをダウンロードする
ダウンロードする – リンク://wp-content/uploads/2012/02/Struts2-Dynamic-Image-Example.zip[Struts2-Dynamic-Image-Example.zip](26kb)
参考文献
動的イメージをバイト配列として表示]。
http://balusc.blogspot.com/2007/04/imageservlet.html
[image servlet
例]。
Struts2 URLタグの例
-
リンク://java/how-to-convert-byte-to-bufferedimage-in-java/[変換
Javaの配列のバイト数の画像]。
https://cwiki.apache.org/WW/stream-result.html
[Struts2 stream result
例]
