Servlet实现带验证码登陆功能Demo

java使用阿里云平台实现发送短信验证码功能 在我们生活中,使用的各种各样的网站、APP在登录、注册、支付、修改密码等需要进行安全验证的地方都要进行短信的验证。 一、实现思路: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 二、流程 客户输入手机号后,点击发送验证码,向服务器发送请求 服务器接收到请求后,获取到客户的手机号,随机生成验证码,将验证码存储起来,有了手机号和验证码,向运营商发起发送短信的请求 运营商向客户手机发送短信 客户将收到接收到的验证码填写之后,点击提交,向服务器发起请求,判断发送的和客户输入的是否相同。 阅读详情

“纸上得来终觉浅”,动手比看书印象更深,学到的更多。下面用Servlet实现简单的登陆功能,来巩固对Servlet的学习。

1、在WEB-INF下新建一个名为index.html作为登陆界面。

index.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method='post' action='login.do'>
	<input type='text' name='username'><br/>
	<input type='password' name='password'><br/>
	<input type="submit" value="Login">
</form>
</body>
</html>
2、在src目录下,新建名为Login的Servlet

Login.java代码如下:

package com.demo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/login.do")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		if( loginCheck(username, password)){
			
			//调用HttpServletRequest的getRequestDispatcher方法获得RequestDispatcher接口的对象实例
			//调用时指定转发或包含的相对URL网址
			//success.view 会依URL模式获取对应的Servlet
			//forward()方法:将请求转发给别的Servlet处理,相应的还有include()方法
			request.getRequestDispatcher("success.view").forward(request, response);
		} else {
			
			//sendRedirect()方法要求浏览器重新请求另一个URL——重定向
			//登录失败,则重定向到首页
			response.sendRedirect("index.html");
		}
		
	}
	
	private boolean loginCheck(String username, String password){
		if( username!=null && password != null){
			//这里还没有连接数据库,只是简单判断一下
			if( username.equals("admin") && password.equals("123456")){
				return true;
			}
		}
		return false;
	}

}
注:在验证用户名和密码后,主要用到了RequestDispatcher调派请求。

include() 方法可以将其他Servlet流程包括到当前Servlet流程中。

forward() 方法将请求处理转发给别的Servlet。

在调派请求的过程中,如果有需要共享的对象,需要用到下面几个方法。

setAttribute() 方法设置共享对象。

getAttribute() 方法取得属性。

getAttributeName() 方法取得所有属性名称

removeAttribute() 方法指定名称移除属性。


3、在src下新建名为Success的Servlet,用来响应登陆成功的转发请求。

Success.java代码如下:

package com.demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Success
 */
@WebServlet("/success.view")
public class Success extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Success() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h2>"+ request.getParameter("username")+" 登陆成功!</h2>");
		out.println("<script> document.write('update time:'+document.lastModified) </script>");
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
	}

}

4、项目运行效果

登陆界面:


登陆成功:


注:请求转发是在容器中进行,所以可以取得WEB-INF中的资源,而浏览器不知道请求被转发了,地址栏不变。

用sendRedict()则要求浏览器重新请求另一个URL,地址栏会变更。

大部分情况下,使用HttpServletResponse的getWriter()来去的PrintWriter对象,使用println()等方法输出响应。

有时候,也可以直接对浏览器输出字节数据。需要使用getOutputStream()来取得ServletOutputStream实例。可以用来输出图片验证码。

下面就在登陆界面增加验证码功能。


5、新建名为SafeCode的Servlet用来生成验证码图片。

SafeCode.java 代码如下:

package com.demo;

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.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SafeCode extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1626673439350527994L;

	public SafeCode() {
		super();
	}

	public void destroy() {
		super.destroy();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {	
	     //设置输出类型和浏览器不保存缓存
		 response.setContentType("image/jpeg") ;
	     response.setHeader("Cache-Control", "no-cache") ;
	     
	     //创建图片对象
	     int width = 60,height = 20 ;
	     BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB) ;
	     
	     Graphics g = image.getGraphics() ;
	     
	     //生成随机数
	     Random random = new Random() ;
	     String s = "" ;
	     for(int i=0;i<4;i++){
	    	 s += random.nextInt(10) ;
	     }
	     
	     //把随机数存到Session里面,便于等下比较
	     HttpSession session = request.getSession() ;
	     session.setAttribute("code",s) ;
	     
	     //随机生成颜色  Color color =  new Color(255,255,255) ;     random.nextInt(256)的值范围是0~255
	     Color color = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)) ;
	     
	     //把随机数写到图片上
	     String a = null ;
	     Font font = new Font(a,Font.ITALIC,18) ;
	     g.setColor(color) ;
	     g.setFont(font);
	     g.drawString(s,10,height-5) ;
	     g.dispose() ;    //关闭画笔
	     
         //把图片送到客户端
	     ServletOutputStream output = response.getOutputStream() ;
	     ImageIO.write(image,"JPEG",output) ;
	     output.flush();   //关闭输出流
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         this.doGet(request,response) ;
	}
	
	public void init() throws ServletException {
	}
}

