热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:验证码的实现

验证码的实现需要用到session技术,就先说说session是干什么的吧Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间

验证码的实现需要用到session技术,就先说说session是干什么的吧

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。所以说Session的实现是基于COOKIE,Session需要借助于COOKIE存储客 户的唯一性标识JSESSIONID  (COOKIE技术是将用户的数据存储到客户端的技术)

 

技术图片

 

Session技术:存到服务器端 借助COOKIE存储JSESSIONID

HttpSession session = request.getSession();

 

session.setAttribute(name,value);    //将值value 他的名字是name  存储到session中

session.getAttribute(name);              //获取name(上边的名为name的东西)

 

session生命周期

创建:第一次指定request.getSession();

销毁:服务器关闭、session失效/过期、手动session.invalidate();

session作用范围:默认一会话中

 

 

下面开始验证码的实现

首先需要一个jar包 itcast-tools-1.4.2.jar

需要的在这里领就行  

链接: https://pan.baidu.com/s/1zE74X9sGCmw14sSdbuWTig 提取码: zew5 复制这段内容后打开百度网盘手机App,操作更方便哦

 

先是jsp页面  

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8" import="java.util.*"%>
3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4 DOCTYPE html>
5 <html>
6 <head>
7 <meta charset="UTF-8">
8 <title>Insert title heretitle>
9 <meta http-equiv="pragma" content="no-cache">
10 <meta http-equiv="cache-control" content="no-cache">
11 <meta http-equiv="expires" content="0">
12 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
13 <meta http-equiv="description" content="This is my page">
14 <script type="text/Javascript">
15   function _hyz() {
16   /*
17   1. 获取元素
18   2. 给它的src指向为/tools/VerifyCodeServlet
19   */
20   var img = document.getElementById("imgVerifyCode");
21   // 需要给出一个参数,这个参数每次都不同,这样才能干掉浏览器缓存!
22   img.src = "/TestDenglu/VerifyCodeServlet?a=" + new Date().getTime();
23   }
24   script>
25 head>
26 <body>
27 <%--
28   1. 写表单,其中包含图片(验证码)
29   2. 让图片显示出来:
30   把<img>的src指向VerifyCodeServlet,你需要在web.xml中部署VerfiyCodeServlet
31   3. 换一张
32   --%>
33 <div style="color: red"><%=request.getAttribute("loginInfo")==null?"":request.getAttribute("loginInfo") %>div>
34 <form action="/TestDenglu/LoginServlet?method=checkCode" method="post">
35
36 <input type="hidden" name="method" value="login">
37 用户名:<input type="text" name="username" /><br />
38 密 码:<input type="password" name="password" /><br />
39 验证码:<input type="text" name="verifyCode" /><br />
40 <img src="/TestDenglu/VerifyCodeServlet" id="imgVerifyCode" /> <a
41 href="Javascript:_hyz()">换一张a> <br />
42 <input type="submit" value="提交" />
43 form>

(其中的TestDenglu是我的项目名)

 

web.xml部署

<servlet>
<servlet-name>VerifyCodeServletservlet-name>
<servlet-class>cn.itcast.vcode.servlet.VerifyCodeServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>VerifyCodeServletservlet-name>
<url-pattern>/VerifyCodeServleturl-pattern>
servlet-mapping>

 

LoginServlet

1 package com.jdbc.servlet;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.annotation.WebServlet;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import com.jdbc.dao.UserDao;
13
14 /**
15 * Servlet implementation class LoginServlet
16 */
17 @WebServlet("/LoginServlet")
18 public class LoginServlet extends HttpServlet {
19 private static final long serialVersiOnUID= 1L;
20
21 /**
22 * @see HttpServlet#HttpServlet()
23 */
24 public LoginServlet() {
25 super();
26 // TODO Auto-generated constructor stub
27 }
28
29 /**
30 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
31 * response)
32 */
33 protected void doGet(HttpServletRequest request, HttpServletResponse response)
34 throws ServletException, IOException {
35 // TODO Auto-generated method stub
36 response.setContentType("text/html;charset=UTF-8");
37 request.setCharacterEncoding("UTF-8");
38
39 String method = request.getParameter("method");
40 if(method.equals("checkCode"))
41 {
42 checkCode(request,response);
43 }
44
45 }
46
47 public void checkCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
48 request.setCharacterEncoding("UTF-8");
49
50 String checkCode_client = request.getParameter("verifyCode");
51 // VerifyCodeServlet会把真正的验证码保存到session中
52 String checkCode_session = (String) request.getSession().getAttribute("vCode");
53
54 if(!checkCode_session.equals(checkCode_client)) {
55 request.setAttribute("loginInfo", "您输入的验证码不正确");
56 request.getRequestDispatcher("/form.jsp").forward(request, response);
57 return;
58 }
59 if(checkCode_session.equals(checkCode_client)) {
60 request.setCharacterEncoding("utf-8");
61 response.setContentType("text/html;charset=utf-8");
62 String username = request.getParameter("username");
63 String password = request.getParameter("password");
64 String psw =new UserDao().findUsername(username);
65
66 //request.getSession().setAttribute("loginInfo", username);
67
68 if(psw ==null){
69 PrintWriter out = response.getWriter();
70 out.println(" ");
71 out.println("");
72 out.flush();
73 out.close();
74 }
75 if(psw!=null&&!psw.equals(password)){
76 PrintWriter out = response.getWriter();
77 out.println(" ");
78 out.println("");
79 out.flush();
80 out.close();
81 }
82 if(psw!=null&&psw.equals(password)){
83 PrintWriter out = response.getWriter();
84 out.println(" ");
85 out.println("");
86 out.flush();
87 out.close();
88 out.print(true);
89 }
90 }
91
92 }
93
94
95
96 /**
97 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
98 * response)
99 */
100 protected void doPost(HttpServletRequest request, HttpServletResponse response)
101 throws ServletException, IOException {
102 // TODO Auto-generated method stub
103 doGet(request, response);
104 }
105
106 }

 

 


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文介绍了 Confluence 6 中使用的其他 Cookie,这些 Cookie 主要用于存储产品的基本持久性和用户偏好设置,以提升用户体验。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Jenkins编译过程中ERROR: Failed to Parse POMs的问题
    在使用Jenkins进行自动化构建时,有时会遇到“ERROR: Failed to parse POMs”的错误。本文将详细分析该问题的原因,并提供有效的解决方案。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • SvpplyTable: 实现可扩展和可折叠的菜单动画
    SvpplyTable 是一个示例项目,旨在实现类似 Svpply 应用程序中的可扩展和可折叠的菜单动画效果。该项目托管在 GitHub 上,地址为 https://github.com/liuminqian/SvpplyTable。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
author-avatar
手机用户2502896043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有