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
例]