注:Servlet能输出各种格式的数据,用Context-Type属性进行设置。

6、在web.xml中添加如下配置

  <servlet>
    <servlet-name>safeCode</servlet-name>
    <servlet-class>com.demo.SafeCode</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>safeCode</servlet-name>
    <url-pattern>/safecode</url-pattern>
  </servlet-mapping>
7、在index.html中添加显示验证码的图片标签,和更新验证码的js脚本。注意:给图片设置src路径时,前面没有“/”,加了之后反而没法获取图片了。

<script>
	function reloadImage(){
		document.getElementById('imgCode').src="safecode";
		//alert("run");
	}
</script>
......
<img id="imgCode" src="safecode"/>
	<input type="button" value="看不清" id="btn" onclick="reloadImage()">

8、这样再次运行项目时,就会有验证码了,效果如下:


至于验证码的验证,前台后台都行,把输入的验证码跟HttpSession存的验证码做比较即可。这里就不再详细说明了。

综上:我们就实现了一个带验证码的简单登陆界面。对Servlet的请求、响应、转发与输出等知识点也有了一定的了解。

JavaWeb的核心构建在Servlet之上,对Servlet比较熟悉后,学习SSH等Web框架更能事半功倍。

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】 Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。 阅读详情

相关推荐

《深入浅出多模态》(二):多模态任务及数据集介绍

本文为《深入浅出多模态》系列第二章,《多模态任务介绍与背景》主要介绍多模态模型的概念、技术难点、下游任务(Visual Grounding、VQA、image/Video Captioning等)及各类应用方向数据集展开介绍,本专栏适合从事多模态小白及爱好者学习,欢迎大家关注,如有侵权请联系删除!

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 3803

Servlet 生命周期

Servlet 生命周期 Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化。Servlet 调用 service() 方法来处理客户端的请求。Servlet 通过调用 destroy() 方法终止(结束)。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。 现在让我

技术何 3621

ISO 7870-1_9 Series - Control charts - 包含全部9份最新英文标准文件.zip

ISO 7870-1_9 Series - Control charts - 包含全部9份最新英文标准文件.zip

Java Servlet实现登录注册功能的实例教程

Java Servlet是一种用于处理HTTP请求和响应的Java类,它可以用来实现登录和注册功能。本文将通过一个简单的示例来演示如何使用Java Servlet实现登录和注册功能提供页面展示和代码示例。总结起来,Java Servlet是一种强大的工具,可以用于处理Web应用程序中的各种请求和响应。将上述创建的页面和Servlet类部署到一个Java Web容器(如Tomcat)中,启动容器。通过本文的学习,我们了解了如何使用Java Servlet实现登录和注册功能

weixin_68015522的博客 3568

使用servlet实现用户登录

关于使用servlet实现用户登录初探

u011526599的专栏 8万+

Servlet实现用户登录

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类 首先看完整时序图,理解如何通过Servlet实现用户登录: 一...

你要十分努力,才能看起来毫不费力! 7618

学会使用Java Web实现用户登录功能(JSP+Servlet方式)

登录页面login.jsp,输入用户名和密码后,跳转到登录处理程序LoginServlet进行业务逻辑处理,登录成功,跳转到登录成功页面success.jsp,否则跳转到登录失败页面failure.jsp。

RainBow_xiy的博客 4555

基于Servlet验证码登陆demo

验证码技术在web项目中是十分常见的技术,它可以防止:恶意破解密码、刷票、论坛灌水,某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试等,本文利用比较简易的方式实现了这个功能。 1.准备工作 这里采用的maven构建的Java web项目,所以需要先安装servlet容器,使得我们的web项目有运行环境;至于使用maven构建Java web项目,这里就不演示了。 1.1 安装tomcat tomcat在Java领域是比较常见的web应用服务器,同时也是一个很好的servlet容器。这里就

pikcacho_pkq的博客 739

java实现短信验证码登陆 demo

java + servlet+ jsp实现发送手机短信验证码 【1】选择平台,完成认证。 短信登陆平台很多,自己可以看个人爱好选择。 我们使用的API平台是:秒嘀云: https://sms.miaodiyun.com/login.html 注册该平台,完成认证就可以获取到参数:AC...

cicong2374的博客 3643

Servlet验证码登录(功能完善)

之前Demo案例参考 Servlet登录案例Demo(详解每一步操作) 基础登录功能实现 java动态实现验证码(详细案例) HTML页面教程 用户登录需求 用户登录案例需求: 编写login.html登录页面username&password 两个输入框 使用Druid数据库连接池技术,操作mysql,LoginDemo数据库中user表 使用dbcTe...

