web基礎(chǔ)(第十三天)

Sevlet基礎(chǔ)

Servlet的方法

  • 構(gòu)造方法: 創(chuàng)建servlet對(duì)象的時(shí)候調(diào)用福也。默認(rèn)情況下,第一次訪問servlet的時(shí)候創(chuàng)建servlet對(duì)象只調(diào)用1次沐鼠。證明servlet對(duì)象在tomcat是單實(shí)例的绳军。
  • init方法: 創(chuàng)建完servlet對(duì)象的時(shí)候調(diào)用五督。只調(diào)用1次彰导。
  • service方法: 每次發(fā)出請(qǐng)求時(shí)調(diào)用蛔翅。調(diào)用n次。
  • destroy方法: 銷毀servlet對(duì)象的時(shí)候調(diào)用位谋。停止服務(wù)器或者重新部署web應(yīng)用時(shí)銷毀servlet對(duì)象山析。只調(diào)用1次。

Servlet的生命周期

  1. 通過映射找到到servlet-class的內(nèi)容倔幼,字符串:com.nightliar.a_servlet.FirstServlet盖腿;
  2. 通過反射構(gòu)造FirstServlet對(duì)象
    • 得到字節(jié)碼對(duì)象:Class clazz = class.forName("com.nightliar.a_servlet.FirstServlet");
    • 調(diào)用無(wú)參數(shù)的構(gòu)造方法來(lái)構(gòu)造對(duì)象:Object obj = clazz.newInstance();
  3. 創(chuàng)建ServletConfig對(duì)象,通過反射調(diào)用init方法
    • 得到方法對(duì)象:Method m = clazz.getDeclareMethod("init",ServletConfig.class);
    • 調(diào)用方法:m.invoke(obj,config);
  4. 創(chuàng)建request损同,response對(duì)象,通過反射調(diào)用service方法
    • 得到方法對(duì)象:Methodm m
      = clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
    • 調(diào)用方法:m.invoke(obj,request,response);
  5. 當(dāng)tomcat服務(wù)器停止或web應(yīng)用重新部署鸟款,通過反射調(diào)用destroy方法
    • 得到方法對(duì)象:Method m = clazz.getDeclareMethod("destroy",null);
    • 調(diào)用方法:m.invoke(obj,null);

總結(jié)

servlet對(duì)象在tomcat服務(wù)器是單實(shí)例多線程的膏燃,所以當(dāng)多個(gè)servlet的線程同時(shí)訪問了servlet的共享數(shù)據(jù),如成員變量何什,可能會(huì)引發(fā)線程安全問題组哩。

Cookie基礎(chǔ)

Cookie是由服務(wù)器端生成,發(fā)送給User-Agent处渣,瀏覽器會(huì)將Cookie的key/value保存到某個(gè)目錄下的文本文件內(nèi)伶贰,下次請(qǐng)求同一網(wǎng)站時(shí)就發(fā)送該Cookie給服務(wù)器。

Cookie常用api

//1.構(gòu)造Cookie對(duì)象
Cookie(java.lang.String name, java.lang.String value)
//2.設(shè)置cookie
void setPath(java.lang.String uri);          //設(shè)置cookie的有效訪問路徑
void setMaxAge(int expiry) :                //設(shè)置cookie的有效時(shí)間
void setValue(java.lang.String newValue);    //設(shè)置cookie的值
//3.發(fā)送cookie到瀏覽器端保存
void response.addCookie(Cookie cookie);      //發(fā)送cookie
//4.服務(wù)器接收cookie
Cookie[] request.getCookies();               //接收cookie

Cookie工作原理

  1. 服務(wù)器創(chuàng)建cookie對(duì)象罐栈,把會(huì)話數(shù)據(jù)存儲(chǔ)到cookie對(duì)象中黍衙,調(diào)用new Cookie("name","value")方法;
  2. 服務(wù)器發(fā)送cookie信息到瀏覽器荠诬,調(diào)用response.addCookie(cookie)方法琅翻,例如:set-cookie: name = zhangsan (隱藏發(fā)送了一個(gè)set-cookie名稱的響應(yīng)頭);
  3. 瀏覽器得到服務(wù)器發(fā)送的cookie柑贞,然后保存在瀏覽器端方椎;
  4. 瀏覽器在下次訪問服務(wù)器時(shí),會(huì)帶著cookie信息钧嘶,例如: cookie: name = zhangsan (隱藏帶著一個(gè)叫cookie名稱的請(qǐng)求頭)棠众;
  5. 服務(wù)器接收到瀏覽器帶來(lái)的cookie信息,調(diào)用request.getCookies()有决。

