专栏首页HUC思梦的java专栏Struts2自定义结果视图(servlet验证码)

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地址即可显示验证码。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • springMVC笔记一

    1)需求:学生注册【add.jsp->StudentAction.java->addOK.jsp】

    HUC思梦
  • springBoot @Enable*注解的工作原理

    run方法打印的内容是异步进行的,是独立于主线程外的线程,所以-----------end-----------打印后,run方法依然再进行打印

    HUC思梦
  • Struts2文件上传

    =======================上传(过滤大小及类型)下载文件(弹出框以流的方式下载)=======================

    HUC思梦
  • 可视化布局算法的框架设计

    原项目是一个Web项目,采用传统的Servlet方式,后台主要完成的工作是计算节点的坐标,将节点的坐标封装成json格式由与前台进行交互。前期阶段,从前后台的数...

    ZONGLYN
  • 互联网新闻新规解读,实施12载首次大修释放哪些信号?

    杨乐 腾讯研究院副秘书长 博士后   5月2日,国家网信办发布《互联网新闻信息服务管理规定》(2017年1号令),将于6月1日起施行。该规定是对2005...

    腾讯研究院
  • sql必会基础1

    ALTER TABLE old_table_name RENAME [TO] new_table_name

    Java架构师历程
  • 中国人霸榜 GitHub Trending,国外开发者很无奈

    本文主人公Balazs Saros是一位坐标匈牙利布达佩斯的开发者,7 月 16 日,他在自己的博客上发表了一篇名为 “Chinese repos are ru...

    Java帮帮
  • tp3.1.2缓存,日志,调试,模板,标签,视图

    1.模板 默认在tpl目录下 默认后缀是.html,可以通过TMPL_TEMPLATE_SUFFIX来配置 如果启用分组,那么模板可能在tpl/分组名/目...

    苦咖啡
  • Struts2核心知识(下)

    struts2默认给我们执行的是execute()方法,而当我们想执行掐方法时,就可以用method,其中属性写上我们想要调用的方法就可以了!

    用户7544680
  • bug诞生记——临时变量、栈变量导致的双杀

            这是《bug诞生记》的第一篇文章。本来想起个文艺点的名字,比如《Satan(撒旦)来了》,但是最后还是想让这系列的重心放在“bug的产生过程”和...

    方亮

扫码关注云+社区

领取腾讯云代金券