Java之JavaWeb基礎(chǔ)(四 )

1.Servlet總結(jié):

在Java Web程序中速那,Servlet主要負(fù)責(zé)接收用戶請求HttpServletRequest,在doGet(),doPost()中做相應(yīng)的處理敢辩,并將回應(yīng)HttpServletResponse反饋給用戶。Servlet可以設(shè)置初始化參數(shù)逛万,供Servlet內(nèi)部使用泳猬。一個(gè)Servlet類只會(huì)有一個(gè)實(shí)例,在它初始化時(shí)調(diào)用init()方法宇植,銷毀時(shí)調(diào)用destroy()方法得封。Servlet需要在web.xml中配置(MyEclipse中創(chuàng)建Servlet會(huì)自動(dòng)配置),一個(gè)Servlet可以設(shè)置多個(gè)URL訪問指郁。Servlet不是線程安全忙上,因此要謹(jǐn)慎使用類變量。

2.闡述Servlet和CGI的區(qū)別?

CGI的不足之處:

1坡氯,需要為每個(gè)請求啟動(dòng)一個(gè)操作CGI程序系統(tǒng)進(jìn)程晨横。如果請求頻繁,這將會(huì)帶來很大的開銷箫柳。

2手形,需要為每個(gè)請求加載和運(yùn)行一個(gè)CGI程序,這將帶來很大的開銷

3悯恍,需要重復(fù)編寫處理網(wǎng)絡(luò)協(xié)議的代碼以及編碼库糠,這些工作都是非常耗時(shí)的。

Servlet的優(yōu)點(diǎn):

1涮毫,只需要啟動(dòng)一個(gè)操作系統(tǒng)進(jìn)程以及加載一個(gè)JVM瞬欧,大大降低了系統(tǒng)的開銷

2,如果多個(gè)請求需要做同樣處理的時(shí)候罢防,這時(shí)候只需要加載一個(gè)類艘虎,這也大大降低了開銷

3,所有動(dòng)態(tài)加載的類可以實(shí)現(xiàn)對網(wǎng)絡(luò)協(xié)議以及請求解碼的共享咒吐,大大降低了工作量野建。

4属划,Servlet能直接和Web服務(wù)器交互,而普通的CGI程序不能候生。Servlet還能在各個(gè)程序之間共享數(shù)據(jù)同眯,使數(shù)據(jù)庫連接池之類的功能很容易實(shí)現(xiàn)。

補(bǔ)充:Sun Microsystems公司在1996年發(fā)布Servlet技術(shù)就是為了和CGI進(jìn)行競爭唯鸭,Servlet是一個(gè)特殊的Java程序须蜗,一個(gè)基于Java的Web應(yīng)用通常包含一個(gè)或多個(gè)Servlet類。Servlet不能夠自行創(chuàng)建并執(zhí)行目溉,它是在Servlet容器中運(yùn)行的明肮,容器將用戶的請求傳遞給Servlet程序,并將Servlet的響應(yīng)回傳給用戶停做。通常一個(gè)Servlet會(huì)關(guān)聯(lián)一個(gè)或多個(gè)JSP頁面晤愧。以前CGI經(jīng)常因?yàn)樾阅荛_銷上的問題被詬病大莫,然而Fast CGI早就已經(jīng)解決了CGI效率上的問題蛉腌,所以面試的時(shí)候大可不必信口開河的詬病CGI,事實(shí)上有很多你熟悉的網(wǎng)站都使用了CGI技術(shù)只厘。

3.Servlet接口中有哪些方法及Servlet生命周期探秘

Servlet接口定義了5個(gè)方法烙丛,其中前三個(gè)方法與Servlet生命周期相關(guān)

void init(ServletConfig config) throws ServletException

void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException

void destory()

java.lang.String getServletInfo()

ServletConfig getServletConfig()