Cookie的細(xì)節(jié)

  1. void setPath(java.lang.String uri):設(shè)置cookie的有效訪問路徑闸拿。有效路徑指的是cookie的有效路徑保存在哪里轿亮,那么瀏覽器在有效路徑下訪問服務(wù)器時(shí)就會(huì)帶著cookie信息,否則不帶cookie信息胸墙。
  2. void setMaxAge(int expiry):設(shè)置cookie的有效時(shí)間:
    • 正整數(shù):表示cookie數(shù)據(jù)保存瀏覽器的緩存目錄(硬盤中)我注,數(shù)值表示保存的時(shí)間;
    • 負(fù)整數(shù):表示cookie數(shù)據(jù)保存瀏覽器的內(nèi)存中迟隅。瀏覽器關(guān)閉cookie就丟失了但骨;
    • 零:表示刪除同名的cookie數(shù)據(jù)。
  3. Cookie數(shù)據(jù)類型只能保存非中文字符串類型的智袭”疾可以保存多個(gè)cookie,但是瀏覽器一般只允許存放300個(gè)Cookie吼野,每個(gè)站點(diǎn)最多存放20個(gè)Cookie校哎,每個(gè)Cookie的大小限制為4KB。

Session基礎(chǔ)

Session是另一種記錄客戶狀態(tài)的機(jī)制瞳步,不同的是Cookie保存在客戶端瀏覽器中闷哆,而Session保存在服務(wù)器上〉テ穑客戶端瀏覽器訪問服務(wù)器的時(shí)候抱怔,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session嘀倒∏簦客戶端瀏覽器再次訪問時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以了。每個(gè)用戶訪問服務(wù)器都會(huì)建立一個(gè)session测蘑,那服務(wù)器是怎么標(biāo)識(shí)用戶的唯一身份呢灌危?事實(shí)上,用戶與服務(wù)器建立連接的同時(shí)碳胳,服務(wù)器會(huì)自動(dòng)為其分配一SessionId勇蝙。

Session常用api

//1.創(chuàng)建或得到session對(duì)象
HttpSession getSession()  
HttpSession getSession(boolean create)  
//2.設(shè)置session對(duì)象
void setMaxInactiveInterval(int interval);    //設(shè)置session的有效時(shí)間
void invalidate();                 //銷毀session對(duì)象
java.lang.String getId();          //得到sessionid
//3.保存會(huì)話數(shù)據(jù)到session對(duì)象
void setAttribute(java.lang.String name, java.lang.Object value);  //保存數(shù)據(jù)
Object getAttribute(java.lang.String name);    //獲取數(shù)據(jù)
void removeAttribute(java.lang.String name);   //清除數(shù)據(jù)
//4.設(shè)置session的有效時(shí)間
void setMaxInactiveInterval(int interval);

Session工作原理

  1. 第一次訪問創(chuàng)建session對(duì)象固逗,給session對(duì)象分配一個(gè)唯一的ID浅蚪,叫JSESSIONID;
    new HttpSession();
    
  2. 把JSESSIONID作為Cookie的值發(fā)送給瀏覽器保存烫罩;
    Cookie cookie = new Cookie("JSESSIONID", sessionID);
    response.addCookie(cookie);
    
  3. 第二次訪問的時(shí)候惜傲,瀏覽器帶著JSESSIONID的cookie訪問服務(wù)器;
  4. 服務(wù)器得到JSESSIONID贝攒,在服務(wù)器的內(nèi)存中搜索是否存放對(duì)應(yīng)編號(hào)的session對(duì)象盗誊;
  5. 如果找到對(duì)應(yīng)編號(hào)的session對(duì)象,直接返回該對(duì)象;
  6. 如果找不到對(duì)應(yīng)編號(hào)的session對(duì)象哈踱,創(chuàng)建新的session對(duì)象荒适,繼續(xù)走1的流程。

Session的創(chuàng)建

