0
public class QRCodeServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String qrtext = request.getParameter("qrtext");
            ByteArrayOutputStream out = QRCode.from(qrtext).to(ImageType.PNG).stream();

            response.setContentType("image/png");
            response.setContentLength(out.size());

            OutputStream outStream = response.getOutputStream();        
            outStream.write(out.toByteArray());
            outStream.flush();
            outStream.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

这是我用于生成 QRCode 的代码。我使用 outputStream 将 QRCode 显示到浏览器。但是如何将该 QRCode 保存为服务器上的图像文件并使用标签将其显示在另一个 html 文件中?我在这里使用 iText 库生成 QrCode。

4

3 回答 3

1

如果 save 是可选的,但是在 HTML 文件中需要显示(实际上是一个 JSP)......接下来呢?

txt如果请求中有参数:

<% var txt = request.getParameter("txt"); %>
<img src="/context/servletMapping?qrtext=<%=java.net.URLEncoder(txt, "UTF-8")%>">

使用 JSTL,请参阅如何使用 JSTL 对字符串进行 URL 编码?

于 2013-07-02T16:57:52.603 回答
0

只需使用 FileOutputStream 将 ByteArrayOutputStream 的内容写入。与将内容写入响应输出流的方式相同。将文件写入通过 HTTP 可用的某个位置(例如 apache 安装的文档根目录等),您可以从 HTML 中引用它。

您可以尝试的另一种方法是将图像直接内联到您的 HTML 代码中(新浏览器通过数据 URI 支持这一点)

于 2013-07-02T16:40:59.733 回答
0

保存图像的代码示例ByteArrayOutputStream

String imageDir = //directory to save
String fileName = //file name
ByteArrayOutputStream out = //image byte arary
File file = new File(imageDir, fileName);
OutputStream outStream = new FileOutputStream(newFile);
outStream.write(out.toByteArray());
outStream.close();
于 2013-07-02T16:41:37.557 回答