(尚硅谷)JavaWeb新版教程11-Cookie-Kaptcha-Exp


参考文献

  1. 深入理解Cookie
  2. 第二节 Cookie的工作机制
  3. cookie详解

1、Cookie

1.1 什么是 Cookie

客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

在这里插入图片描述

1.2 Cookie 的使用

  1. 初次请求,创建 Cookie 对象,并且发送给浏览器(响应中携带)
@WebServlet("/cookie01")
public class CookieServlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建一个Cookie对象
        Cookie cookie = new Cookie("uname","jim");
        //2.将这个Cookie对象保存到浏览器端
        response.addCookie(cookie);

        request.getRequestDispatcher("hello01.html").forward(request,response);
    }
}

在这里插入图片描述

  1. 在客户端保存 Cookie(在 cookie 有效期内第二次及之后的请求中,浏览器将请求连同 cookie 一同发送回来)

在这里插入图片描述

注意:

  • 浏览器提交 Cookie 时只会提交 name 和 value 属性,其他的属性是不传送的,只是浏览器用来自己判断信息用。

那么我们怎么获取这个cookie呢?

  • 如果之后我们使用 Spring 框架,可以用 @CookieValue 这个注解将 cookie 数据和控制器方法的形参创建映射关系;
public void getCookie(@CookieValue("uname") String name){
	System.out.println(name);
}

1.3 cookie 的设置

在这里插入图片描述

  1. cookie.setMaxAge();:设置 cookie 的有效时长;服务器端明确设置了Cookie 的存在时间之后,在浏览器端,Cookie 数据会被保存到硬盘上,否则的话,一个会话内有效,且只存在于内存中;
  2. cookie.setDomain(pattern);:设置域,如果没有显式设置,则浏览器会自动取 url 的 host 作为 domain 值;
  3. cookie.setPath(uri);:设置路径,设置为"/"表示允许所有路径都可以使用Cookie;

域+路径 = url 资源地址 ,默认情况下 cookie 是整个网站通用的;

在这里插入图片描述

1.4 Cookie 的应用

  1. 记住用户名和密码十天:setMaxAge(60 * 60 * 24 * 10)
  2. 十天免登录

2、Kaptcha - 验证码

2.1 为什么需要验证码?

  1. 没有验证码,别人会恶意攻击
  2. 现有的验证码组合:数字+英文字母+算数+请依次点击什么汉字+拖动滚动条使图片重合

2.2 kaptcha 如何使用

  1. 添加 jar 包,记得在该模块中添加依赖并重新部署:

在这里插入图片描述

  1. 在 web.xml 文件中注册 KaptchaServlet,并设置验证码图片的相关属性;
<servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    <init-param>
        <!--边框颜色-->
        <param-name>kaptcha.border.color</param-name>
        <param-value>red</param-value>
    </init-param>
    <init-param>
        <param-name>kaptcha.textproducer.char.string</param-name>
        <!--表示在这个字符范围内选择字符-->
        <param-value>abcdefg</param-value>
    </init-param>
    <init-param>
        <!--验证码要不要加噪-->
        <param-name>kaptcha.noise.impl</param-name>
        <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/kaptch.jpg</url-pattern>
</servlet-mapping>
  1. 在 html 页面上编写一个 img 标签,然后设置 src 等于 KaptchaServlet 对应的 url-pattern

在这里插入图片描述

在这里插入图片描述

2.3 kaptcha 验证码常用配置

  1. kaptcha 验证码图片的各个属性在常量接口:Constants 中;
  2. 如果想要配置验证的属性,在一对 <init-param> 标签中进行配置,其中下面定义的字符串即为 web.xml 文件中的 <param-name> 中,具体每个字符串是什么意思,可以参考:验证码 KAPTCHA 参数详解

在这里插入图片描述

  1. KaptchaServlet 在生成验证码图片时,会同时将验证码信息保存到 session 中;