當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí)开镣,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含sessionId刀诬,如果已包含則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照sessionId把這個(gè)session檢索出來(lái)使用(檢索不到邪财,會(huì)新建一個(gè))陕壹,如果客戶端請(qǐng)求不包含sessionId,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的sessionId树埠,sessionId的值是一個(gè)既不會(huì)重復(fù)糠馆,又不容易被找到規(guī)律以仿造的字符串,這個(gè)sessionId將被在本次響應(yīng)中返回給客戶端保存怎憋。

Cookie被禁用

如果客戶端禁用了cookie又碌,通常有兩種方法實(shí)現(xiàn)session而不依賴cookie。

  1. URL重寫绊袋,就是把sessionId直接附加在URL路徑的后面毕匀。

  2. 表單隱藏字段。就是服務(wù)器會(huì)自動(dòng)修改表單愤炸,添加一個(gè)隱藏字段期揪,以便在表單提交時(shí)能夠把session id傳遞回服務(wù)器。比如:

    <form name="testform" action="/xxx"> 
    <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
    <input type="text"> 
    </form> 
    

Session共享

對(duì)于多網(wǎng)站(同一父域不同子域)單服務(wù)器规个,我們需要解決的就是來(lái)自不同網(wǎng)站之間SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com)姓建,而SessionId又分別儲(chǔ)存在各自的cookie中诞仓,因此服務(wù)器會(huì)認(rèn)為對(duì)于兩個(gè)子站的訪問,是來(lái)自不同的會(huì)話。解決的方法是通過修改cookies的域名為父域名達(dá)到cookie共享的目的,從而實(shí)現(xiàn)SessionId的共享速兔。帶來(lái)的弊端就是墅拭,子站間的cookie信息也同時(shí)被共享了。

總結(jié)

  1. cookie數(shù)據(jù)存放在客戶的瀏覽器上涣狗,session數(shù)據(jù)放在服務(wù)器上谍婉。
  2. cookie不是很安全,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙镀钓,考慮到安全應(yīng)當(dāng)使用session穗熬。
  3. session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多丁溅,會(huì)比較占用你服務(wù)器的性能唤蔗,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie。
  4. 單個(gè)cookie保存的數(shù)據(jù)不能超過4K妓柜,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie箱季。
  5. 可以考慮將登陸信息等重要信息存放為session,其他信息如果需要保留棍掐,可以放在cookie中藏雏。

Http協(xié)議基礎(chǔ)

什么是http協(xié)議

http協(xié)議:對(duì)瀏覽器客戶端和服務(wù)器端之間數(shù)據(jù)傳輸?shù)母袷揭?guī)范

Http請(qǐng)求

