JAVA WEB面試總結(jié)
本文目錄:
1. 什么是cookie
2. 什么是session
3.什么是Servlet,Servlet生命周期方法
4.JSP隱含對(duì)象
5.JSP的四個(gè)域?qū)ο蟮淖饔梅秶?/span>
6.轉(zhuǎn)發(fā)和重定向的區(qū)別
7.Post和Get請(qǐng)求的區(qū)別
8.攔截器與過濾器的區(qū)別
9.https與http區(qū)別
1. 什么是cookie
Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區(qū)發(fā)展的一種機(jī)制。目前Cookie已經(jīng)成為標(biāo)準(zhǔn),所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一種無狀態(tài)的協(xié)議,服務(wù)器單從網(wǎng)絡(luò)連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發(fā)一個(gè)通行證吧,每人一個(gè),無論誰訪問都必須攜帶自己通行證。這樣服務(wù)器就能從通行證上確認(rèn)客戶身份了。這就是Cookie的工作原理.
1.1 Cookie特點(diǎn):
a. 修改跟刪除只能覆蓋更新;
b. 不能跨域;
c. 保存在瀏覽器端;
d. 使用key-value保存。
1.2 工作流程:

1.3 cookie api

2. 什么是session
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session。客戶端瀏覽器再次訪問時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以.
如果說Cookie機(jī)制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那么Session機(jī)制就是通過檢查服務(wù)器上的“客戶明細(xì)表”來確認(rèn)客戶身份。
2.1 session 特點(diǎn)
- 各個(gè)線程的session隔離;
- 瀏覽器第一次訪問時(shí)創(chuàng)建保存在服務(wù)端;靜態(tài)地址訪問不會(huì)創(chuàng)建session;
- 同一個(gè)session多次訪問時(shí)記錄最后訪問時(shí)間。
2.2 session api
//獲取Session對(duì)象
request.getSession()
request.getSession(boolean create)
//獲取SessionId
getId()
//獲取當(dāng)前session對(duì)象的創(chuàng)建時(shí)間
getCreationTime()
//獲取最后一次訪問該session對(duì)象的時(shí)間
getLastAccessedTime()
//設(shè)置Session最大時(shí)效
setMaxInactiveInterval()
//獲取Session最大時(shí)效
getMaxInactiveInterval()
//判斷當(dāng)前Session對(duì)象是不是新建的
/**
如果客戶端請(qǐng)求消息中返回了一個(gè)與Servlet程序當(dāng)前獲得的HttpSession對(duì)象的會(huì)話標(biāo)識(shí)號(hào)相同的會(huì)話標(biāo)識(shí)號(hào),則認(rèn)為這個(gè)HttpSession對(duì)象不是新建的。
*/
isNew()
//銷毀當(dāng)前Session對(duì)象
invalidate()
//屬性相關(guān)
setAttribute()
3.什么是Servlet,Servlet生命周期方法
用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容, Servlet 可以用 javax.servlet 和 javax.servlet.http 包創(chuàng)建。
生命周期:
-
- Servlet 通過調(diào)用 init () 方法進(jìn)行初始化。只會(huì)執(zhí)行一次
- Servlet 調(diào)用 service() 方法來處理客戶端的請(qǐng)求。每次服務(wù)器接收到一個(gè) Servlet 請(qǐng)求時(shí),服務(wù)器會(huì)產(chǎn)生一個(gè)新的線程并調(diào)用服務(wù)。service() 方法檢查 HTTP 請(qǐng)求類型(GET、POST、PUT、DELETE 等),并在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet、doPost、doPut,doDelete 等方法
- Servlet 通過調(diào)用 destroy() 方法終止(結(jié)束)。
- 最后,Servlet 是由 JVM 的垃圾回收器進(jìn)行垃圾回收的。
4.JSP隱含對(duì)象

|
隱含對(duì)象 |
所屬的類 |
說明 |
|
request |
javax.servlet.http.HttpServletRequest |
客戶端的請(qǐng)求信息 |
|
response |
javax.servlet.http.HttpServletResponse |
網(wǎng)頁傳回客戶端的響應(yīng) |
|
session |
javax.servlet.http.HttpSession |
與請(qǐng)求有關(guān)的會(huì)話 |
|
out |
javax.servlet.jsp.JSPWriter |
向客戶端瀏覽器輸出數(shù)據(jù)的數(shù)據(jù)流 |
|
application |
javax.servlet.ServletContext |
提供全局的數(shù)據(jù),一旦創(chuàng)建就保持到服務(wù)器關(guān)閉 |
|
pageContext |
javax.servlet.jsp.PageContext |
JSP頁面的上下文,用于訪問頁面屬性 |
|
page |
java.lang.Object |
同Java中的this,即JSP頁面本身 |
|
config |
javax.servlet.servletConfig |
Servlet的配置對(duì)象 |
|
exception |
java.lang.Throwable |
針對(duì)錯(cuò)誤網(wǎng)頁,捕捉一般網(wǎng)頁中未捕捉的異常 |
|
對(duì)象名稱 |
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,能調(diào)用servlet里的方法 |
5.JSP的四個(gè)域?qū)ο蟮淖饔梅秶?/span>
|
域 |
作用范圍 |
|
PageContext域 |
當(dāng)前JSP頁面范圍 |
|
request域 |
一次請(qǐng)求 |
|
session域 |
一次會(huì)話 |
|
application域 |
整個(gè)web應(yīng)用 |
6.轉(zhuǎn)發(fā)和重定向的區(qū)別
|
名稱 |
請(qǐng)求次數(shù) |
url地址是否改變 |
共享數(shù)據(jù) |
新地址要求 |
|
轉(zhuǎn)發(fā) |
1 |
否 |
是 |
同一個(gè)應(yīng)用下的地址 |
|
重定向 |
2 |
是 |
否 |
任意地址 |
7.Post和Get請(qǐng)求的區(qū)別

