TCP与UDP以及HTTP的区别
- TCP网络传输协议 :需要先建立连接通道才能进行传输,安全
例如:打电话,需要对方接通才可以进行通话
应用:建立Session一次会话连接 - UDP数据报信息:不需要和对方建立连接就可以传输,可以传输大数据量,不安全
例如:发报纸。不需要考虑对方是否能接受到,只负责发出去
应用:发送邮箱或者短信 - HTTP 超文本网络传输协议 :在TCP网络传输协议基础上升级,针对用户服务的协议,用户服务体现在应用程序之间的交互
强调请求三件套(请求行,请求头,请求体),响应三件套(响应头,响应行,响应体)
应用:浏览器端和服务器端通过HTTP协议保持通信
TIP/IP网络通信协议模型及端口号
- 网络接口层:
- 网际层:IP,ICMP,ARP
- 传输层:TCP,UDP
- 应用层:HTTP 80,HTTPS 443,SMTP,FTP 21,TELNET 23,SNMP
OSI七层物理模型
HTTP请求报文和响应报文
HTTP请求报文(请求行+请求头+请求体):
HTTP响应报文(响应行+响应头+响应体):
层协的议服务于上层协议
HTTP状态码
- 200: OK 请求响应成功
- 303:See Other 重定向其他页面
- 400: 请求无效,请求参数有误http格式有误
- 404: Not Found 访问不到资源,请求路径有问题,或者服务器不存在
- 500: Internal Server Error 服务器发生错误
HTTP协议的状态码在响应行
状态码首位规则:1 消息响应 2 成功响应 3重定向 4客户端错误 5服务端错误
Cookie和Session的区别
Cookie域
浏览器存储用户缓存信息的地方,不同页面对应一个Cookie对象
同一个站点最多保存20个Cookie,单个Cookie数据大小不能超过4kSession域
服务器存储用户缓存信息地方,不同浏览器对应一个Session对象
每个浏览器记录SessionId,不同浏览器对应不同的SessionId,可存储数据较大
Cookie有什么优点?
- 判断用户是否登录,下次可以直接显示登录信息并登录,如果删除cookie,则每次需要重新填写登录信息
- 同一站点不同页面的购物商品的信息最终付款时将不同页面的Cookie信息提取合并
Cookie为什么不安全?
Cookie不安全,服务器端可以解析浏览器的本地Cookie而读取用户的信息,
将不重要的信息可以存放到Cookie
setMaxAge(int)方法设置cookie缓存保留时间
为什么选择使用Session?
Session安全,将一些敏感的数据存远端的服务器Session中其他服务器无法窃取
防止服务内存压力过大,Session关闭或定时会自动销毁数据
invalidate()方法强制结束占用时间长的会话
setMaxInactioveInterval(int)方法设置当前会话缓存保留时间
浏览器Cookie被禁用如何获取Session数据?
第一次请求访问服务器后,服务器作出响应并返回SessionId,SessionId被JavaScript获取并下一次请求时携带
Post和Get的区别
相同点
都可以先服务器发送请求,并携带传输实体
不同点
GET请求:
- 一般用于获取信息:指定资源经过服务器响应内容,发送请求参数可以追加到URL末尾传值,以便于?发送给服务器,
将传输数据存放在HTTP报文实体的Head头中,提交URL末尾将传输内容暴露不安全,提交数据量小
POST请求:
- 一般用于更新信息:将传输数据防止在HTTP报文实体的主体中,不会暴露传输实体的内容,安全,提交数据量大
用途
- GET 适用于 查询 删除
- POST 适用于 添加 更新
应用场景
项目中使用RESTful架构风格
,通过HTTP,根据GTE请求或POST请求做操作
请求转发和重定向的区别
- 请求转发request: 请求ServletA,ServletA私下访问ServletB请求路径无变化
例如:你开一张票据,让服务员A去做一件事,服务员A私下寻找服务员B,将事情办好后给你答复
优点: 一个requset对象数据,可以两个page页面数据作用域共享
缺点: 仅访问当前应用页面
- 重定向response:第一次请求ServletA响应获取到ServletB的URl,然后浏览器第二次发送请求ServletB,请求路径发生了变化
例如:你开一张票据,让服务员去做一件事,服务员返还给你一张票据,让你去寻找另一个服务员
优点: 可以转向任意其他网站页面
缺点: 一个requset对象数据作用域不共享,两次请求生成两个request对象
如何获取请求转发和重定向?
-
请求转发
HttpServletRequest对象
getRequsetDispatcher(String path)方法
ServletContext对象
getRequsetDispathcer(String path)方法
RequestDispatcher对象
forward(ServletRequest request, ServletResponse response)方法 -
重定向
HttpServletResponse 对象
sendRedirect()方法
请求转发和重定向的应用?
请求转发:可以访问web-inf下的文件
重定向:实现图片的异步上传
--------------------前端篇---------------------
什么是JSON数据
JavaScript的专属数据格式Json,JavaScript可以对Json格式数据直接使用
普通格式 {“key”:“value”}
数组格式 [{“key”:“value”},{“key”:“value”}]
复杂格式 {“key”:{“key”:“value”}}
复杂数组格式 [{“key”:{“key”:“value”}},{“key”:{“key”:“value”}}]
Json能做什么?
- 前后端数据交互:Json格式数据可以在JavaScript对象和字符串之间来回转换
- 跨域传输
- 跨语言传输
Json格式数据的注意事项
普通格式:字符串 数值型(十进制) 布尔值 null
数组格式:数组 对象 ,禁止正则,函数和日期
Jquery Ajax异步请求
同步与异步区别?
同步: 整个页面全部刷新,需要等待整个页面
异步: 按需获取局部位置的信息,俗称局部刷新
异步提交如何改为同步提交?
将jax参数Async参数修改为flase
Ajax参数都有哪些?
url:请求地址,string类型
Data:发生的数据,string或objcet类型
Type:请求方式,string类型
DataTpye:预期返回值类型,string类型
Timeout:请求超时时间(毫秒),number类型
Async:异步默认为true(默认),boolean类型
Cache:从浏览器缓存加载信息默认为true,boolean类型
BeforeSend:发送请求之间做多事情,添加自定义Http头,function类型
success:function成功触发的函数
error:function失败触发的函数
Ajax的优缺点
- 优点: 服务器压力小,按需取数据,局部刷新减少等待
- 缺点: Ajax大量使用Js和ajax引擎,取决于浏览器的支持,考虑浏览器的兼容性,并且局部刷新没有后退按钮
使用场景
省市区三级联动,按省市区下拉列表自动加载
Jquery选择器
选择器分为哪四大类:
-
基本选择器
– id选择器${"#id"}
– class选择器${“element”}
– 标签选择器${".class"} -
层级选择器
– 父子选择器ancestor descendant
– 后代选择器parent > child
– 相邻选择器prev + next
– 兄弟选择器prev ~ siblings -
过滤选择器
– 基本过滤
– 内容过滤
– 可见性过滤
– 属性过滤器
– 子元素过滤
– 表单对象属性顾虑 -
表单选择器[重点]
--------------------后端篇--------------------
Servlet的生命周期
- HTTP请求:浏览器➡服务器
- Web服务器解析: 设计模式比较创建哪个子类的Handler的实例
- 实例化:创建Servlet实例
- 初始化:调用init()
- 服务:调用Service()
- 响应服务器:Servlet➡服务器
- 响应浏览器:服务器➡浏览器
- 销毁:调用desroy()
实例化: (单例)仅执行一次
初始化: 仅执一次
服务: 多线程的每次访问都执行
销毁: Web服务器停止或应用卸载
如何保证Servlet服务的线程安全问题?
- 继承SingleThreadModel
缺点:打破单例Servlet实例,加大内存开销 - 必须避免使用全局变量共享数据,使用局部变量,每个线程执行Service()使用自己的变量
- 通过ThreadLocal ,内部结构是Map结构,会创建多个副本,当前线程作为key,每个线程对应一个ThreadLocal的一个Map副本,不会发生共享数据
- 使用线程锁
浏览器如何访问Servlet?
通过xml配置里的标签寻址➡地址对应Servlet➡执行Service()服务
JSP与Serlvet
- 什么是JSP?
JSP JavaServerPage (Java服务端页面)动态页面,jsp = html+java - 什么是Servlet?
小型服务器程序,控制器,每个业务模块对应一个Servlet,纯Java
JSP和Servlet均属于SUN公司定义的一种开发动态Web资源的技术
JSP的执行原理
翻译.jsp ➡ 编译.java ➡ 执行.class
为什么说Jsp是Servlet的升级版?
运行Web服务端➡
进入work文件目录寻找项目空文件夹➡
浏览器端访问Web浏览器➡
访问.Jsp浏览页面项目空文件夹自动生成.java和.class文件➡
打开.java文件主类的继承父类HttpJspBean➡
继续点击HttpJspBean的继承父类HttpServlet
Jsp间接的继承HttpSerlvet类,并重写了HttpServlet方法
Servlet的注意事项
浏览器访问服务器发送请求时,才会创建Servlet对象,它提供了生命周期: 实例化,初始化,服务和销毁.可以在初始化方法设置一些初始数据.Serlvet线程不安全,多线程单实例执行并发访问同一资源,引发线程安全问题,必须避免使用全局变量,应该使用局部变量
JSP的九大内置对象
JSP对象 | 原型 | 功能 |
---|---|---|
page | Objcet当前this对象 | 代表当前Servlet实例 |
out | JspWriter,与PritinWriter对继承Writer | 字符输出流 |
response | HttpServletResponse | 通过HTTP协议响应到浏览器的数据 |
pageContext | PageContext | 代表当前页面信息,可以创建并获取其他8个隐式对象。可以获取四大作用域 |
request | HttpServletRequest | 通过HTTP协议请求到服务器的数据 |
session | HttpSerssion | 代表当前会话信息 |
application | ServletContext | 代表整个应用信息 |
config | ServletConfig | 获取xml文件的Servlet配置信息 |
exception | Throwable | 显示异常信息,需要isErrorPage=”true“ |
JSP四大作用域
- PageContext
pageConext 仅页面有效,存放当前页面的数据,使用较少 - SerlvetRequset
requset 仅一次请求(转发)内有效,使用非常多 - HttpSerssion
session 作用域仅当前会话,存放用户的登录信息,各个页面的购物车信息,使用较多 - SerlvetContext
application 作用域整个应用,作用域大,谨慎使用
四大作用域由小到大
page(一个页面,转发后不会存在) < request(一个请求,重定向后不会存在) < session(整个会话,换一个浏览器将会失效) < application(整个Web应用,切换Web应用失效)
JSTL标签
建立在EL基础语言上,解决EL表达式不能复杂循环操作的问题的标签
使用过什么JSTL标签?
常见的由Core标签库,c标签的使用
-
通用标签
– set 设置变量
– out 输出数据
– remove 溢出变更 -
条件标签
– if
– choose 相当于swich语句 -
迭代循环
– 普通循环
– 迭代器循环
JSP动作标签
<jsp:forward>请求转发
<jsp:param>页面传递数据
<jsp:include>动态包含
JSP动作标签 静态包含和动态包含的区别
静态包含<%:include> 嵌入内容,不能传入参数
动态包含<jsp:include> 嵌入结果,可以传递参数
避错小节
如何防止表单重复提交数据?
表单重复提交相同请求产生的原因?
网络延迟,用户重复提交,发生重复提交
表单重复提交的解决方案?
- 数据库主键唯一约束.相同数据不做任何处理.
- 提交之后响应重定向.避免用户重复点按钮
- 页面 JavaScript 逻辑标识,提交后用户点击按钮会判断逻辑标识,作出提示"信息已提交"
- 利用Sessino:生成Toeken令牌,第一次提交Session没有携带token,于是生成token令牌并做记录,然后进行表单内容保存数据库,第二次重复提交token相同,不做任何操作
跨域
同源策略 :不支持两个域进行交互
静态标签 跨域问题
Ajax 不能跨域
Cookie 不能跨域
LocalStorage 不能跨域
解决方案:
一、CORS (Get put delete update) @CrossOrigin前台会增加一个响应头
二、JSONP (仅支持get请求)
JSONP
WebSocket 服务端和客服端简历三次握手(连接)
双全工通信
客户端 请求头 : Upgrade(不是HHTP协议) 对应WebSocket
Tomcat 对 Websocket 支持
编程式
注解式 @ServerEndnPoint
生命周期:
@OnOpen 打开连接
@OnMessage
@OnError服务端报错触发
@OnClose连接关闭
服务端给客户端推数据
WebSocekt基于H5的新协议