java - 如何在 Struts 2 中将 QRCode 图像从操作类发送并显示到 JSP

标签 java image jsp struts2 qr-code

我正在提交带有字符串的 JSP 表单,并在提交时调用 Struts 2 操作。在该操作中,我使用 QRGen 库创建 QRCode 图像,如下所示

File QRImg=QRCode.from("submitted String").to(ImageType.PNG).withSize(100, 100).file();

我的 JSP 表单:

<form action="createQR">
Enter Your Name<input type="text" name="userName"/><br/>
<input type="submit" value="Create QRCode"/>
</form>

我的操作映射struts.xml:

<action name="createQR" class="CreateQRAction">
 <result name="success">displayQR.jsp</result>
</action>

我的操作类:

import java.io.File;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.image.ImageType;  
import com.opensymphony.xwork2.ActionSupport;
public class CreateQRAction extends ActionSupport{
 private File QRImg;
 Private String userName;

 public String execute() {
   QRImg=QRCode.from(userName).to(ImageType.PNG).withSize(100, 100).file();
return SUCCESS;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}
public File getQRImg() {
    return QRImg;
}

public void setQRImg(File QRImg) {
    this.QRImg = QRImg;
}
}

现在,如果结果成功,我想在我的 JSP 上显示此图像。

<s:property value="QRImg"/>

最佳答案

看来您需要采取行动 <s:url您可以将其替换为 <img标记为href属性来检索图像类似于使用静态图像,如/images文件夹。

我们称之为ImageAction 。这是一个写入响应的简单操作。要使用它,您需要将带有图像的文件放入 session 中。因为图像是由单独的线程检索的。在execute方法中写入

@Action(value = "image",  interceptorRefs = @InterceptorRef("basicStack"))
public class ImageAction extends ActionSupport {

public String execute() {

从 session 中获取文件

File file = session.get("file");

那么你需要读取文件

FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();

然后写入响应输出

response.setContentType("image/png");

BufferedImage bi;
OutputStream os = response.getOutputStream();
bi = ImageIO.read(new ByteArrayInputStream(data));
ImageIO.write(bi, "PNG", os);
os.flush();

并返回 NONE 结果,因为此操作仅写入响应

return NONE;
}

完成

然后在从您的操作转发的 JSP 中只需使用 <img src="<s:url action="image"/>" style="width:100%;"/> 。如果需要添加路径,请在 url 中的操作和属性上使用 namespace 注释。

我觉得您熟悉Struts2中的 session 概念,即如何将 session 注入(inject)到您的操作中并在其中映射对象。在返回结果之前,在您的操作中映射文件对象。

祝你好运。

关于java - 如何在 Struts 2 中将 QRCode 图像从操作类发送并显示到 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269541/

相关文章:

jsp - Struts 2 嵌套迭代器

html - 如何生成自动页脚而不必在我创建的每个新 jsp 页面中隐式定义页脚?

java - 为什么忽略不相关方法上的 Autowired

ios - 从 Photos.app 获取最后一张图片?

html - 网站图片重叠(Shopify)

html - 为事件添加 IMG 标签

java - 编译后的 JSP 在 WepSphere 应用程序服务器中的位置

java - org.slf4j.Logger 记录到控制台,如何记录到文件?

java - 为什么这些字段在首次使用之前没有被初始化?

java - Android - 从 SDCard 中删除数据