一:是否登录状态
服务端登录的时候,给分配一个session用于存储数据,同时将sessionID返回给浏览器,浏览器通过cookie把sessionID存储起来,下次访问时携带上,服务端就可以通过sessionID来确定用户是否登录。
当用户请求页面,一般需要先登录,用户第一次输入用户名和密码之后,前台发送post请求,后台获取用户信息,通过查询数据库来验证用户信息是否正确,如果验证通过,则会开辟一块session空间来储存用户数据,并且同时生成一个cookie字符串,由后台返回给前台,前台接收后,会把这个cookie字符串储存到浏览器的cookie空间中,这个cookie就相当于一把钥匙,可以打开后台存储对应用户信息的锁,当用户下一次请求的时候,客户端便会自动携带这个cookie去请求服务器,服务器识别后,就会读取session中的用户信息,这样用户就可以直接访问,就不需要再输入用户名密码来验证身份了。
缺点:需要服务端存储,用户量多的情况下就需要占大量内存,成本高,因此出现了token技术...
二:session和cookie的区别
保存位置:
cookie保存在浏览器端,session保存在服务端。
使用方式:
cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。
session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器,可以将其放到cookie中,进行传输,如果浏览器不支持cookie,则应该将其通过encodeURL(sessionID)进行调用,然后放到url中。
存储内容:
cookie只能存储字符串,而session存储结构类似于hashtable的结构,可以存放任何类型。
存储大小:
cookie最多可以存放4k大小的内容,session则没有限制
应用场景:
cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录,session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息。
弊端:
cookie的大小受限制,cookie不安全,如果用户禁用cookie则无法使用cookie。如果过多的依赖session,当很多用户同时登陆的时候,此时服务器压力过大。sessionId存放在cookie中,此时如果对于一些浏览器不支持cookie,此时还需要改写代码,将sessionID放到url中,也是不安全。
三:Servlet的生命周期
定义:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是运行在 Web 服务器或应用服务器上的程序。
作用:它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。主要功能在于收集来自网页表单的用户输入,交互式地浏览和生成数据,还可以生成动态Web内容。
生命周期:
实例化 :Servlet 容器创建 Servlet 的实例
初始化 :该容器调用init() 方法
请求处理 :如果请求Servlet,则容器调用 service()方法
服务终止 :销毁实例之前调用destroy() 方法
四:为什么要重写doget
在Servlet中我们尽量重写doGet和doPost方法,而不直接重写Service方法(简言之就是Service里面实现了一些其他好的方法,重写后就得不到这种好处了),这样第一次加载完成之后,接下来再访问能提高加载的速度,特别是静态资源多的一些网站。
五:数据库连接怎么传给前端
前端使用AJAX或者表单提交的方式将请求发送给后端,后端根据前端发过来的请求重写doGet()或者doPost()请求去执行相应的业务逻辑,首先使用request,getparameter()方式接收前端传过来的参数,然后进行设置相应类型和编码,把数据存在PrintWriter(),在调用respons.getWriter()获取printWriter对象,传给前端。
六:重定向有什么特点
当地址栏发生变化时,可以跳转到重定向的网页。
重定向是2次请求,不能使用request对象共享数据
七:final特点和static特点
final:
被修饰的类不能被继承
被修饰的方法不能被重写
被修饰的常量不能被改变
static:
全局唯一,不可被二次赋值,必须由初始值
静态方法只能调用静态属性
不可修饰构造方法
修饰的方法不能被重写
八:get和post的区别
1. get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;2. get请求可以被缓存,post请求不会被缓存。
3. get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。
4. get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
底层:
GET 和 POST都是http请求方式,底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),
对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据)表示成功;而对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服务器响应 200 (返回数据)。
九:v-if和v-show的区别
1.v-if 和 v-show 都是用来控制元素渲染, v-if 是根据后面数据的真假来进行渲染来判断
2.DOM的添加删除等操作 v-show只是在修改元素的css样式(display属性值)
3.v-show不管初始条件是否为真,都会被渲染
4. v-if 有更高的切换消耗,不适合做频繁的切换,v-show 有更高的出事渲染消耗,适合做频繁的切换