Java Web二维码实例(SpringMvc/Struts2) dome - Go语言中文社区

Java Web二维码实例(SpringMvc/Struts2) dome


       前些时间修改项目时,无意间看到二维码这一功能,觉着挺新潮的况且现在普及率这么高。于是并未深究,而是照搬他人做留的资料进行了整理,以及弄了个小荔枝(例子)。英语渣,对源码什么的不太懂,这里仅仅只是拿了别人的代码后进行了实现而已。 

二维码简介:

       二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。     以上来自百度百科:二维码(百度百科)

二维码原理解析:

一、什么是QR

QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JISISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下:

这个图如果被正确解码,应该看到我的名字和邮箱。

二、QR码的特点

说到QR码的特点,一是高速读取(QR就是取自“Quick Response”的首字母),对读取速度的体验源自于我手机上的一个软件,象上面贴出的码图,通过摄像头从拍摄到解码到显示内容也就三秒左右,对摄像的角度也没有什么要求;

二是高容量、高密度;理论上内容经过压缩处理后可以存7089个数字,4296个字母和数字混合字符,29538位字节数据,1817个汉字;

三是支持纠错处理;纠错处理相对复杂,目前我还没有深入了解,按照QR码的标准文档说明,QR码的纠错分为4个级别,分别是:

·         level L : 最大 7%的错误能够被纠正;

·         level M : 最大 15%的错误能够被纠正;

.....

............

     上述资料来源:http://blog.csdn.net/songylwq/article/details/8643948

备注:自己并非懂这一实现原理,这里只是基于上述博客进行了整理


JavaWEB实现

     注意喔,以下实现还是基于上述的解析教程而来,所以代码这些也是从上面直接Ctrl+C——>> Ctrl+V而来。
在做这一实现时,可能频繁使用到的场景一般都基于框架,常用的框架一般为 Struts+Spring+Hibernate  以及现在更流行的SpringMVC+Spring+Mybatis(当然还有其他组合),作为MVC设计模式中的Controller层,普遍分为Struts2及SpringMvc两大主要阵营。

一.SpringMVC实现

  1. 使用杀手锏Ctrl+C   Ctrl+V 将上述代码至自己的项目下,直接建Class复制张贴即可。
如下:

  复制的代码来源-》》》      上述资料来源:http://blog.csdn.net/songylwq/article/details/8643948  
这里面去找那两段代码,没错就是这么任性直接复制。。。。。

     2.  QRCode.jar  自行下载丢在WEB-INF 目录下,导入至项目中      这个jar包是单独的,换句话说 “二维码的生成与框架环境无关” 这里说的SpringMvc使用的情景只是如何将已生成的二维码通过框架将其展现反馈。
     3.  在Controller其请求方法中进行二维码的生成并反馈,上述资料直接用的是Main方法进行的实现。
附上个人代码:
package cn.thinknet.control;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import cn.thinknet.utils.ewm.TwoDimensionCode;
@Controller
@RequestMapping(value="erwmControl")
public class ErwmControl {
	
	@RequestMapping(value="getErweimaImg")
	public void  getErweimaImg(HttpServletRequest req,HttpServletResponse resp,HttpSession session){
		String url = req.getParameter("url");
		TwoDimensionCode handler = new TwoDimensionCode();
		BufferedImage image = handler.qRCodeCommon(url, "jpeg", 6);
		//2.将图片对象赋值给imageStream属性
		ByteArrayOutputStream bos = 
				new ByteArrayOutputStream();
		JPEGImageEncoder encoder = 
				JPEGCodec.createJPEGEncoder(bos);
		try {
			encoder.encode(image);//将image压缩成jpeg格式
			byte[] bytes = bos.toByteArray();
			
			 //上面都是生成图片,SpringMvc中如何将图片展现,主要是以下
			 OutputStream stream = resp.getOutputStream();
		     stream.write(bytes);
		     stream.flush();
		     stream.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
     4.浏览器中输入请求地址,看是否有反馈。
  
 嗯哼,效果已出,美滋滋 。。。。

  最后实现动态二维码的步骤为:  创建img对象,通过Jquery/JavaScript 来对img对象的src属性赋初始值,它会自动去后台获取相应的图片。

<script type="text/javascript">
$(function(){
	
	$(".pimg").click(function(){
		var pid=$(this).attr("pid");
		window.parent.location.href="<%=basePath%>downformph?productid=" + pid;
		});

	});
</script>
<img src="${p.icon }" class="pimg" pid="${p.id }" width="912"  height="150" >


二.Struts2实现

  直接上有用代码部分,
Struts2.xml
<package name="struts2" extends="json-default" >		<action name="twoimage" class="com.out.download.TwoImageAction">
				<result name="success" type="stream">
					<param name="inputName">imageStream</param>
				</result>
		</action>
 	</package>
action
package com.out.download;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.wrt.utils.TwoDimensionCode;

public class TwoImageAction {
	private InputStream imageStream;
	private String url;
	public String execute(){
		TwoDimensionCode handler = new TwoDimensionCode();
		BufferedImage image = handler.qRCodeCommon(url, "jpeg", 6);
		//2.将图片对象赋值给imageStream属性
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
		try {
			encoder.encode(image);//将image压缩成jpeg格式
			//将图片压缩结果从bos中取出,给imageStream
			byte[] bytes = bos.toByteArray();
			imageStream = new ByteArrayInputStream(bytes);
			return "success";//result(stream)
		} catch (Exception e) {
			e.printStackTrace();
			return "success";//result(stream)
		}
	}
	public InputStream getImageStream() {
		return imageStream;
	}
	public void setImageStream(InputStream imageStream) {
		this.imageStream = imageStream;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
}

别问我为什么可以,因为我也不知道哭哭哭哭


好吧,附上一个SpringMvc的Dome。  项目文件较大随便弄了弄,勿见怪。  



  


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dcb_ripple/article/details/53307367
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 10:45:09
  • 阅读 ( 911 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