生命周期:Web容器加載Servlet并將其實(shí)例化后,Servlet生命周期開始羔味,容器運(yùn)行其init()方法進(jìn)行Servlet的初始化河咽;請求到達(dá)時(shí)調(diào)用Servlet的service()方法,service()方法會(huì)根據(jù)需要調(diào)用與請求對應(yīng)的doGet或doPost等方法赋元;當(dāng)服務(wù)器關(guān)閉或項(xiàng)目被卸載時(shí)服務(wù)器會(huì)將Servlet實(shí)例銷毀忘蟹,此時(shí)會(huì)調(diào)用Servlet的destroy()方法init方法和destory方法只會(huì)執(zhí)行一次搁凸,service方法客戶端每次請求Servlet都會(huì)執(zhí)行媚值。Servlet中有時(shí)會(huì)用到一些需要初始化與銷毀的資源,因此可以把初始化資源的代碼放入init方法中护糖,銷毀資源的代碼放入destroy方法中褥芒,這樣就不需要每次處理客戶端的請求都要初始化與銷毀資源。

4.get和post請求的區(qū)別嫡良?

①get請求用來從服務(wù)器獲得資源锰扶,而post是用來向服務(wù)器提交數(shù)據(jù);

②get將表單中數(shù)據(jù)按照name=value的形式寝受,添加到action 所指向的URL 后面坷牛,并且兩者使用"?"連接,而各個(gè)變量之間使用"&"連接很澄;post是將表單中的數(shù)據(jù)放在HTTP協(xié)議的請求頭或消息體中京闰,傳遞到action所指向URL锨亏;

③get傳輸?shù)臄?shù)據(jù)要受到URL長度限制(1024字節(jié)即256個(gè)字符);而post可以傳輸大量的數(shù)據(jù)忙干,上傳文件通常要使用post方式器予;

④使用get時(shí)參數(shù)會(huì)顯示地址欄上,如果這些數(shù)據(jù)不是敏感數(shù)據(jù)捐迫,那么可以使用get乾翔;對于敏感數(shù)據(jù)還是應(yīng)用使用post;

⑤get使用MIME類型application/x-www-form-urlencoded的URL編碼(也叫百分號編碼)文本的格式傳遞參數(shù)施戴,保證被傳送的參數(shù)由遵循規(guī)范的文本組成反浓,例如一個(gè)空格的編碼是"%20"。

補(bǔ)充:GET方式提交表單的典型應(yīng)用是搜索引擎赞哗。GET方式就是被設(shè)計(jì)為查詢用的雷则。

Form標(biāo)簽里的method的屬性為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()肪笋。

5.轉(zhuǎn)發(fā)(Forward)和重定向(Redirect)的區(qū)別月劈?

轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為藤乙。

轉(zhuǎn)發(fā)(Forword)通過RequestDispatcher對象的forward(HttpServletRequest request,HttpServletResponse response)方法實(shí)現(xiàn)的猜揪。RequestDispatcher可以通過HttpServletRequest 的getRequestDispatcher()方法獲得。例如下面的代碼就是跳轉(zhuǎn)到login_success.jsp頁面坛梁。

request.getRequestDispatcher("login_success.jsp").forward(request, response);

重定向(Redirect)是利用服務(wù)器返回的狀態(tài)嗎來實(shí)現(xiàn)的而姐。客戶端瀏覽器請求服務(wù)器的時(shí)候划咐,服務(wù)器會(huì)返回一個(gè)狀態(tài)碼拴念。服務(wù)器通過HttpServletRequestResponse的setStatus(int status)方法設(shè)置狀態(tài)碼。如果服務(wù)器返回301或者302褐缠,則瀏覽器會(huì)到新的網(wǎng)址重新請求該資源政鼠。

從地址欄顯示來說

forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.

redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請求那個(gè)地址.所以地址欄顯示的是新的URL.

從數(shù)據(jù)共享來說

forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).

redirect:不能共享數(shù)據(jù).

從運(yùn)用地方來說

forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.

