Laughing girl2021 2021-07-15 12:14 采纳率: 100%
浏览 83
已采纳

javaweb练习,验证码切换不能显示网页图片。求解惑!

package com;

import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet(name = "VerifyCodeServlet", urlPatterns = "/code")
public class VerifyCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        int width = 100;
        int height = 30;
        String data = "abcdefghijklmncpqrst01234567890";
        //设立一个随机函数对象
        Random random = new Random();
        // BufferedImage是缓冲图像类,这里的意思是创建一个宽为width,高为height,不带透明色的图片对象;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //创建一个可绘制image的几何,坐标变换,颜色管理和文本布局的2D对象,此对象属于Graphics类;
        Graphics graphics = image.getGraphics();
        //调用graphics的方法在image对象里设置一个指定颜色(当前为灰色);
        graphics.setColor(Color.gray);
        //绘制image对象中灰色区域的范围,x,y为左上角坐标,width,height为右下角坐标,下行意思为灰色覆盖区域为image对象的左上角到右下角(全覆盖)
        graphics.fillRect(0, 0, width, height);

        //调用graphics的方法在image对象里设置一个指定颜色(当前为黑色);
        graphics.setColor(Color.black);
        for (int i = 0; i < 4; i++) {
            //取得data字符串里字符的随机位置;
            int position = random.nextInt(data.length());
            //调用String里的substring(int beginIndex, int endIndex),进行索引位置上的字符,beginIndex为开始位置,endIndex为结束位置(结束位置不包括在索引范围);
            String randomStr = data.substring(position, position + 1);
            //调用graphics类的方法使用当前颜色(黑色)绘制指定(randomStr)字符串给出的文本,x是字符串到图形左侧边框的距离,y是字符串到图形上边边框的距离
            graphics.drawString(randomStr, width / 5 * (i + 1), 15);

        }


        ImageIO.write(image, "jpg", response.getOutputStream());
    }

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

    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div align="center">
<h2>切换验证码</h2>

<script>
    function changeImageCode() {
        document.getElementById('btn').isDisabled=true;
        document.getElementById('identity').src='code?ts='+new Date().getTime();

    }

</script>
<image src="code"  id="identity" onload="btn.disable=false;" style="cursor:pointer; vertical-align:middle">

</image>
<input type="button" value="看不清,更换验证码" onclick="changeImageCode()" id="btn"  style="vertical-align:middle">
</div>
</body>
</html>

<%--
  Created by IntelliJ IDEA.
  User: pan
  Date: 2021/7/14
  Time: 12:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    HelloWorld
    </body>
    <div class="col-sm-3">
    <img src="${pageContext.request.contextPath}/code">
    </div>
</body>
</html>

  • 写回答

2条回答 默认 最新

  • 崽崽的谷雨 2021-07-15 13:19
    关注

    地址对吗?写死一个地址看能不能显示

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月19日
  • 创建了问题 7月15日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