javaweb-Cookie、Kaptcha、正则表达式

发布时间 2023-03-22 21:11:02作者: 飞哥传书

资料来源于:B站尚硅谷JavaWeb教程(全新技术栈,全程实战) ,本人才疏学浅,记录笔记以供日后回顾
由于是多个视频内容混合在一起,因此只放了第一个链接
视频链接

知识点

1. Cookie
   1. 创建Cookie对象
   2. 在客户端保存Cookie
   3. 设置Cookie的有效时长
      cookie.setMaxAge(60)  , 设置cookie的有效时长是60秒
      cookie.setDomain(pattern);
      cookie.setPath(uri);
   4. Cookie的应用:
     4-1: 记住用户名和密码十天 setMaxAge(60 * 60 * 24 * 10)
     4-2: 十天免登录

2. Kaptcha
   1. 为什么需要验证码
   2. kaptcha如何使用:
      - 添加jar  本文使用的是 kaptcha-2.3.2.jar
      - 在web.xml文件中注册KaptchaServlet,并设置验证码图片的相关属性
      - 在html页面上编写一个img标签,然后设置src等于KaptchaServlet对应的url-pattern
   3. kaptcha验证码图片的各个属性在常量接口:Constants中
   4. KaptchaServlet在生成验证码图片时,会同时将验证码信息保存到session中
      因此,我们在注册请求时,首先将用户文本框中输入的验证码值和session中保存的值进行比较,相等,则进行注册

3. JS - Exp
   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. 校验
   2)元字符
     . , \w , \W , \s , \S , \d , \D , \b , ^ , $
      | 代码 | 说明                                                         |
      | ---- | ------------------------------------------------------------ |
      | .    | 匹配除换行字符以外的任意字符。                               |
      | \w   | 匹配字母或数字或下划线等价于[a-zA-Z0-9_]                     |
      | \W   | 匹配任何非单词字符。等价于[^A-Za-z0-9_]                      |
      | \s   | 匹配任意的空白符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。 |
      | \S   | 匹配任何非空白字符。等价于[^\f\n\r\t\v]。                    |
      | \d   | 匹配数字。等价于[0-9]。                                      |
      | \D   | 匹配一个非数字字符。等价于[^0-9]                             |
      | \b   | 匹配单词的开始或结束                                         |
      | ^    | 匹配字符串的开始,但在[]中使用表示取反                       |
      | $    | 匹配字符串的结束                                             |

   3)[]表示集合
     [abc] 表示 a或者b或者c
     [^abc] 表示取反,只要不是a不是b不是c就匹配
     [a-c] 表示a到c这个范围匹配

   4) 出现的次数
     * 表示多次 (0 ~ n )
     + 至少一次 ( >=1 )
     ? 最多一次 (0 ~ 1)
     {n} 出现n次
     {n,} 出现n次或者多次
     {n,m} 出现n到m次

cookie的测试代码

CookieServlet01 类

@WebServlet("/cookie01")
public class CookieServlet01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("uname", "Tom");
        response.addCookie(cookie);
        request.getRequestDispatcher("hello01.html").forward(request,response);
    }
}

使用KaptchaServlet类获取验证码的功能

感觉还挺有意思的呢
Tomcat启动后,先访问http://localhost:8080/pro26/hello02.html,可以看到验证码,再访问http://localhost:8080/pro26/kaptcha01,控制台会打印刚刚所看到的验证码。

web.xml文件

下面的文件中的参数可以根据文档,按需设置哦。此处设置是红色边框、只在abcdefg这几个字母中随机生成、无遮挡条纹

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <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>/kaptcha.jpg</url-pattern>
    </servlet-mapping>
</web-app>

hello02.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img src="kaptcha.jpg"/>
</body>
</html>

KaptchaServletDemo01类

@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);
    }
}

正则表达式代码小示例

demo01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script language="JavaScript">
        var reg = /abc/; //new RegExp("abc");
        var str = "abcdefg";
        var flag = reg.test(str);
        console.log(flag);
    </script>
</head>
<body>

</body>
</html>
<!--
正则表达式的使用三步骤:
1. 定义正则表达式对象
   正则表达式定义有两个方式:
   1) 对象形式
      var reg = new RegExp("abc")
   2) 直接量形式
      var reg = /abc/;
2. 定义待校验的字符串
3. 校验


-->

通过IDEA中显示的小图标,打开浏览器

右键浏览器,选择检查——控制台,就可以看到正则结果啦。

demo05.html

控制台结果为:
A>AAA|A
A?A
replace是个替换方法,将匹配到的结果用“A”来替代。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script language="JavaScript">
        var reg = /\w/gim ;        // \w表示匹配字母或数字或下划线
        var str = "a>b_c|d\nf?g";
        //var str = ">a|\n?";
        str = str.replace(reg,"A");
        console.log(str);
        /*
        var flag = reg.test(str);
        console.log(flag);
        */
    </script>
</head>
<body>

</body>
</html>

demo07.html

使用document.write(str)方法就可以直接在页面上显示str的值了。
此处结果为:AA5

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script language="JavaScript">
        //var reg = /\d/gim ;        // \d表示匹配数字, \D表示匹配非数字
        var reg = /\D/gim ;
        var str = "a>5";
        str = str.replace(reg,"A");
        document.write(str);
    </script>
</head>
<body>

</body>
</html>