redirect:一般用于用戶注銷登陸時(shí)返回主頁面和跳轉(zhuǎn)其它的網(wǎng)站

效率來說

forward:高.

redirect:低.

6.自動(dòng)刷新(Refresh)

自動(dòng)刷新不僅可以實(shí)現(xiàn)一段時(shí)間之后自動(dòng)跳轉(zhuǎn)到另一個(gè)頁面,還可以實(shí)現(xiàn)一段時(shí)間之后自動(dòng)刷新本頁面送丰。Servlet中通過HttpServletResponse對象設(shè)置Header屬性實(shí)現(xiàn)自動(dòng)刷新例如:

Response.setHeader("Refresh","1000;URL=http://localhost:8080/servlet/example.htm");

其中1000為時(shí)間缔俄,單位為毫秒。URL指定就是要跳轉(zhuǎn)的頁面(如果設(shè)置自己的路徑器躏,就會(huì)實(shí)現(xiàn)沒過一秒自動(dòng)刷新本頁面一次)

7.Servlet與線程安全

Servlet不是線程安全的俐载,多線程并發(fā)的讀寫會(huì)導(dǎo)致數(shù)據(jù)不同步的問題。解決的辦法是盡量不要定義name屬性登失,而是要把name變量分別定義在doGet()和doPost()方法內(nèi)遏佣。雖然使用synchronized(name){}語句塊可以解決問題,但是會(huì)造成線程的等待揽浙,不是很科學(xué)的辦法状婶。注意:多線程的并發(fā)的讀寫Servlet類屬性會(huì)導(dǎo)致數(shù)據(jù)不同步意敛。但是如果只是并發(fā)地讀取屬性而不寫入,則不存在數(shù)據(jù)不同步的問題膛虫。因此Servlet里的只讀屬性最好定義為final類型的草姻。

8.JSP和Servlet是什么關(guān)系?

其實(shí)這個(gè)問題在上面已經(jīng)闡述過了稍刀,Servlet是一個(gè)特殊的Java程序撩独,它運(yùn)行于服務(wù)器的JVM中,能夠依靠服務(wù)器的支持向?yàn)g覽器提供顯示內(nèi)容账月。JSP本質(zhì)上是Servlet的一種簡易形式综膀,JSP會(huì)被服務(wù)器處理成一個(gè)類似于Servlet的Java程序,可以簡化頁面內(nèi)容的生成局齿。

Servlet和JSP最主要的不同點(diǎn)在于剧劝,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML分離開來抓歼。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件讥此。

有人說,Servlet就是在Java中寫HTML锭部,而JSP就是在HTML中寫Java代碼暂论,當(dāng)然這個(gè)說法是很片面且不夠準(zhǔn)確的。JSP側(cè)重于視圖拌禾,Servlet更側(cè)重于控制邏輯,在MVC架構(gòu)模式中展哭,JSP適合充當(dāng)視圖(view)而Servlet適合充當(dāng)控制器(controller)湃窍。

9.JSP工作原理:

JSP是一種Servlet,但是與HttpServlet的工作方式不太一樣匪傍。HttpServlet是先由源代碼編譯為class文件后部署到服務(wù)器下您市,為先編譯后部署。而JSP則是先部署后編譯役衡。JSP會(huì)在客戶端第一次請求JSP文件時(shí)被編譯為HttpJspPage類(接口Servlet的一個(gè)子類)茵休。該類會(huì)被服務(wù)器臨時(shí)存放在服務(wù)器工作目錄里面。下面通過實(shí)例給大家介紹手蝎。

工程JspLoginDemo下有一個(gè)名為login.jsp的Jsp文件榕莺,把工程第一次部署到服務(wù)器上后訪問這個(gè)Jsp文件,我們發(fā)現(xiàn)這個(gè)目錄下多了下圖這兩個(gè)東東棵介。