iqqcode 1998

java 验证码登陆界面_Java Web实现登录页面验证码验证功能

一、验证码验证码本质上是一张图片,图片内容会随着程序的运行而随机生成验证码的作用:防止应用恶意发送数据,一定程度上避免了恶意程序对网站的攻击。验证码本质上是一张图片,图片内容的准确解析不容易用程序来实现验证码的绘制:绘制验证码图片不仅仅需要随机生成要绘制的内容,同时要配合Java中与绘图有关的一套API来完成。二、效果演示验证码Demo三、给出完整代码(1)服务器端代码ActionServlet...

weixin_33379297的博客 1090

第三方(秒嘀)短信验证码登陆 demo

java + servlet+ jsp实现发送手机短信验证码 【1】选择平台,完成认证。 短信登陆平台很多,自己可以看个人爱好选择。 我们使用的API平台是:秒嘀云: https://sms.miaodiyun.com/login.html 注册该平台,完成认证就可以获取到参数:ACCOUNT SID , AUTH TOKEN , API 【2】创建短信模板 (该模...

dnpb11033的博客 1274

页面验证码及刷新demo

验证码:就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。      作用:验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别

蜗牛学习笔记 937

黑马旅游网(二)注册登陆

自从下定决心做这个小小的demo,自己遇到了很多的错误,有的解决了我,有的还没有解决。从中得到了结论:任何成功的事情都要付出努力。 这篇文章主要说明注册登陆的流程,分为以下几个部分: 一、用户注册 二、用户登陆 三、用户退出 一、用户注册 自从上了大学,到现在,不知道写了多少关于用户注册的逻辑代码,但是都没有这次的逻辑更加全面。 什么事情都不如一张流程图一目了然: 这...

zhiguo98的博客 1288

JavaWeb学习-Servlet系列-15-自定义验证码

这篇来做一个练习题,很有意思,就是实现网页上登录旁边一个验证码的过程。当然实际开发过程中,网上可以找到很多别人开发好的jar包,直接使用别人的验证码成果就可以。 1.ServletDemo3.java代码 package com.anthony.servlet; import java.awt.Color; import java.awt.Font; import java.awt....

Anthony_tester的博客 363

servlet中生成验证码图片

一、验证码(公共全自动程序) 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进

斌斌(Java) 1829

用户登录系统及一次性验证码的简单实现

Session经常用来完成系统权限和认证功能 权限:在用户身份认证后,根据权限知道 — 你能做什么 认证:用户登陆 — 你是谁 将登陆用户信息保存到Session 有什么作用 ? —- 如果session中没有用户信息 未登陆欢迎界面<body> <h1>系统主页</h1> <% // 因为session会保存登陆用户信息,如果session中没有该信息 说明用户登录 if(req

Megustas_JJC的博客 5709

JSP 制作验证码的实例详解

这篇文章主要介绍了JSP 制作验证码的实例详解的相关资料,现在Servlet上画出验证码的图片,让其显示到页面上,再用js方法能刷新验证码,可以用ajax得到用户输入的值经过servlet验证码比对判断是否,符合提示用户,需要的朋友可以参考下。 JSP 制作验证码的实例详解  验证码   验证码(CAPTCHA)是“Completely Automated Public Turing test...

lomo_2019的博客 868

java 验证码_Java实现表单动态验证码注册

最近系统的学习了关于Servlet的相关知识,主要包括Http的Request与Response、Cookie、Session、JSP等,结合前期的JDBC中的数据库连接池Druid、JdbcTemplate等内容简单实现一个含有动态生成随机验证码的表单登录JSP页面。第一部分登录界面JSP编写重点:form的action与method指定运用时间戳解决image的sr...

weixin_39600823的博客 178

java登录验证码_java登录验证码

一、创建web项目二、生成验证码创建VcodeObject.java,存储验证码与图片package com.demo.vcode;import java.io.InputStream;public class VcodeObject {private String code;private InputStream in;public VcodeObject() {}public VcodeObj...

weixin_39754267的博客 264

Java WEB项目如何实现验证码

验证基础 一.什么是验证码验证码的作用 验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户还是计算机的全自动程序,这个问题可以由计算机生成进行判断,但是只有人类才可以解答。可以防止恶意破解密码,刷票,论坛灌水,有效防止某个黑客对某一个特定注册用户限定程序暴力破解方式进行不断登陆。 二.图文验证的原理 在servlet中随机生成一个指定位置的验证码,一般是四位或

chenfengbao的博客 1万+
上一篇: Servlet工作流程Demo
下一篇: Struts2实现登陆功能Demo
dutsoft
博客等级 码龄14年 97粉丝 215原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值