zoukankan      html  css  js  c++  java
  • Struts2自定义结果视图(servlet验证码)

    1、编写一个类实现com.opensymphony.xwork2.Result,或者继承org.apache.struts2.dispatcher.StrutsResultSupport

    2、自定义的结果视图,必须先声明后才能使用

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <constant name="struts.devMode" value="true" />
        <package name="p1" extends="struts-default">
            <result-types>
                <result-type name="captcha" class="com.itheima.results.CaptchaResult"></result-type>
            </result-types>
            <action name="genCaptcha">
                <result name="success" type="captcha">
                    <param name="width">200</param>
                    <param name="height">50</param>
                </result>
            </action>
        </package>
    </struts>

    servlet验证码代码:

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class AuthCodeDemo1 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            int width=120,height=25;
            //1.在内存生成一个图片
            BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            //2.得到画笔
            Graphics g = img.getGraphics();
            //3.画一个矩形框
            g.setColor(Color.BLUE);
            g.drawRect(0, 0, width, height);
            //4.填充背景
            g.setColor(Color.YELLOW);
            g.fillRect(1, 1, width-1, height-1);
            //5.画一些干扰线条
            g.setColor(Color.GRAY);
            Random random = new Random();
            for(int i=1;i<=20;i++)
                 g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
            //6.画字符串随机的
            g.setColor(Color.RED);
            //设置字体
            g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,20));
            for(int i=1;i<=4;i++)
                g.drawString(random.nextInt(10)+"", i*20,20);
            
            //清除缓存
            response.setHeader("Expires", "-1");
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Pragma", "no-cache");
            
            //7.输出
            response.setContentType("image/jpeg");
            ImageIO.write(img, "jpg", response.getOutputStream());
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.doGet(request, response);
        }
    
    }

     前台页面用Img标签的src属性指定action地址即可显示验证码。

  • 相关阅读:
    引用传参
    VS2017 用MySQL Connector 链接 MySQL时 getString异常问题
    Matlab学习日记第3天
    Matlab学习日记第2天
    Matlab学习日记第1天
    c#加密解密方法
    DataGridView添加行号
    c#带参数数组链接数据库方法
    2021/5/27
    2021/5/14
  • 原文地址:https://www.cnblogs.com/lm970585581/p/8675872.html
Copyright © 2011-2022 走看看