.class文件便是JSP對應(yīng)的Servlet钉鸯。編譯完畢后再運(yùn)行class文件來響應(yīng)客戶端請求。以后客戶端訪問login.jsp的時(shí)候邮辽,Tomcat將不再重新編譯JSP文件唠雕,而是直接調(diào)用class文件來響應(yīng)客戶端請求贸营。

10.JSP有哪些內(nèi)置對象?作用分別是什么岩睁?

JSP有9個(gè)內(nèi)置對象:

request:封裝客戶端的請求钞脂,其中包含來自GET或POST請求的參數(shù);

response:封裝服務(wù)器對客戶端的響應(yīng)捕儒;

pageContext:通過該對象可以獲取其他對象芳肌;

session:封裝用戶會(huì)話的對象;

application:封裝服務(wù)器運(yùn)行環(huán)境的對象肋层;

out:輸出服務(wù)器響應(yīng)的輸出流對象亿笤;

config:Web應(yīng)用的配置對象;

page:JSP頁面本身(相當(dāng)于Java程序中的this)栋猖;

exception:封裝頁面拋出異常的對象净薛。

11.Request對象的主要方法有哪些?

setAttribute(String name,Object):設(shè)置名字為name的request 的參數(shù)值

getAttribute(String name):返回由name指定的屬性值

getAttributeNames():返回request 對象所有屬性的名字集合蒲拉,結(jié)果是一個(gè)枚舉的實(shí)例

getCookies():返回客戶端的所有 Cookie 對象肃拜,結(jié)果是一個(gè)Cookie 數(shù)組

getCharacterEncoding() :返回請求中的字符編碼方式 = getContentLength() :返回請求的 Body的長度

getHeader(String name) :獲得HTTP協(xié)議定義的文件頭信息

getHeaders(String name) :返回指定名字的request Header 的所有值,結(jié)果是一個(gè)枚舉的實(shí)例

getHeaderNames() :返回所以request Header 的名字雌团,結(jié)果是一個(gè)枚舉的實(shí)例

getInputStream() :返回請求的輸入流燃领,用于獲得請求中的數(shù)據(jù)

getMethod() :獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法

getParameter(String name) :獲得客戶端傳送給服務(wù)器端的有 name指定的參數(shù)值

getParameterNames() :獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例

getParameterValues(String name):獲得有name指定的參數(shù)的所有值

getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱

getQueryString() :獲得查詢字符串

getRequestURI() :獲取發(fā)出請求字符串的客戶端地址

getRemoteAddr():獲取客戶端的 IP 地址

getRemoteHost() :獲取客戶端的名字

getSession([Boolean create]) :返回和請求相關(guān) Session

getServerName() :獲取服務(wù)器的名字

getServletPath():獲取客戶端所請求的腳本文件的路徑

getServerPort():獲取服務(wù)器的端口號

removeAttribute(String name):刪除請求中的一個(gè)屬性

12.request.getAttribute()和 request.getParameter()有何區(qū)別?

從獲取方向來看:

getParameter()是獲取 POST/GET 傳遞的參數(shù)值锦援;

getAttribute()是獲取對象容器中的數(shù)據(jù)值猛蔽;

從用途來看:

getParameter用于客戶端重定向時(shí),即點(diǎn)擊了鏈接或提交按扭時(shí)傳值用灵寺,即用于在用表單或url重定向傳值時(shí)接收數(shù)據(jù)用曼库。

getAttribute用于服務(wù)器端重定向時(shí),即在 sevlet 中使用了 forward 函數(shù),或 struts 中使用了

mapping.findForward略板。 getAttribute 只能收到程序用 setAttribute 傳過來的值毁枯。

另外,可以用 setAttribute,getAttribute 發(fā)送接收對象.而 getParameter 顯然只能傳字符串叮称。

