JavaWeb 速通Cookie

news2024/12/24 20:56:36

目录

一、关于base标签

        1.引入 : 

        2.介绍 : 

        3.实例 : 

        4.细节 : 

二、Cookie的引入

        1.会话技术 : 

            1° 什么是会话技术?

            2° 会话技术用于解决什么问题?

        2.Cookie介绍

            1° Cookie有什么用?

            2° Cookie通讯机制

三、Cookie的基本使用

        1.创建Cookie对象并保存到浏览器 : 

        2.服务器端读取浏览器保存的Cookie : 

四、Cookie的应用实例

        1.关于“JSESSIONID”的说明 : 

        2.读取指定Cookie :

        3.修改Cookie : 

五、Cookie的生命周期

        1.基本介绍 : 

        2.setMaxAge(int expiry)方法 : 

        3. 应用实例 : 

六、Cookie有效路径

        1.规则 : 

        2.应用实例 : 

        3.cookie使用细节 : 


一、关于base标签

        1.引入 : 

                有两个html文件,位置如下 : 

                demo1.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo1</title>
</head>
<body>
    <a href="d1/d2/demo2.html" target="_self">点我到demo2.html</a>
</body>
</html>

                demo2.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo2</title>
</head>
<body>
    <a href="../../demo1.html">点我去demo1.html~</a>
