前言
完成二维码生成功能
过程:
用户访问生成二维码的页面,并输入要在二维码上显示的内容,并点击生成按钮提交数据。服务端将该请求交给生成二维码的Servlet来处理,在其中我们获取到用户输入的信息并生成二维码数据,然后通过设置响应回复给浏览器显示该二维码图片。
实现:
1:在webapps/myweb目录下新建一个页面:createQR.html并在index.html页面中添加超链接访问这个页面,再新建两个成功和失败的页面(过于简单,不再展示代码)
2:createQR.html上定义一个表单,其中有一个输入框,用于输入二维码中的内容。表单提交路径定义为:createQR
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>生成二维码</title>
</head>
<body>
<center>
<h1>生成二维码</h1>
<form action="./createQR">
<table>
<tr>
<td><input name="qrcode" type="text" size="64"></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
(再附上之前的用户列表展示的超链接)
3:在com.webserver.servlet包下新建类:CreateQRServlet并定义service方法。
/**
* 生成二维码
* @Author JIANG
*/
public class CreateQRServlet {
public void service(HttpRequest request, HttpResponse response) {
System.out.println("CreateQRServlet:开始生成二维码...");
String qrcode = request.getParameter("qrcode");
try {
/*
* ByteArrayOutputStream是一个低级流,其内部为一个数组字节,
* 通过这个流写出的所有字节最终都会保存在该数组中。
*/
ByteArrayOutputStream out = new ByteArrayOutputStream();
//生成二维码
QRCodeUtil.encode(qrcode, out);
//通过ByteArrayOutputStream获取写完的所有字节
byte[] data = out.toByteArray();
response.setData(data);
response.putHeader("Content-Type","image/jpeg");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("CreateQRServlet:生成二维码完毕!");
}
}
4:在ClientHandler中添加分支,如果是请求生成二维码就实例化该Servlet并调用service处理。
至此,我们这个简易版的Tomcat所有的功能到此就实现完毕,功能里的代码都比较简单,主要是想体现里面所用到的API和Servlet的一些思想,下个版本还会继续重构项目的部分代码。