setAttribute 是應(yīng)用服務(wù)器把這個(gè)對象放在該頁面所對應(yīng)的一塊內(nèi)存中去种玛,當(dāng)你的頁面服務(wù)器重定向到另一個(gè)頁面時(shí),應(yīng)用服務(wù)器會(huì)把這塊內(nèi)存拷貝另一個(gè)頁面所對應(yīng)的內(nèi)存中瓤檐。這樣getAttribute就能取得你所設(shè)下的值赂韵,當(dāng)然這種方法可以傳對象。session也一樣距帅,只是對象在內(nèi)存中的生命周期不一樣而已右锨。getParameter只是應(yīng)用服務(wù)器在分析你送上來的 request頁面的文本時(shí),取得你設(shè)在表單或 url 重定向時(shí)的值碌秸。

總結(jié):

getParameter 返回的是String,用于讀取提交的表單中的值;(獲取之后會(huì)根據(jù)實(shí)際需要轉(zhuǎn)換為自己需要的相應(yīng)類型绍移,比如整型悄窃,日期類型啊等等)

getAttribute 返回的是Object,需進(jìn)行轉(zhuǎn)換,可用setAttribute 設(shè)置成任意對象蹂窖,使用很靈活轧抗,可隨時(shí)用

13.include指令include的行為的區(qū)別

include指令:JSP可以通過include指令來包含其他文件。被包含的文件可以是JSP文件瞬测、HTML文件或文本文件横媚。包含的文件就好像是該JSP文件的一部分,會(huì)被同時(shí)編譯執(zhí)行月趟。 語法格式如下:<%@ include file="文件相對 url 地址" %>

include動(dòng)作:jsp:include動(dòng)作元素用來包含靜態(tài)和動(dòng)態(tài)的文件灯蝴。該動(dòng)作把指定文件插入正在生成的頁面。語法格式如下:

14.講解JSP中的四種作用域

JSP中的四種作用域包括page孝宗、request穷躁、session和application,具體來說:

page代表與一個(gè)頁面相關(guān)的對象和屬性因妇。

request代表與Web客戶機(jī)發(fā)出的一個(gè)請求相關(guān)的對象和屬性问潭。一個(gè)請求可能跨越多個(gè)頁面,涉及多個(gè)Web組件婚被;需要在頁面顯示的臨時(shí)數(shù)據(jù)可以置于此作用域狡忙。

session代表與某個(gè)用戶與服務(wù)器建立的一次會(huì)話相關(guān)的對象和屬性。跟某個(gè)用戶相關(guān)的數(shù)據(jù)應(yīng)該放在用戶自己的session中址芯。

application代表與整個(gè)Web應(yīng)用程序相關(guān)的對象和屬性灾茁,它實(shí)質(zhì)上是跨越整個(gè)Web應(yīng)用程序,包括多個(gè)頁面是复、請求和會(huì)話的一個(gè)全局作用域删顶。

15.如何實(shí)現(xiàn)JSP或Servlet的單線程模式?

對于JSP頁面淑廊,可以通過page指令進(jìn)行設(shè)置。

<%@page isThreadSafe=”false”%>

對于Servlet特咆,可以讓自定義的Servlet實(shí)現(xiàn)SingleThreadModel標(biāo)識(shí)接口季惩。

說明:如果將JSP或Servlet設(shè)置成單線程工作模式,會(huì)導(dǎo)致每個(gè)請求創(chuàng)建一個(gè)Servlet實(shí)例腻格,這種實(shí)踐將導(dǎo)致嚴(yán)重的性能問題(服務(wù)器的內(nèi)存壓力很大画拾,還會(huì)導(dǎo)致頻繁的垃圾回收),所以通常情況下并不會(huì)這么做菜职。

16.實(shí)現(xiàn)會(huì)話跟蹤的技術(shù)有哪些青抛?

1.使用Cookie

向客戶端發(fā)送Cookie

從客戶端讀取Cookie

優(yōu)點(diǎn):數(shù)據(jù)可以持久保存,不需要服務(wù)器資源酬核,簡單蜜另,基于文本的Key-Value

