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对象)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值