idea做一个带有验证码的登录界面,包函forword转发和sendRedirect重定向方法

article/2025/9/18 9:04:31

实现原理:
1.在网页上访问URL(HTTP:localhost:8080/Login),服务器获取请求头Get,forword转发到(HTTP:localhost:8080/Login.jsp),在浏览器上显示登录窗口。
2.用户在浏览器填写用户信息,点击submit按钮以Post方式请求服务器,服务器通过request获取到请求体的数据,通过代码实现验证用户登录是否正确。
3.如果登录验证成功,则sendRedirect重定向到(HTTP:localhost:8080/Main),服务器获取请求头Get,forword转发到(HTTP:localhost:8080/Main.jsp),在浏览器上显示登录成功。
4.如果登录验证失败,则sendRedirect重定向到(HTTP:localhost:8080/Login),服务器获取请求头Get,forword转发到(HTTP:localhost:8080/Login.jsp),在浏览器上显示登录窗口。
在这里插入图片描述
为了让用户不能够直接在URL直接访问到 .JSP文件,我们可以把.JSP文件放在WEB-INF文件底下。
在这里插入图片描述
代码实现:
1.每个服务器端对应一个.jsp
*LoginController.java

 protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {//把request和response转发到login.jsp文件request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request,resp);}

*MainController.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//把request和response转发到main.jsp文件request.getRequestDispatcher("/WEB-INF/main.jsp").forward(request,response);}

2.在login.jsp文件中敲登录界面,通过标签的src属性填写随机验证码CaptcheController.java(/Charles/Captche)路径地址

<form action="/Charles/Login" method="post"><label for='LoginName'>登录名称:</label><input  name='LoginName' placeholder='请输入登录名' id='LoginName'><br><label for='LoginPwd'>登录密码:</label><input type='password' name='LoginPwd'  placeholder='请输入密码' value='' id='LoginPwd'><br><label for='verification'>验证码:</label><input  name='verification' value='' placeholder='请输入验证码' id='verification'><br><img src="/Charles/Captche" ><a >看不清换一张</a><input type='reset' name='reset' value='取消'><input type='submit' name='submit' value='登录'></form>

在这里插入图片描述
新写一个Java Class–CaptcheController.java,Servlet路径为(/Charles/Captche),在里面敲验证码的代码

int width = 100;int height = 50;//1.创建一个对象,在内存中存图片(验证码图片对象)BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//2.美化图片//2.1 填充背景色Graphics graphics = image.getGraphics(); //画笔对象//        graphics.fill//填充//        graphics.draw//画graphics.setColor(Color.yellow);//画笔的颜色graphics.fillRect(0,0,width,height);//填充 rect 矩形//2.2 画边框graphics.setColor(Color.blue);graphics.drawRect(0,0,width-1,height-1);String str="QWERTYPADFGHLBNM123456789qwertypadfghjkbnm";//生成随机角标Random random = new Random();String randomnumber="";//2.3 写验证码for (int i = 1; i <= 4; i++) {int nextInt = random.nextInt(str.length());//获取字符char charAt = str.charAt(nextInt);//随机字符randomnumber+=charAt;graphics.drawString(charAt+"",width/5*i,25);}System.out.println(randomnumber);//通过ServletContext和程序的容器(服务器)来通信共享数据ServletContext servletContext = this.getServletContext();servletContext.setAttribute("message",randomnumber);//2.4干扰线graphics.setColor(Color.green);//随机生成坐标点for (int i = 0; i < 10; i++) {int nextWidth = random.nextInt(width);int nextHeight = random.nextInt(height);int nextWidth2 = random.nextInt(width);int nextHeight2 = random.nextInt(height);graphics.drawLine(nextWidth,nextHeight,nextWidth2,nextHeight2);}//3.将图片输出到页面展示ImageIO.write(image,"jpg",response.getOutputStream());

实现了随机验证码的生成,当用户点击submit按钮时,*LoginController.java获取请求体里的数据,进行判断验证,

		String loginName=request.getParameter("LoginName");//根据LoginName名称获取用户名参数值String loginPwd=request.getParameter("LoginPwd");//根据LoginPwd名称获取登录密码String verification=request.getParameter("verification");//根据verification名称获取验证码值//通过ServletContext获取数据ServletContext servletContext = this.getServletContext();Object validCode = servletContext.getAttribute("message");//进行判断,如果用户输入的用户名为admin,并且密码为1234,并且验证码为随机生成的验证码,就为登录成功,否则为登录失败if(("admin").equals(loginName) && ("1234").equals(loginPwd)&&validCode.equals(verification)) {//如果登录成功,则重定向到/Charles/Mainresponse.sendRedirect("/Charles/Main");}else {//如果登录失败,则重定向到/Charles/Loginresponse.sendRedirect("/Charles/Login");}}

登录效果
1.访问URL(HTTP://localhost:9090/Charles/Login)
在这里插入图片描述
2.输入错误的验证码,重定向到本窗体
在这里插入图片描述
3.输入正确的验证码,重定向到新的窗体
在这里插入图片描述


http://chatgpt.dhexx.cn/article/5CLpsaQS.shtml

相关文章

JavaWeb-forword传送页面

登录静态页面 Login.html <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> </head> <body bgcolor"#FFFFFF"><div align"center"><form met…

转发forword和重定向redirect

转发forword 转发是浏览器发送http请求给服务器&#xff0c;服务器接受请求&#xff0c;在内部调用方法在完成请求处理和转发动作将目标资源发送给浏览器&#xff0c;整个过程浏览器对服务器的请求只有一次&#xff0c;该请求也可以转发n次&#xff0c;都是用同一对request和r…

forword和sendRedirect区别

forword和sendRedirect区别 forword forword()方法是转发&#xff0c;sendRedirect是重定向。 1&#xff09;浏览器访问Servlet1&#xff1b; 2&#xff09;Servlet1想让Servlet2对客户端的请求进行响应&#xff0c;于是调用forword()方法&#xff0c;将请求转发给Servlet2进行…

forword动作

forword动作 服务器内部跳转指令 语法为&#xff1a; <jsp:forword page "目标页面"> 等同于&#xff1a;request.getRequestDispatcher("目标页面").forword(request,response); 转载于:https://www.cnblogs.com/steakliu/p/9991292.html

请求 转发(forword)和重定向(redirect)

请求 转发forword和重定向redirect 两者含义两者区别总结 两者含义 forword转发&#xff1a; 服务器请求资源&#xff0c;直接访问目标地址的url&#xff0c;把那个url响应内容读取过来&#xff0c;然后把这些内容发给浏览器。所有的跳转在服务器实现&#xff0c;浏览器不知道…

原始LBP/Uniform LBP编程实现与直方图

此文章的完整代码网址&#xff1a; https://blog.csdn.net/Mimido_luoluo/article/details/108445700 LBP直方图 1.1 LBP直方图数据记录的介绍 LBP可以提取图片的纹理特征并且保存为一系列数字。通常以某个像素点为中心&#xff0c;观察其八邻域是比中心像素大还是小&#xf…

LBP基本原理与特征分析

转自&#xff1a;http://blog.csdn.net/songzitea/article/details/17686135 背景介绍 局部二值模式(Local binary patterns,LBP)是机器视觉领域中用于描述图像局部纹理特征的算子,具有旋转不变性和灰度不变性等显著的优点。它是由T. Ojala, M.Pietikinen, 和 D. Harwood [1][2…

BP算法和LMBP算法

BP算法 反向传播算法(BP算法)是一种监督学习算法&#xff0c;常被用来训练多层感知机。BP算法由两个环节&#xff08;激励传播、权重更新&#xff09;反复循环迭代&#xff0c;直到网络对输入的响应大到预定的目标范围为止。 激励传播包含&#xff1a;&#xff08;向前传播阶段…

LBP(局部二进制模式)

LBP(Local Binary Patterns ,局部二进制模式)是一种理论简单、计算高效的非参数局部纹理特征描述子。由于其具有较高的特征鉴别力和较低的计算复杂度&#xff0c; 近期获得了越来越多的关注&#xff0c;在图像分析、计算机视觉和模式识别领域得到了广泛的应用&#xff0c;尤其是…

图像特征(HOG、LBP、SIFT、SURF)

大纲 引言HOGLBPHARRSIFTSURF特征点获取特征点描述子总结 参考 引言 最近看了些使用将传统的人工特征用于脱机签名的特征提取文章&#xff0c;思路大差不差&#xff0c;都是从脱机签名中提取某种图像特征&#xff0c;再送入判别器进行判别。具体到提取的图像特征层面,当前的图…

对LBP与HOG的理解

LBP(Local Binary Pattern)&#xff0c;局部二值模式 一种描述图像局部纹理特征的算子 主要思想&#xff1a;&#xff1a; 通过比较图像区域中每个像素点与其邻域内像素点的灰度值&#xff0c;利用二进制模式表示的比较结果来描述图像的纹理特征。 keywords&#xff1a;邻域&…

浅谈LBP原理和代码(基于Python)

LBP&#xff0c;全称Local Binary Pattern&#xff0c;局部二值模式&#xff0c;是一种用来描述图像局部特征的算子&#xff0c;具有灰度不变性和旋转不变性的优点 原始LBP算法 33的矩形块&#xff0c;由1个中心像素和它周围的8个邻域像素组成&#xff0c;若相邻像素值大于或…

LBP原理加源码解析

没有看LBP之前觉得它很神秘&#xff0c;看完了之后也就那么回事&#xff0c;不过提出LBP的人确实很伟大&#xff01;&#xff01; LBP&#xff08;Local Binary Pattern&#xff0c;局部二值模式&#xff09;是一种用来描述图像局部纹理特征的算子&#xff1b;它具有旋转不变性…

局部二值模式LBP

文章目录 1.基础介绍2.局部二值模式&#xff08;Local Binary Patterns&#xff0c;LBP&#xff09;编码介绍3.使用skimage求lbp参考资料 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 1.基础介绍 局部二值模式&#xff08;Local Binary…

LBP(Local Binary Pattern)

一、LBP指局部二值模式&#xff0c;英文全称&#xff1a;Local Binary Pattern&#xff0c;是一种用来描述图像局部特征的算子&#xff0c;LBP特征具有灰度不变性和旋转不变性等显著优点。在1994年提出&#xff0c;由于LBP特征计算简单、效果较好&#xff0c;因此LBP特征在计算…

Windows保护模式(一)段寄存器GDT表

保护模式 x86 CPU的3个模式&#xff1a;实模式、保护模式和虚拟8086模式。 段寄存器 段式内存管理 段式内存管理是将内存划分成若干段&#xff0c;处理器在访问一个内存单元时通过“段基址偏移”的方式计算出实际的物理地址。 在Intel x86处理器中&#xff0c;有专门的段寄存…

段、GDT、调用门学习笔记

保护模式 什么是保护模式 x86 CPU的3个模式:实模式、保护模式、虚拟8086模式。AMD64与Intel64 AMD在1999年的时候拓展了这套指令集&#xff0c;成为x86-64后改名叫AMD64,AMD是首先开发了64拓展&#xff0c;但是AMD的 64位拓展并不支持32位&#xff0c;后来Intel也开发了64位…

linux内核gdt,linux内核学习之全局描述符表(GDT)(二)

在进入保护模式之前&#xff0c;我们先要学习一些基础知识。今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT)。 同实模式一样&#xff0c;在保护模式下&#xff0c;对内存的访问仍然使用段地址加偏移地址。但是&#xff0c;在保护模式下&#xff0c;在每个段能够…

【IDT】 windows IDT GDT LDT

IDT&#xff1a; &#xff08;Interrupt Descrptor Table&#xff09;中断描述符表&#xff0c;用来处理中断的。 IDT的获取&#xff1a; 可以通过SIDT指令&#xff0c;它可以在内存中找到IDT&#xff0c;返回一个IDTR结构的地址。也可以通过kpcr结构获取 ISR&#xff1a; …