從傳輸?shù)慕嵌瓤矗琾ost和get都是不安全的,只有https是安全的。
get的最大長度限制是因?yàn)闉g覽器和web服務(wù)器限制了URL的長度。
POST 方法會(huì)產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包?
答:HTTP 協(xié)議中沒有明確說明 POST 會(huì)產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包,而且實(shí)際測(cè)試(Chrome)發(fā)現(xiàn),header 和 body 不會(huì)分開發(fā)送,不是必然行為。
8.攔截器與過濾器的區(qū)別
區(qū)別:
l Filter基于servlet,攔截器基于spring框架。攔截器可以訪問spring里的事務(wù)、server對(duì)象等,過濾器不能
l 攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)。
l 攔截器只能對(duì)action請(qǐng)求起作用,而過濾器則可以對(duì)幾乎所有的請(qǐng)求起作用。
l 在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次。
l 深度不同:攔截器能夠深入到方法前后、異常拋出前后,彈性更好,filter只在serlvet前后起作用。
下面通過分析springmvc中攔截器、過濾器、service()方法(分發(fā)不同的servlet給不同的controller),dispatc()的執(zhí)行順序來加深理解,如下圖:

總結(jié):優(yōu)先使用攔截器
9.https與http區(qū)別
總結(jié):
|
名稱 |
傳輸方式 |
ca證書? |
有無狀態(tài) |
|
http1.0 |
超文本明文傳輸 |
否 |
無 |
|
https |
Ssl加密傳輸 |
是 |
有 |
|
http2.0 |
超文本明文傳輸 |
否 |
有(新增了有狀態(tài)的組件) |
http工作流程:
第一步:建立TCP/IP連接,客戶端與服務(wù)器通過Socket三次握手進(jìn)行連接
第二步:客戶端向服務(wù)端發(fā)起HTTP請(qǐng)求(例如:POST/login.html http/1.1)
第三步:客戶端發(fā)送請(qǐng)求頭信息,請(qǐng)求內(nèi)容,最后會(huì)發(fā)送一空白行,標(biāo)示客戶端請(qǐng)求完畢
第四步:服務(wù)器做出應(yīng)答,表示對(duì)于客戶端請(qǐng)求的應(yīng)答,例如:HTTP/1.1 200 OK
第五步:服務(wù)器向客戶端發(fā)送應(yīng)答頭信息
第六步:服務(wù)器向客戶端發(fā)送請(qǐng)求頭信息后,也會(huì)發(fā)送一空白行,標(biāo)示應(yīng)答頭信息發(fā)送完畢,接著就以Content-type要求的數(shù)據(jù)格式發(fā)送數(shù)據(jù)給客戶端
第七步:服務(wù)端關(guān)閉TCP連接,如果服務(wù)器或者客戶端增Connection:keep-alive就表示客戶端與服務(wù)器端繼續(xù)保存連接,在下次請(qǐng)求時(shí)可以繼續(xù)使用這次的連接
為了提高安全性和效率HTTPS結(jié)合了對(duì)稱和非對(duì)稱兩種加密方式。
https工作流程:
第一步:客戶使用https的URL訪問Web服務(wù)器,要求與Web服務(wù)器建立SSL連接。
第二步:Web服務(wù)器收到客戶端請(qǐng)求后,會(huì)將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端。
第三步:客戶端的瀏覽器與Web服務(wù)器開始協(xié)商SSL連接的安全等級(jí),也就是信息加密的等級(jí)。
第四步:客戶端的瀏覽器根據(jù)雙方同意的安全等級(jí),建立會(huì)話密鑰,然后利用網(wǎng)站的公鑰將會(huì)話密鑰加密,并傳送給網(wǎng)站。
第五步:Web服務(wù)器利用自己的私鑰解密出會(huì)話密鑰。
第六步:Web服務(wù)器利用會(huì)話密鑰加密與客戶端之間的通信。
加密算法:
- 單向散列:對(duì)信息進(jìn)行散列加密,得到固定長度的密文,包括:MD5/SHA;
- 對(duì)稱加密:加密、解密使用同一個(gè)秘鑰,包括:DES/RC
- 非對(duì)稱加密:分為公鑰、私鑰,私鑰保存在服務(wù)器端,公鑰加密的只有私鑰能解,反之也是,包括:RSA

浙公網(wǎng)安備 33010602011771號(hào)