• 16.面试重点Cookie&Session


    一、文件上传(使用频率高,但不是很重要)

    1.通过form表单

    前端:

    form表单,method必须是POST, enctype属性是multipart/form-data, type是file 

    引起HTTP请求体的格式以multipart的形式传输

     后端:   

    正常的支持POST请求的动态资源

     必须以@MltipartConfig修饰类 

    使用 req.getPart(name)得到对应的Part对象,调用对应的方法得到需要的信息

    如果要保存成链接可以访问的静态资源

                

    2.通过JS+Ajax的方式实现

    二、会话管理(Cookie/Session,使用频率高、面试多、难度大)

    默认HTTP请求是无状态的:服务器不知道访问的请求属于哪个会话

    会话(对话)是在请求(一句话)之上的概念

    就有了 Cookie(凭证) + Session(我内部的记忆)机制

     在此查看cookie信息

    Cookie和Session最主要的功能是用于做登陆态管理的                  


    1.Session会话的数据结构:每个cookie对应一个存储柜(session)

    Session是只存在于服务器的一套数据,通过session-id找到对应的数据

    1.Session是纯粹Server内部的事情

    是为每个会话准备了一个独立的Key-Value结构(HTTPSession对象:专属文件柜),通过session-id来区分。

    2.一般,把session-id放在Cookie中,利用cookie的机制进行传递。

    默认情况:存在内存中(不持久化:重新运行进程就没了)

    其他的存储位置:本地文件、数据库、内存数据库(Redis、Mecached)

    3.Servlet代码上,getSession( ):

    如果是true,就返回之前的,如果是flase,就当场新建一个会员

    HttpSession:getAttribute(name)   /  setAttribute(name,value)  /  removeAttribute(name)

    4.Session本身也是独立的机制,如果浏览器禁用session,有时候可能无法访问国外的浏览器

     2.Cookie

    Cookie和Session是最常见的场景是一起配合工作,但是两者是独立的。

    cookie是HTTP协议相关的,属于Clint和Server之间的事情

    1.Client(浏览器)的职责:

    1.保护好cookie

    2.需要在之后的请求中携带Cookie(表现为HTTP请求头的Cookie Header)

    2.Server(服务器)的职责:

    生成cookie并传递给浏览器 通过HTTP响应(表现为HTTP响应的Set-Cookie Header)

    3.表现在HTTP协议上:

    请求头:Cookie: name1 = value1;   name2 = value2;

    响应头:Set-Cookie:name1 = value1;   name2 = value2;


    cookie:浏览器和服务器交换数据的凭证

    4.cookie是个独立的机制,本身还有一些属性:

     name设置了过期时间,43分时候就会过期。gender没有设置,所以他还是显示回话

    5.使用Cookie +Session解决会话管理时,Cookie的主要职责是携带seesion-id

    三、用户管理

    1.用户注册(添加新用户)

    2.用户登录(验证)

    3.获取的登录用户信息

    将用户数据持久化到MySql中

    1.建表

    2.操作数据库的对象 DAO data access object

    4.注册

    /register.html   form 提交username+password

    /register.do     读取用户名+密码 ,完成用户的添加(插入到表中)

                          注册后直接登陆 or 跳转到登录页让用户登陆

    没有设置字符集编码所导致的

    四、Web开发

     一个web应用是由多个场景,每个场景下又由多个功能组成。(多个页面html)

    一个页面包括 1个Html,n个css、js资源,n个json资源,n个*.do资源。

    1.资源

    1.路径path = context path + servlet path

    2.内容格式类型(content-type):text/plain、text/css、application/javascript 、applicatio/json

    3.作为开发者,确定静态/动态资源

    4.支持的HTTP方法  (主要是动态)

    2.浏览器-服务器之间是如何交换进程的

    以资源为单位,进行HTTP协议的沟通

    1.HTTP协议是应用层协议

    2.请求方法:get / post

    3.请求头:Cookie头

    4.响应状态:1xx  、2xx 、3xx、 4xxx、5xxx(服务器错误)

                         200、404、405(不支持访问资源)、500(异常)、301 、302、307(重定向)

    5.响应头:Content-type、Set-cookie

    3.前端场景

     

    4.JS中对DOM的操作

    1.如何查询需要的结点

    document.querySelector(选择器字符串)

    选择器:

    id选择器:  '#...'     class选择器: '.some'     元素选择器: 'body'

    2.元素对象,常见属性之间读取或者修改

    img.src = '..';    input.value = '...';

    e.textContent | e.innerText   元素内部文本  

    3.修改htm结构(插入孩子、删除孩子)

    (1)e.innerHTML = '..'

     (2) var e = document.createElement('div');

         parent.appendChild(e);

         parent.removeChild(e);

    4.后端场景

    1.响应内容

    resp.setCharacterEncoding("utf-8");

    resp.setContentType("...");

    resp.getWriter().var;

    2.读取用户输入

    (1)以form表单方式提交(放在query string或者请求体(x-www-urlencoded、multipart/form-data))

    req.setCharacterEncoding(); getParameter("..");

    如果是文件上传,必须使用@MultipartConfig修饰类,req.getPart(name)

    (2)前端读取

    直接从req.getInputStream()请求体输入流读取

    借助jackson提供的方法

    User user = objectMapper.readValue(req.getInputStream(),User.class)

    5.关于数据——放在数据库JDBC的操作(DAO对象、model对象、Service对象)

  • 相关阅读:
    Ai时代降临,我们的未来又在哪里?
    Q-Vision+Kvaser CAN/CAN FD/LIN总线解决方案
    svga动画安装和使用
    案例:AJAX实现搜索联想 自动补全
    IOS打包上架AppStore被驳回信息记录
    【SpringBoot】详细介绍SpringBoot中Entity类中的getters和setters
    不要慌,选择排序也是一样简单的
    数字图像处理与Python实现-Scikit-Image-图像特征(三)
    SpringBoot项目如何实现热启动?
    Java 网络编程 —— 创建非阻塞的 HTTP 服务器
  • 原文地址:https://blog.csdn.net/mmm174/article/details/127937757