Action接口:QRAction.java

import java.io.FileInputStream;
import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opensymphony.xwork2.ActionSupport;


public class QRCodeAction extends ActionSupport{
    private static final long serialVersionUID = 2345787210526965802L;
	
	private static Logger log = LoggerFactory.getLogger(QRCodeAction.class);

    private String url;

    public String produce(){
		try{
			QRCode qr = new QRCode();
			String imgPath = "/tmp/" + System.currentTimeMillis() + ".png";
			qr.encoderQRCode(url.replaceAll("\\*", "\\&"), imgPath);
			FileInputStream is = new FileInputStream(imgPath);
			ServletActionContext.getContext().put("imageStream", is);
			//删除缓存的二维码图片
			deleteFile(imgPath);
			
		}catch(Exception e){
			log.error("生成二维码错误", e);
		}
		
		return "produce";
	}

    public static boolean deleteFile(String fileName) {
		File file = new File(fileName);
		if (file.isFile() && file.exists()) {
			file.delete();
			return true;
		} else {
			return false;
		}
	}

    public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
}

二维码工具类QRCode.java:

import net.glxn.qrgen.javase.QRCode;
import java.io.File;
import java.io.OutputStream;

public class QRCode {
	
	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param imgPath 图片路径
	 */
	public void encoderQRCode(String content, String imgPath) {
		this.encoderQRCode(content, imgPath, "png", 7);
	}
    
    /**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param imgPath 图片路径
	 * @param imgType 图片类型
	 * @param size 二维码尺寸
	 */
	public void encoderQRCode(String content, String imgPath, String imgType, int size) {
		try {
			File imgFile = new File(imgPath);
			// 生成二维码QRCode图片
			int imgSize = 0;			
			imgSize = 67 + 12 * (size - 1);
			File file = QRCode.from(new String(content.getBytes("utf-8"))).withSize(imgSize, imgSize).file();
			file.renameTo(imgFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

struts配置:

<?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="qrcode" namespace="/qrcode" extends="demo">
        <global-results>
			<result name="jsonResult" type="json">
				<param name="root">queryJson</param>
			</result>
		</global-results>
	   <action name="*QRCode" class="qRCode" method="{1}" >
	   		<result name="produce" type="stream">
			 	<param name="contentType">image/png</param>  
	            <param name="inputName">imageStream</param>
	        </result> 
	        <interceptor-ref name="defaultStack" />
  	   </action>
    </package>
</struts>

jsp页面:

图片标签的src属性值为后台接口地址

<img src="" id="code">
<script>
jQuery(document).ready(function() {
//图片标签的src属性值为后台接口地址,页面初始化就会掉后台接口,或者手动控制js在合适时机调接口
$("#code").attr('src','${web.context.path}/qrcode/produceQRCode?url='+previewUrl);
//previewUrl为要转成二维码的页面url,或者单纯的文字字符串
}

</script>

 


本文转载:CSDN博客