GET /day09/hello HTTP/1.1               --請(qǐng)求行
Host: localhost:8080                    --請(qǐng)求頭(多個(gè)key-value對(duì)象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
                                          --一個(gè)空行
name=zhangsan&password=123456             --(可選)請(qǐng)求體

請(qǐng)求行

GET /days/hello HTTP/1.1
  1. 請(qǐng)求方法類型GET作煌,常見的請(qǐng)求方式:GET 掘殴、 POST、 HEAD最疆、 TRACE杯巨、 PUT、 CONNECT 努酸、DELETE服爷;

  2. /days/hello為請(qǐng)求URL,如果是GET類型并有請(qǐng)求參數(shù)获诈,由仍源?和$拼接在URL上;

    URL: 統(tǒng)一資源定位符舔涎。http://localhost:8080/days/testImg.html笼踩。只能定位互聯(lián)網(wǎng)資源。是URI 的子集亡嫌。
    URI:統(tǒng)一資源標(biāo)記符嚎于。/days/hello。用于標(biāo)記任何資源挟冠∮诠海可以是本地文件系統(tǒng),局域網(wǎng)或者互聯(lián)網(wǎng)上的資源知染。

  3. HTTP/1.1為http協(xié)議版本肋僧。

    http1.0:當(dāng)前瀏覽器客戶端與服務(wù)器端建立連接之后,只能發(fā)送一次請(qǐng)求控淡,一次請(qǐng)求之后連接關(guān)閉嫌吠。
    http1.1:當(dāng)前瀏覽器客戶端與服務(wù)器端建立連接之后,可以在一次連接中發(fā)送多次請(qǐng)求掺炭。(基本都使用1.1)辫诅。

請(qǐng)求頭

Accept: text/html,image/*          -- 瀏覽器接受的數(shù)據(jù)類型
Accept-Charset: ISO-8859-1         -- 瀏覽器接受的編碼格式
Accept-Encoding: gzip,compress     --瀏覽器接受的數(shù)據(jù)壓縮格式
Accept-Language: en-us,zh-         --瀏覽器接受的語(yǔ)言
Host: www.it315.org:80             --(必須的)當(dāng)前請(qǐng)求訪問的目標(biāo)地址(主機(jī):端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT    --瀏覽器最后的緩存時(shí)間
Referer: http://www.it315.org/index.jsp             -- 當(dāng)前請(qǐng)求來(lái)自于哪里
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)   --瀏覽器類型
Cookie:name=eric                  -- 瀏覽器保存的cookie信息
Connection: close/Keep-Alive      -- 瀏覽器跟服務(wù)器連接狀態(tài)。close: 連接關(guān)閉  keep-alive:保存連接竹伸。
Date: Tue, 11 Jul 2000 18:23:51 GMT      -- 請(qǐng)求發(fā)出的時(shí)間

請(qǐng)求體

name=zhangsan&password=123456         --POST提交的參數(shù)放在這里

HttpServletRequest對(duì)象

//1.請(qǐng)求行: 
request.getMethod();         //請(qǐng)求方式
request.getRequetURI();      //獲取rui
request.getRequetURL();      //獲取url
request.getProtocol();       //請(qǐng)求http協(xié)議版本
//2.請(qǐng)求頭:
request.getHeader("名稱");   //根據(jù)請(qǐng)求頭獲取請(qǐng)求值
request.getHeaderNames();    //獲取所有的請(qǐng)求頭名稱
//3.實(shí)體內(nèi)容:
request.getInputStream();    //獲取實(shí)體內(nèi)容數(shù)據(jù)

Http響應(yīng)

HTTP/1.1 200 OK                     --響應(yīng)行
Server: Apache-Coyote/1.1           --響應(yīng)頭(key-vaule)
Content-Length: 24 
Date: Fri, 30 Jan 2015 01:54:57 GMT
                                    --一個(gè)空行
this is hello servlet!!!            --響應(yīng)體

響應(yīng)行

HTTP/1.1 200 OK

相應(yīng)頭

Location: http://www.it315.org/index.jsp   --表示重定向的地址泥栖,該頭和302的狀態(tài)碼一起使用簇宽。
Server:apache tomcat                       --表示服務(wù)器的類型
Content-Encoding: gzip                     --表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)壓縮類型
Content-Length: 80                         --表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)長(zhǎng)度
Content-Language: zh-cn                    --表示服務(wù)器支持的語(yǔ)言
Content-Type: text/html; charset=GB2312    --表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)類型及內(nèi)容編碼
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  --表示服務(wù)器資源的最后修改時(shí)間
Refresh: 1;url=http://www.it315.org           --表示定時(shí)刷新
Content-Disposition: attachment; filename=aaa.zip --表示告訴瀏覽器以下載方式打開資源(下載文件時(shí)用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服務(wù)器發(fā)送給瀏覽器的cookie信息(會(huì)話管理用到)
Expires: -1                             --表示通知瀏覽器不進(jìn)行緩存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive            --表示服務(wù)器和瀏覽器的連接狀態(tài)。close:關(guān)閉連接 keep-alive:保存連接

HttpServletResponse對(duì)象

//1.響應(yīng)行: 
response.setStatus();        //設(shè)置狀態(tài)碼
//2.響應(yīng)頭: 
response.setHeader("name","value");  //設(shè)置響應(yīng)頭
//3.實(shí)體內(nèi)容:
response.getWriter().writer();       //發(fā)送字符實(shí)體內(nèi)容
response.getOutputStream().writer()  //發(fā)送字節(jié)實(shí)體內(nèi)容

重定向

resp.setStatus(302);
resp.setHeader("Location", "OtherServlet");

Http基礎(chǔ)

https與http區(qū)別

  1. https 協(xié)議需要到 ca 申請(qǐng)證書吧享,一般免費(fèi)證書較少魏割,因而需要一定費(fèi)用。
  2. http 是超文本傳輸協(xié)議钢颂,信息是明文傳輸钞它,https 則是具有安全性的 ssl 加密傳輸協(xié)議。
  3. http 和 https 使用的是完全不同的連接方式殊鞭,用的端口也不一樣遭垛,前者是 80,后者是 443操灿。
  4. http 的連接很簡(jiǎn)單锯仪,是無(wú)狀態(tài)的;HTTPS 協(xié)議是由 SSL+HTTP 協(xié)議構(gòu)建的可進(jìn)行加密傳輸趾盐、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議庶喜,比 http 協(xié)議安全。

https工作原理

客戶端在使用HTTPS 方式與Web 服務(wù)器通信時(shí)有以下幾個(gè)步驟:

  1. 客戶使用 https 的 URL 訪問 Web 服務(wù)器救鲤,要求與 Web 服務(wù)器建立 SSL 連接久窟。
  2. Web 服務(wù)器收到客戶端請(qǐng)求后,會(huì)將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端本缠。
  3. 客戶端的瀏覽器與 Web 服務(wù)器開始協(xié)商 SSL 連接的安全等級(jí)斥扛,也就是信息加密的等級(jí)。
  4. 客戶端的瀏覽器根據(jù)雙方統(tǒng)一的安全等級(jí)丹锹,建立會(huì)話密鑰稀颁,然后利用網(wǎng)站的公鑰將會(huì)話密鑰加密,并傳送給網(wǎng)站楣黍。
  5. Web 服務(wù)器利用自己的私鑰解密出會(huì)話密鑰峻村。
  6. Web 服務(wù)器利用會(huì)話密鑰加密與客戶端之間的通信。

[圖片上傳失敗...(image-d4d59c-1539677593281)]

https優(yōu)缺點(diǎn)

  1. HTTPS 協(xié)議握手階段比較費(fèi)時(shí)锡凝,會(huì)使頁(yè)面的加載時(shí)間延長(zhǎng)近 50%,增加 10% 到 20% 的耗電垢啼;
  2. HTTPS 連接緩存不如 HTTP 高效窜锯,會(huì)增加數(shù)據(jù)開銷和功耗,甚至已有的安全措施也會(huì)因此而受到影響芭析;
  3. SSL 證書需要錢锚扎,功能越強(qiáng)大的證書費(fèi)用越高,個(gè)人網(wǎng)站馁启、小網(wǎng)站沒有必要一般不會(huì)用驾孔。
  4. SSL 證書通常需要綁定 IP芍秆,不能在同一 IP 上綁定多個(gè)域名,IPv4 資源不可能支撐這個(gè)消耗翠勉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妖啥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子对碌,更是在濱河造成了極大的恐慌荆虱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朽们,死亡現(xiàn)場(chǎng)離奇詭異怀读,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骑脱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門菜枷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叁丧,你說(shuō)我怎么就攤上這事啤誊。” “怎么了歹袁?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵坷衍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我条舔,道長(zhǎng)枫耳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任孟抗,我火速辦了婚禮迁杨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凄硼。我一直安慰自己铅协,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布摊沉。 她就那樣靜靜地躺著狐史,像睡著了一般。 火紅的嫁衣襯著肌膚如雪说墨。 梳的紋絲不亂的頭發(fā)上骏全,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音尼斧,去河邊找鬼姜贡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棺棵,可吹牛的內(nèi)容都是我干的楼咳。 我是一名探鬼主播熄捍,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼母怜!你這毒婦竟也來(lái)了余耽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糙申,失蹤者是張志新(化名)和其女友劉穎宾添,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柜裸,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缕陕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疙挺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛邑。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铐然,靈堂內(nèi)的尸體忽然破棺而出蔬崩,到底是詐尸還是另有隱情,我是刑警寧澤搀暑,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布沥阳,位于F島的核電站,受9級(jí)特大地震影響自点,放射性物質(zhì)發(fā)生泄漏桐罕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一桂敛、第九天 我趴在偏房一處隱蔽的房頂上張望功炮。 院中可真熱鬧,春花似錦术唬、人聲如沸薪伏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫁怀。三九已至,卻和暖如春借浊,著一層夾襖步出監(jiān)牢的瞬間眶掌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工巴碗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人即寒。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓橡淆,卻偏偏與公主長(zhǎng)得像召噩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逸爵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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