@WebServlet("/kaptcha01")
public class KaptchaServletDemo01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession() ;
        Object obj = session.getAttribute("KAPTCHA_SESSION_KEY");
        System.out.println("obj = " + obj);
    }
}

网页访问:

在这里插入图片描述

控制台打印:

在这里插入图片描述

注意:

  • <img src="kaptch.jpg"/> 这个其实不是一个图片,而是一个 url 资源,那个 servlet 帮我们产生了一个验证码,并且帮我们把验证码保存到了 session 中。
  • 我们先访问 hello02.html,然后访问 kaptcha01 就会在控制台打印出相同的验证码,这个打印在控制台的是我们从 session 中获取的。

2.4 书城项目的注册验证码实现(具体看书城项目第三部分)

  1. 因此,我们在注册请求时,首先将用户文本框中输入的验证码值和 session 中保存的值进行比较,相等,则进行注册;

3、Exp - 正则表达式

正则表达式有三个主要用途:

  1. 模式验证: 检测某个字符串是否符合规则,例如检测手机号、身份证号等等是否符合规范
  2. 匹配读取: 将目标字符串中满足规则的部分读取出来,例如将整段文本中的邮箱地址读取出来
  3. 匹配替换: 将目标字符串中满足标准的部分替换为其他字符串,例如将整段文本中的"hello"替换成"haha"

3.1 正则表达式的使用三步骤

  1. 定义正则表达式对象

    正则表达式定义有两个方式:

    1. 对象形式
      var reg = new RegExp(“abc”)
    2. 直接量形式,用//来定义
      var reg = /abc/;
    3. 匹配模式:
      - g 全局匹配
      - i 忽略大小写匹配
      - m 多行匹配
      - gim 这三个可以组合使用,不区分先后顺序
      例如: var reg = /abc/gim , var reg = new RegExp("abc","gim");
  2. 定义待校验的字符串

  3. 校验

3.2 使用案例

1. 基本使用:
在这里插入图片描述

在这里插入图片描述

  • reg.test 函数是只要有一个就返回 true;

  • 正则表达式定义在 script 标签中。

2. 全文匹配:

在这里插入图片描述

在这里插入图片描述

  • 不加 g 作为后缀条件的话,只有第一个 o 会被替换;

3. 忽略大小写匹配:

在这里插入图片描述
在这里插入图片描述

  • 不加 i 作为后缀的话,后面一个大小的 O 不会被匹配到;

4. 多行匹配:
在这里插入图片描述
在这里插入图片描述

  • 不加 m 作为结尾的话,这里返回 false 表示没有匹配成功,因为默认去找 hello\nworld 整个字符串的结尾去;

3.3 元字符

在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上\,例如:\^

在这里插入图片描述

1. \w 数字字母下划线

在这里插入图片描述
在这里插入图片描述

  • 除特殊字符外,其它的每个数字、字母、下划线被替换成 A;
  • 并且中间定义了 \n 换行符,所以控制台输出换行了;
  1. \s 匹配任意空白符
    在这里插入图片描述
    在这里插入图片描述
  • 本来有个换行,这里替换成 A ,一行输出了;
  1. \d \D 匹配数字非数字
    在这里插入图片描述
    在这里插入图片描述

  2. \b 匹配单词的开始和结束(检测到空格代表一个单词)

在这里插入图片描述
在这里插入图片描述

  1. ^ 表示匹配开始 $表示匹配结尾

在这里插入图片描述
在这里插入图片描述

3.4 集合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 将 a-g 中的任意字符替换为 A;

3.5 出现的次数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 匹配 2-4 个 字符 l ,由于 5 个 l 字符,匹配了前四个,还剩最后一个没办法匹配,所以没有被替换;

3.6 或者 | 的使用

在这里插入图片描述

在这里插入图片描述

3.6 常用正则表达式(用的时候直接查百度就可以)

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值