JAVA WEB面试总结
本文目录:
1. 什么是cookie
2. 什么是session
3.什么是Servlet,Servlet生命周期方法
4.JSP隐含对象
5.JSP的四个域对象的作用范围
6.转发和重定向的区别
7.Post和Get请求的区别
8.拦截器与过滤器的区别
9.https与http区别
1. 什么是cookie
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理.
1.1 Cookie特点:
a. 修改跟删除只能覆盖更新;
b. 不能跨域;
c. 保存在浏览器端;
d. 使用key-value保存。
1.2 工作流程:
1.3 cookie api
2. 什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以.
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
2.1 session 特点
- 各个线程的session隔离;
- 浏览器第一次访问时创建保存在服务端;静态地址访问不会创建session;
- 同一个session多次访问时记录最后访问时间。
2.2 session api
//获取Session对象
request.getSession()
request.getSession(boolean create)
//获取SessionId
getId()
//获取当前session对象的创建时间
getCreationTime()
//获取最后一次访问该session对象的时间
getLastAccessedTime()
//设置Session最大时效
setMaxInactiveInterval()
//获取Session最大时效
getMaxInactiveInterval()
//判断当前Session对象是不是新建的
/**
如果客户端请求消息中返回了一个与Servlet程序当前获得的HttpSession对象的会话标识号相同的会话标识号,则认为这个HttpSession对象不是新建的。
*/
isNew()
//销毁当前Session对象
invalidate()
//属性相关
setAttribute()
3.什么是Servlet,Servlet生命周期方法
用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容, Servlet 可以用 javax.servlet 和 javax.servlet.http 包创建。
生命周期:
-
- Servlet 通过调用 init () 方法进行初始化。只会执行一次
- Servlet 调用 service() 方法来处理客户端的请求。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
4.JSP隐含对象
隐含对象 |
所属的类 |
说明 |
request |
javax.servlet.http.HttpServletRequest |
客户端的请求信息 |
response |
javax.servlet.http.HttpServletResponse |
网页传回客户端的响应 |
session |
javax.servlet.http.HttpSession |
与请求有关的会话 |
out |
javax.servlet.jsp.JSPWriter |
向客户端浏览器输出数据的数据流 |
application |
javax.servlet.ServletContext |
提供全局的数据,一旦创建就保持到服务器关闭 |
pageContext |
javax.servlet.jsp.PageContext |
JSP页面的上下文,用于访问页面属性 |
page |
java.lang.Object |
同Java中的this,即JSP页面本身 |
config |
javax.servlet.servletConfig |
Servlet的配置对象 |
exception |
java.lang.Throwable |
针对错误网页,捕捉一般网页中未捕捉的异常 |
对象名称 |
API |
Request |
setAttribute/getAttribute/getParameter /getRequestURI/getRemotePort |
response |
addCookie/encodeRedirectURL/sendError |
out |
clear |
session |
getMaxInactiveInterval/invalidate/getId/ getCreationTime |
application |
getServerInfo/getContext |
pageContext |
getRequest/getResponse/getServletContext/ getSession/setAttribute |
exception |
getMessage |
config |
getInitParameter/getServletName |
page |
代表jsp编译后的servlet,能调用servlet里的方法 |
5.JSP的四个域对象的作用范围
域 |
作用范围 |
PageContext域 |
当前JSP页面范围 |
request域 |
一次请求 |
session域 |
一次会话 |
application域 |
整个web应用 |
6.转发和重定向的区别
名称 |
请求次数 |
url地址是否改变 |
共享数据 |
新地址要求 |
转发 |
1 |
否 |
是 |
同一个应用下的地址 |
重定向 |
2 |
是 |
否 |
任意地址 |
7.Post和Get请求的区别
从传输的角度看,post和get都是不安全的,只有https是安全的。
get的最大长度限制是因为浏览器和web服务器限制了URL的长度。
POST 方法会产生两个 TCP 数据包?
答:HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送,不是必然行为。
8.拦截器与过滤器的区别
区别:
l Filter基于servlet,拦截器基于spring框架。拦截器可以访问spring里的事务、server对象等,过滤器不能
l 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
l 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
l 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
l 深度不同:拦截器能够深入到方法前后、异常抛出前后,弹性更好,filter只在serlvet前后起作用。
下面通过分析springmvc中拦截器、过滤器、service()方法(分发不同的servlet给不同的controller),dispatc()的执行顺序来加深理解,如下图:
总结:优先使用拦截器
9.https与http区别
总结:
名称 |
传输方式 |
ca证书? |
有无状态 |
http1.0 |
超文本明文传输 |
否 |
无 |
https |
Ssl加密传输 |
是 |
有 |
http2.0 |
超文本明文传输 |
否 |
有(新增了有状态的组件) |
http工作流程:
第一步:建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接
第二步:客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
第五步:服务器向客户端发送应答头信息
第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
为了提高安全性和效率HTTPS结合了对称和非对称两种加密方式。
https工作流程:
第一步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
第三步:客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
第五步:Web服务器利用自己的私钥解密出会话密钥。
第六步:Web服务器利用会话密钥加密与客户端之间的通信。
加密算法:
- 单向散列:对信息进行散列加密,得到固定长度的密文,包括:MD5/SHA;
- 对称加密:加密、解密使用同一个秘钥,包括:DES/RC
- 非对称加密:分为公钥、私钥,私钥保存在服务器端,公钥加密的只有私钥能解,反之也是,包括:RSA