缺點(diǎn):大小受到限制适室,用戶可以禁用Cookie功能,由于保存在本地举瑰,有一定的安全風(fēng)險(xiǎn)捣辆。

2.URL 重寫

在URL中添加用戶會(huì)話的信息作為請求的參數(shù),或者將唯一的會(huì)話ID添加到URL結(jié)尾以標(biāo)識(shí)一個(gè)會(huì)話此迅。

優(yōu)點(diǎn):在Cookie被禁用的時(shí)候依然可以使用

缺點(diǎn):必須對網(wǎng)站的URL進(jìn)行編碼汽畴,所有頁面必須動(dòng)態(tài)生成,不能用預(yù)先記錄下來的URL進(jìn)行訪問耸序。

3.隱藏的表單域

優(yōu)點(diǎn):?Cookie被禁時(shí)可以使用

缺點(diǎn):?所有頁面必須是表單提交之后的結(jié)果忍些。

4.HttpSession

在所有會(huì)話跟蹤技術(shù)中,HttpSession對象是最強(qiáng)大也是功能最多的坎怪。當(dāng)一個(gè)用戶第一次訪問某個(gè)網(wǎng)站時(shí)會(huì)自動(dòng)創(chuàng)建 HttpSession罢坝,每個(gè)用戶可以訪問他自己的HttpSession。

1.可以通過HttpServletRequest對象的getSession方 法獲得HttpSession芋忿,

2.通過HttpSession的setAttribute方法可以將一個(gè)值放在HttpSession中炸客,

3.通過調(diào)用 HttpSession對象的getAttribute方法,同時(shí)傳入屬性名就可以獲取保存在HttpSession中的對象戈钢。

與上面三種方式不同的 是痹仙,HttpSession放在服務(wù)器的內(nèi)存中,因此不要將過大的對象放在里面殉了,即使目前的Servlet容器可以在內(nèi)存將滿時(shí)將HttpSession 中的對象移到其他存儲(chǔ)設(shè)備中开仰,但是這樣勢必影響性能。

添加到HttpSession中的值可以是任意Java對象薪铜,這個(gè)對象最好實(shí)現(xiàn)了 Serializable接口众弓,這樣Servlet容器在必要的時(shí)候可以將其序列化到文件中,否則在序列化時(shí)就會(huì)出現(xiàn)異常隔箍。

17.Cookie和Session的的區(qū)別谓娃?

由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時(shí)蜒滩,就需要用某種機(jī)制來識(shí)具體的用戶滨达,這個(gè)機(jī)制就是Session.典型的場景比如購物車,當(dāng)你點(diǎn)擊下單按鈕時(shí)俯艰,由于HTTP協(xié)議無狀態(tài)捡遍,所以并不知道是哪個(gè)用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session竹握,用用于標(biāo)識(shí)這個(gè)用戶画株,并且跟蹤用戶,這樣才知道購物車里面有幾本書。這個(gè)Session是保存在服務(wù)端的谓传,有一個(gè)唯一標(biāo)識(shí)蜈项。在服務(wù)端保存Session的方法很多,內(nèi)存良拼、數(shù)據(jù)庫战得、文件都有。集群的時(shí)候也要考慮Session的轉(zhuǎn)移庸推,在大型的網(wǎng)站常侦,一般會(huì)有專門的Session服務(wù)器集群,用來保存用戶會(huì)話贬媒,這個(gè)時(shí)候 Session 信息都是放在內(nèi)存的聋亡,使用一些緩存服務(wù)比如Memcached之類的來放 Session。