</body>
</html>

                运行效果如下GIF图 : 

                1° 页面所有的相对路径,在 默认情 况下 ,都会参考当前浏览器地址栏的路径 http://IP:port/工程名/(也包含目录结构)  + 资源 来进行跳转。

                当Web工程中的文件数目较多时,频繁地使用相对路径会造成“工程路径复杂”的问题。
                解决方法——如果需要指定页面相对路径参考的的路径,可以使用base标签来指定。

        2.介绍 : 

         base标签是 HTML 语言中的基准网址标记, <base/>是一个单标签,位于网页头部文件的head标签内
           一个页面最多只能使用一个 base 元素,用来提供一个指定的默认目标,是一种表达路 径和连接网址的标记。
           常见的 url 路径形式分别有相对路径与绝对路径,如果 base 标签指定了目标, 浏览器 将通过这个目标来解析当前文档中的所有相对路径 ,包括的标签有( a img link,  form
           也就是说,浏览器解析时会在路径前加上 base 给的目标,而页面中的相对路径也都转 换成了绝对路径。使用了 base 标签就应带上 href 属性和 target 属性。

        3.实例 : 

                demo1.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo1</title>
    <!-- 
        base标签的href属性值最后必须添加斜杠/,否则无法拼接。
        Δ需要启动Tomcat服务!
     -->
    <base href="http://localhost:8080/WebPath/"/>
</head>
<body>
    <a href="d1/d2/demo2.html" target="_self">点我到demo2.html</a>
</body>
</html>

                demo2.html代码如下 : 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo2</title>
    <base href="http://localhost:8080/WebPath/"/>
    <!-- base标签的href属性值最后必须添加斜杠/,否则无法拼接。 -->
</head>
<body>
    <a href="demo1.html">点我去demo1.html~</a>
</body>
</html>

                运行结果 : 

        4.细节 : 

        <base/>标签也可以应用于“请求转发”和“请求重定向”。PS : <base/>标签的href属性值最后加不加/,对实际作用效果影响很大。

        实际开发中,使用“绝对路径”。

        关于URL开头的"/",若/被服务器端解析,/会被解析成" /Web工程名/ "若/被浏览器端(客户端)解析,/会被解析成" http://IP[域名]:port/ "

            PS : 如果服务器端解析的URL开头没写/,默认隐含/;如果浏览器端解析的URL开头没有/,默认会以浏览器地址栏中的" http://IP[域名]:port/Web工程目录 "来和访问的资源进行拼接。

        在JavaWeb中,URL路径最后带"/" 和 不带"/"是两回事;URL最后带/表示访问的是一个路径,URL最后不带/表示访问的是一个资源

        请求重定向中,resp.sendRedirect("URL"); 语句虽然是在服务器端被执行,但解析URL是在浏览器端进行的。PS : 推荐使用this.getServletContext.getContextPath()方法来动态地获取Web工程路径,可以使URL配置更加灵活。


二、Cookie的引入

        1.会话技术 : 

            1° 什么是会话技术?

        会话可简单理解为:用户打开一个浏览器,点击多个超链接,访问Web服务器的多个web资源,然后关闭浏览器,整个过程称之为一个会话。会话是在浏览器端(客户端)和服务器端之间进行的。

            2° 会话技术用于解决什么问题?

        每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会 产生一些数据 ,服 务器会设法为 每个用户 保存各自的这些数据。
        eg : 多个用户分别点击购物网站的超链接,通过一个购物servlet各自购买了一个商品,服务器应该想办法把每一个用户购买的商品的信息保存在各自的地方,以便于这些用户点结账时,调用结帐servlet,结帐servlet 可以得到用户各自购买的商品信息为用户结帐。

        2.Cookie介绍

            1° Cookie有什么用?

        Cookie是客户端技术;服务器把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

            2° Cookie通讯机制

                示意图如下 : 

                1> Cookie是服务器在客户端保存的用户相关信息,比如登录名,浏览记录等非敏感信息, 就可以通过cookie方式来保存.

                2> Cookie信息数据量并不大,服务器端在需要的时候可以从客户端/浏览器读取(遵循HTTP协议;req.getCookies()方法)。浏览器向服务器发送HTTP请求时,会在请求包中自动携带当前服务器域名下对应的Cookie。再次注意,Cookie是保存在浏览器端的。


三、Cookie的基本使用

        1.创建Cookie对象并保存到浏览器 : 

                CookieBaseServlet类代码如下 : 

package intro;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class CookieBaseServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("CookieBaseServlet's doPost is invoked");

        //1.创建一个Cookie对象(key是Cookie的名字,唯一)
        //可以创建多个Cookie对象
        Cookie cookie = new Cookie("username", "Cyan");
        Cookie cookie2 = new Cookie("platform", "CSDN");

        //2.将创建好的Cookie对象发送给浏览器,浏览器会将收到的Cookie信息进行保存
        resp.setContentType("text/html; charset=utf-8");
        resp.addCookie(cookie);
        resp.addCookie(cookie2);

        PrintWriter writer = resp.getWriter();
        writer.print("<h1>创建Cookie成功,已保存!</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                web.xml配置文件如下 : 

<?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>CookieBaseServlet</servlet-name>
        <servlet-class>intro.CookieBaseServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CookieBaseServlet</servlet-name>
        <url-pattern>/cbServlet</url-pattern>
    </servlet-mapping>
</web-app>

                运行效果 : (如下GIF图)

                HTTP响应包分析 : 

                浏览器端Cookie存储 :

        2.服务器端读取浏览器保存的Cookie : 

                ReadCookiesServlet类代码如下 : 

\package intro;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet(urlPatterns={"/readServlet", "/read"})
public class ReadCookiesServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ReadCookiesServlet's doPost is invoked~\n");

        //获取浏览器端保存的Cookie信息
        Cookie[] cookies = req.getCookies();

        if (cookies != null && cookies.length != 0) {
            for (Cookie cookie : cookies) {
                System.out.println("cookie's name = " + cookie.getName() +
                        ",cookie's value = " + cookie.getValue());
            }
        }

        //给浏览器回送消息
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>收到!</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果(如下GIF图 ) :  

                通过抓包,可以找到HTTP请求包中的Cookie请求头,如下图所示 : 


四、Cookie的应用实例

        1.关于“JSESSIONID”的说明 : 

        浏览器保存的Cookie信息中,JSESSIONID用于唯一标识不同的会话;不同会话,JSESSIONID不同

        当浏览器向服务器发送HTTP请求时,服务器会从HTTP请求头的Cookie信息中找到JSESSIONID,根据JSESSIONID的值来判断当前会话的客户端是哪个。

        2.读取指定Cookie :

                先编写一个可以获取Cookie信息的工具类CookieUtils.
                CookieUtils类代码如下 : 

package instance;

import jakarta.servlet.http.Cookie;

/**
 * readCookieByName方法 : 返回指定name的Cookie
 */
public class CookieUtils {
    public static Cookie readCookieByName(String name, Cookie[] cookies) {
        if (null == name || "".equals(name) || null == cookies || cookies.length == 0) {
            return null;
        }

        for (Cookie cookie : cookies) {
            if (name.equals(cookie.getName())) {
                return cookie;
            }
        }

        return null;
    }
}

                 编写一个测试类;ReadSpecificCookieServlet类代码如下 : 

package instance;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet(urlPatterns={"/readSpecificCookie"})
public class ReadSpecificCookieServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("color", "pink");
        resp.addCookie(cookie);

        Cookie[] cookies = req.getCookies();
        Cookie color = CookieUtils.readCookieByName("color", cookies);
        if (null != color) {
            System.out.println("Cookie's name = " + color.getName() +
                    ", Cookie's value = " + color.getValue());
        } else {
            System.out.println("Can't find that Cookie with this specific name!");
        }

        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>The task of getting specific is completed~</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果如下 : (GIF) 

        3.修改Cookie : 

                修改浏览器端保存的Cookie信息有两种方式。
                方式一 : 新创建一个同名的Cookie对象,然后通过resp.addCookie(cookie); 方法,实现Cookie新值对旧值的覆盖
                方式二 : 先获取到要修改的Cookie对象,通过cookie.setValue("..."); 方法,修改Cookie的值,然后再通过resp.addCookie的方式,以HTTP响应的方式将修改后的Cookie打回给浏览器
                ModifyCookieServlet类代码如下 : 

package instance;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet(urlPatterns={"/modifyCookie"})
public class ModifyCookieServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //方式一 :
        Cookie cookie_username = new Cookie("username", "Cyan_RA9");
        if (cookie_username != null) {
            resp.addCookie(cookie_username);
        }

        //方式二 :
        Cookie[] cookies = req.getCookies();
        String cookieName = "color";

        Cookie cookie = CookieUtils.readCookieByName(cookieName, cookies);
        if (cookie != null) {
            cookie.setValue("bluish_green");    //Cookie信息中不能包含空格
            resp.addCookie(cookie);
        } else {
            System.out.println("当前访问服务器端的浏览器,没有保存该Cookie信息!");
        }

        //在服务器端遍历Cookies
        for (Cookie c : cookies) {
            System.out.println("cookie's name = " + c.getName() +
                    ", cookie's value = " + c.getValue() + "\n");
        }

        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>The task of updating Cookie is completed~</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 : (GIF) (请求头抓包时,手贱刷新了一下


五、Cookie的生命周期

        1.基本介绍 : 

        Cookie的生命周期指的是如何管理Cookie的销毁,即 Cookie 什么时候被销毁(删除)。

        2.setMaxAge(int expiry)方法 : 

        public void setMaxAge(int expiry) : 该方法可以设置cookie的最大生存时间,以秒为单位

        Δ注意事项 : 

        expiry为正值,表示cookie将在经过该值对应的秒数后过期。即,该值是cookie过期的最大生存时间,而不是cookie 的当前生存时间。

        PS : cookie过期/失效,指的是浏览器在访问服务器时,HTTP请求头中不会携带过期的cookie信息浏览器根据cookie创建的时间,计时到expiry,就认为该cookie无效

        expiry为负值,表示cookie不会被持久存储,将在Web会话的浏览器退出时被删除。默认情况下,expiry = -1(会话级别的生命周期)。

        expiry = 0,表示令cookie立刻失效,立刻被"删除"。(销毁)

        3. 应用实例 : 

                CookieServletLife类代码如下 : 

package lifetime;

import instance.CookieUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet(urlPatterns={"cookieLife"})
public class CookieLifeServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建测试的cookie
        Cookie newCookie1 = new Cookie("test1", "haha");
        Cookie newCookie2 = new Cookie("test2", "NB");

        //2.设置cookie生命周期
        newCookie1.setMaxAge(10);   //10s后🐔
        newCookie2.setMaxAge(0);    //直接🐔

        Cookie[] cookies = req.getCookies();
        Cookie test1 = CookieUtils.readCookieByName("test1", cookies);
        Cookie test2 = CookieUtils.readCookieByName("test2", cookies);
        System.out.println("test1 = " + test1);
        System.out.println("test2 = " + test2);

        //3.别忘了将cookie信息发送给浏览器
        if (null != test1) {
            resp.addCookie(newCookie1);
        } else {
            System.out.println("没有找到该cookie__test1.");
        }
        if (null != test2) {
            resp.addCookie(newCookie2);
        } else {
            System.out.println("没有找到该cookie__test2.");
        }

        //4.回显信息给浏览器
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>The task of testing cookie's lifetime is completed~</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 :(GIF) 


六、Cookie有效路径

        1.规则 : 

        Cookie有效路径,指的是浏览器端保存的Cookie的path属性。如下图所示 : 

         Cookie 的 path 属性可以有效的过滤哪些Cookie会被携带在HTTP请求头中发送给服务器,哪些不会。

        path属性是通过请求的URL来进行有效的过滤,规则如下——

        若cookie未设置path属性,默认是"/Application context",即Web工程路径

        当请求的URL是Web工程路径的子路径时,即比Web工程路径更具体的路径,eg : /Cookie_Demo/d1,也会携带父路径的Cookie信息。(集合的包含关系)

        cookie.setPath("......"); 方法用于设置该cookie的path属性。

        2.应用实例 : 

                CookiePathServlet类代码如下 : 

package path;

import instance.CookieUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

/**
    若没有采用web.xml配置文件的方式配置URL,
    就一定不要忘记配置@WebServlet注解
 */
@WebServlet(urlPatterns={"/cookiePath"})
public class CookiePathServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("fruit", "grape");
        /*
            也可以通过req.getContextPath来获取工程路径
         */
        cookie1.setPath(req.getContextPath());

        Cookie cookie2 = new Cookie("animal", "cat");
        cookie2.setPath(req.getContextPath() + "/d1");

        resp.addCookie(cookie1);
        resp.addCookie(cookie2);

        resp.setContentType("text/html; charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>Check the cookies inside the HTTP-request-bag.</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                运行效果 : (GIF)

        3.cookie使用细节 : 

        一个Cookie只能标识一种信息,它至少含有一个标识该信息的NAME和VALUE。PS:Cookie的name和value都是String类型

        一个WEB站点可以给一个浏览器发送多个Cookie,一个浏览器也可以存储多个WEB站点提供的Cookie

        cookie的总数量没有限制,但是每个域名下的cookie数量和每个cookie的大小是有限制的(不同的浏览器一般限制不同,了解即可);总之一句话,Cookie不适合存放数据量大的信息

         注意,删除cookie时,path必须一致,否则不会删除成功

        可以通过 String string = URLEncoder.encode("string", "utf-8"); 方法来设置指定value的编码。然后再通过Cookie cookie = new Cookie("key", string); 来创建指定了value编码格式的Cookie对象。最后,通过resp.addCookie(cookie); 即可将cookie信息发送给浏览器。

            如果需要对中文Cookie进行解码,使用String value = URLDecoder.decode(value, "utf-8"); 方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】带你图文结合深入栈和队列,并具体分步实现

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们继续来学习初阶数据结构的内容&#xff0c;今天我们要讲的是栈与队列部分的内容&#xff0c;这篇博客先讲栈&#xff0c;队列我们放到下次再讲 好了&#xff0c;废…

看完秒懂:5G技术会给视频监控行业带来怎样的变革?

5G是第五代移动通信技术&#xff0c;能够提供更高的带宽和更快的传输速度&#xff0c;这将为视频技术的发展带来大量机会。随着5G技术的逐步普及与商用&#xff0c;人们将能够享受到更加流畅的高清视频体验&#xff0c;并且5G技术还拥有更低的延迟和更高的网络容量。这些优势不…

(树) 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】

❓剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 难度&#xff1a;简单 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科 中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满…

分清性能测试,负载测试,压力测试这三个的区别

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。 …

RN 使用react-navigation写可以滚动的横向导航条(expo项目)

装包&#xff1a; yarn add react-navigation/material-top-tabs react-native-tab-view npx expo install react-native-pager-view import React from react import { View, Text, ScrollView, SafeAreaView } from react-native import { Icon } from ../../../../../compo…

ElastAlert通过飞书机器人发送报警通知

前言 公司采用ELK架构搜集业务系统的运行日志&#xff0c;以前开发人员只有在业务出现问题的时候&#xff0c;才会去kibana上进行日志搜索操作&#xff0c;每次都是被用户告知系统出问题了&#xff0c;这简直是被啪啪打脸~ 于是痛定思痛&#xff0c;决定主动出击&#xff0c;…

【刷题笔记8.8】两数之和

LeetCode&#xff08;Hot100&#xff09;&#xff1a;两个数之和 题目描述及示例&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会…

学成在线踩坑

这段时间在做学成在线的过程中&#xff0c;偷懒遇到了一个这个问题&#xff0c;这个问题是直接跑老师的程序出现的&#xff0c;配置文件方面并没有出其他情况&#xff0c;找了半天&#xff0c;没找到错误。最后因为分析可能是MediaFileServiceImpl.java这个代码出了问题&#x…

Spring高手之路12——BeanDefinitionRegistry与BeanDefinition合并解析

文章目录 1. 什么是BeanDefinitionRegistry&#xff1f;2. BeanDefinitionRegistry 的使用2.1 BeanDefinitionRegistry 简单例子2.2 有关ImportBeanDefinitionRegistrar的实现类的例子 3. BeanDefinition的合并3.1 调试验证BeanDefinition的合并3.2 BeanDefinition合并的目的 4…

怎么在JMeter中的实现关联

我们一直用的phpwind这个系统做为演示系统, 如果没有配置好的同学, 请快速配置之后接着往下看哦. phpwind发贴时由于随着登陆用户的改变, verifycode是动态变化的, 因此需要用到关联. LoadRunner的关联函数是reg_save_param, Jmeter的关联则是利用后置处理器来完成. 在需要查…

jpa Page 1 of 0 containing UNKNOWN instances错误关于like问题的解决记录

导致这个问题的原因很多&#xff0c;这里记录一下我碰到的问题和解决方法。 网上有说时 pageNo要从0开始&#xff0c;我的不是这个问题。 在使用springboot jpa时&#xff0c;发现使用 t.ip like %?5% 语句&#xff0c;如果数据库记录的ip is null时&#xff0c;将查询不到该…

【网络】应用层——HTTPS协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; HTTPS协议 &#x1f349;HTTP的不安全性&#x1f349;认识HTTPS协议&#x1f353;加密解密&#x1f35…

露营,「迷失」在春风里

【潮汐商业评论/原创】 “周末一起去露营吧&#xff1f;”Susan向闺蜜发起邀请。 Susan闺蜜看到后连忙说“去多了感觉没意思&#xff0c;还不如去隔壁城市走走呢&#xff1f;”两人一拍即合&#xff0c;便研究起了攻略。 Susan疑惑&#xff0c;好像露营也没火多久&#xff0…

【Linux】-- 进程间通信

目录 一、进程间通信介绍 二、管道 1.什么是管道&#xff08;pipe&#xff09; 2.重定向和管道 &#xff08;1&#xff09;为什么要有管道的存在 &#xff08;2&#xff09;重定向和管道的区别 3.匿名管道 &#xff08;1&#xff09;匿名管道原理 &#xff08;2&…

springAOP的实例

文章目录 前言一.用户登录权限校验1.1 spring 拦截器1.2 传统的用户登录权限验证1.3 使用拦截器的方式1.4 案例1.5 拦截器实现原理 三.统一异常处理3.1 什么是统一异常处理3.2 具体步骤 四.统⼀数据返回格式4.1 为什么需要统一的数据返回4.2 统一返回数据的格式4.3 统一移除处理…

瞅一眼nginx

目录 &#x1f9ac;什么是nginx? &#x1f9ac;nginx配置官方yum源&#xff1a; &#x1f9ac;nginx优点 &#x1f9ac;nginx 缺点 &#x1f9ac;查看nginx默认模块 &#x1f40c;nginx新版本的配置文件&#xff1a; &#x1f40c;nginx目录索引 &#x1f40c;nginx状态…

Attacks in NLP

一、 Introduction NLP对抗攻击是人工智能对抗攻击的一个重要的组成部分&#xff0c;但是最近几年才逐渐开始兴起&#xff0c;究其原因在于NLP对抗攻击与传统computer vision或者audio对抗攻击有很大的不同&#xff0c;主要在于值空间的连续性&#xff08;CV、audio&#xff0…

基于Selenium技术方案的爬虫入门实践

通过爬虫技术抓取网页&#xff0c;动态加载的数据或包含 JavaScript 的页面&#xff0c;需要使用一些特殊的技术和工具。以下是一些常用的技术方法&#xff1a; 使用浏览器模拟器&#xff1a;使用像 Selenium、PhantomJS 或其他类似工具可以模拟一个完整的浏览器环境&#xff0…

Mysql的instr()函数用法详解

最近接手了一个大型老项目&#xff0c;用到的jfinal技术&#xff0c;后端大部分都是拼写的sql&#xff0c;对一些sql函数不太理解的我算是一个挑战&#xff0c;也是一个进步的很大空间。 今天来说下instr这个函数 首先看下我们的表数据 我们先执行&#xff1a; SELECT * fro…