Пример динамического изображения Struts 2
В этом уроке мы покажем вам, как создать динамическое изображение в Struts 2 с помощью пользовательского типа результата. Например,
ЗначениеimageId - это имя изображения в пути к вашему серверу. В приведенном выше случае классImageAction будет выводить файл изображения на основе параметра imageId.
Инструменты и Struts, используемые в этом руководстве:
-
Struts 2.3.1.2
-
Затмение 3.7
-
Maven 3
1. Структура каталогов
Структура каталогов этого урока. Просмотрите путь к файлу изображения.

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
Страница JSP для отображения динамического изображения черезImageAction.
Файл: display.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
Struts 2 Dynamic Image Example
Скачать исходный код
Скачать -Struts2-Dynamic-Image-Example.zip (26kb)