思考一下服務(wù)端如何識(shí)別特定的客戶际乘?這個(gè)時(shí)候Cookie就登場了坡倔。每次HTTP請求的時(shí)候,客戶端都會(huì)發(fā)送相應(yīng)的Cookie信息到服務(wù)端脖含。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來實(shí)現(xiàn)Session跟蹤的罪塔,第一次創(chuàng)建Session的時(shí)候,服務(wù)端會(huì)在HTTP協(xié)議中告訴客戶端养葵,需要在 Cookie 里面記錄一個(gè)Session ID征堪,以后每次請求把這個(gè)會(huì)話ID發(fā)送到服務(wù)器,我就知道你是誰了关拒。有人問佃蚜,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下着绊,會(huì)使用一種叫做URL重寫的技術(shù)來進(jìn)行會(huì)話跟蹤谐算,即每次HTTP交互,URL后面都會(huì)被附加上一個(gè)諸如 sid=xxxxx 這樣的參數(shù)归露,服務(wù)端據(jù)此來識(shí)別用戶洲脂。

Cookie其實(shí)還可以用在一些方便用戶的場景下,設(shè)想你某次登陸過一個(gè)網(wǎng)站剧包,下次登錄的時(shí)候不想再次輸入賬號了腮考,怎么辦?這個(gè)信息可以寫到Cookie里面玄捕,訪問網(wǎng)站的時(shí)候,網(wǎng)站頁面的腳本可以讀取這個(gè)信息棚放,就自動(dòng)幫你把用戶名給填了枚粘,能夠方便一下用戶。這也是Cookie名稱的由來杈湾,給用戶的一點(diǎn)甜頭输玷。

所以,總結(jié)一下:Session是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu)孽椰,用來跟蹤用戶的狀態(tài)攀圈,這個(gè)數(shù)據(jù)可以保存在集群暴凑、數(shù)據(jù)庫、文件中赘来;Cookie是客戶端保存用戶信息的一種機(jī)制现喳,用來記錄用戶的一些信息,也是實(shí)現(xiàn)Session的一種方式犬辰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗦篱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幌缝,更是在濱河造成了極大的恐慌灸促,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涵卵,死亡現(xiàn)場離奇詭異浴栽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轿偎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門典鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贴硫,你說我怎么就攤上這事椿每。” “怎么了英遭?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵间护,是天一觀的道長。 經(jīng)常有香客問我挖诸,道長汁尺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任多律,我火速辦了婚禮痴突,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狼荞。我一直安慰自己辽装,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布相味。 她就那樣靜靜地躺著拾积,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拓巧,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天斯碌,我揣著相機(jī)與錄音,去河邊找鬼肛度。 笑死傻唾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的承耿。 我是一名探鬼主播冠骄,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘩绒!你這毒婦竟也來了猴抹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤锁荔,失蹤者是張志新(化名)和其女友劉穎蟀给,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳堕,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跋理,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恬总。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片前普。...
    茶點(diǎn)故事閱讀 40,989評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壹堰,靈堂內(nèi)的尸體忽然破棺而出拭卿,到底是詐尸還是另有隱情,我是刑警寧澤贱纠,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布峻厚,位于F島的核電站,受9級特大地震影響谆焊,放射性物質(zhì)發(fā)生泄漏惠桃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一辖试、第九天 我趴在偏房一處隱蔽的房頂上張望辜王。 院中可真熱鬧,春花似錦罐孝、人聲如沸呐馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摹恰。三九已至辫继,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俗慈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工遣耍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闺阱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓舵变,卻偏偏與公主長得像酣溃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子纪隙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在赊豌,面了一些公司,掛了不少绵咱,但最終還是拿到小米碘饼、百度、阿里悲伶、京東艾恼、新浪、CVTE麸锉、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,281評論 11 349
  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,960評論 7 186
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題钠绍。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,412評論 0 10
  • nginx在不同php框架的配置有些許差別花沉,記錄我用到的幾個(gè) 注:在ubnutu16.04 php7.0的環(huán)境下 ...
    沐青之楓閱讀 434評論 0 0
  • 剛呼嘯而過的這個(gè)春節(jié)柳爽,親戚家的表弟過的心煩意亂。 他孤身離開妻兒在一座城市里工作了一年碱屁,“老婆孩子熱炕頭”是他心目...
    月亮小姐6閱讀 161評論 2 3