- 先看看二维码的形成代码
<pre name="code" class="java">public class TwoDimensionCodeServlet extends HttpServlet {
private int w = 100;
private int h = 100;
/**
* 忽略大小写校验.
*/
public static boolean validate(HttpServletRequest request, String validateCode) {
String code = (String) request.getSession().getAttribute(SysConstants.SESSION_VALIDATE_CODE);
return validateCode.toUpperCase().equalsIgnoreCase(code);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String validateCode = request.getParameter(SysConstants.SESSION_VALIDATE_CODE); // AJAX验证,成功返回true
if (StringUtils.isNotBlank(validateCode)) {
response.getOutputStream().print(validate(request, validateCode) ? "true" : "false");
} else {
this.doPost(request, response);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
/*
* 得到参数高,宽,都为数字时,则使用设置高宽,否则使用默认值
*/
String width = request.getParameter("width");
String height = request.getParameter("height");
if (StringUtils.isNumeric(width) && StringUtils.isNumeric(height)) {
w = NumberUtils.toInt(width);
h = NumberUtils.toInt(height);
}
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
String url = request.getParameter("url");
try {
BitMatrix byteMatrix = new MultiFormatWriter().encode(new String(url.getBytes("UTF-8"), "UTF-8"), BarcodeFormat.QR_CODE, 100, 100); //将文字转换成二维矩阵,并设置矩阵大小,这里的矩阵大小就是后面生成的图片像素大小
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(byteMatrix);
g.dispose();
OutputStream out = response.getOutputStream();
ImageIO.write(bufferedImage, "JPEG", out);
out.close();
} catch (WriterException e) {
e.printStackTrace();
}
}
}
- 再看一下servlet的定义web.xml中
<!--二维码生成的Servlet-->
<servlet>
<servlet-name>TwoDimensionCodeServlet</servlet-name>
<servlet-class>com.mdy.utils.servlet.TwoDimensionCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TwoDimensionCodeServlet</servlet-name>
<url-pattern>/share/2dimensioncode</url-pattern>
</servlet-mapping>