前端:
form表单,method必须是POST, enctype属性是multipart/form-data, type是file
引起HTTP请求体的格式以multipart的形式传输
后端:
正常的支持POST请求的动态资源
必须以@MltipartConfig修饰类
使用 req.getPart(name)得到对应的Part对象,调用对应的方法得到需要的信息
如果要保存成链接可以访问的静态资源
默认HTTP请求是无状态的:服务器不知道访问的请求属于哪个会话
会话(对话)是在请求(一句话)之上的概念
就有了 Cookie(凭证) + Session(我内部的记忆)机制
在此查看cookie信息
Cookie和Session最主要的功能是用于做登陆态管理的
Session是只存在于服务器的一套数据,通过session-id找到对应的数据
是为每个会话准备了一个独立的Key-Value结构(HTTPSession对象:专属文件柜),通过session-id来区分。
默认情况:存在内存中(不持久化:重新运行进程就没了)
其他的存储位置:本地文件、数据库、内存数据库(Redis、Mecached)
如果是true,就返回之前的,如果是flase,就当场新建一个会员
HttpSession:getAttribute(name) / setAttribute(name,value) / removeAttribute(name)
4.Session本身也是独立的机制,如果浏览器禁用session,有时候可能无法访问国外的浏览器
Cookie和Session是最常见的场景是一起配合工作,但是两者是独立的。
cookie是HTTP协议相关的,属于Clint和Server之间的事情
1.保护好cookie
2.需要在之后的请求中携带Cookie(表现为HTTP请求头的Cookie Header)
生成cookie并传递给浏览器 通过HTTP响应(表现为HTTP响应的Set-Cookie Header)
请求头:Cookie: name1 = value1; name2 = value2;
响应头:Set-Cookie:name1 = value1; name2 = value2;
cookie:浏览器和服务器交换数据的凭证
name设置了过期时间,43分时候就会过期。gender没有设置,所以他还是显示回话
将用户数据持久化到MySql中
1.建表
2.操作数据库的对象 DAO data access object
/register.html form 提交username+password
/register.do 读取用户名+密码 ,完成用户的添加(插入到表中)
注册后直接登陆 or 跳转到登录页让用户登陆
没有设置字符集编码所导致的
一个web应用是由多个场景,每个场景下又由多个功能组成。(多个页面html)
一个页面包括 1个Html,n个css、js资源,n个json资源,n个*.do资源。
1.路径path = context path + servlet path
2.内容格式类型(content-type):text/plain、text/css、application/javascript 、applicatio/json
3.作为开发者,确定静态/动态资源
4.支持的HTTP方法 (主要是动态)
以资源为单位,进行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
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);
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)