Java Web從前端到后臺(tái)常用框架介紹

一稼虎、SpringMVC

Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想糕篇,將web層進(jìn)行職責(zé)解耦火诸,基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā)它浅,Spring Web MVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)的译柏。

模型(Model )封裝了應(yīng)用程序的數(shù)據(jù)和一般他們會(huì)組成的POJO。

視圖(View)是負(fù)責(zé)呈現(xiàn)模型數(shù)據(jù)和一般它生成的HTML輸出姐霍,客戶端的瀏覽器能夠解釋鄙麦。

控制器(Controller )負(fù)責(zé)處理用戶的請(qǐng)求,并建立適當(dāng)?shù)哪P湍髡郏阉鼈鬟f給視圖渲染胯府。

Spring的web模型 - 視圖 - 控制器(MVC)框架是圍繞著處理所有的HTTP請(qǐng)求和響應(yīng)的DispatcherServlet的設(shè)計(jì)。

Spring Web MVC處理請(qǐng)求的流程

具體執(zhí)行步驟如下

1恨胚、 首先用戶發(fā)送請(qǐng)求————>前端控制器骂因,前端控制器根據(jù)請(qǐng)求信息(如URL)來(lái)決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它,即以前的控制器的控制邏輯部分赃泡;圖2-1中的1寒波、2步驟;

2升熊、 頁(yè)面控制器接收到請(qǐng)求后俄烁,進(jìn)行功能處理,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象级野,這個(gè)對(duì)象在Spring Web MVC中叫命令對(duì)象页屠,并進(jìn)行驗(yàn)證,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理蓖柔;處理完畢后返回一個(gè)ModelAndView(模型數(shù)據(jù)和邏輯視圖名)辰企;圖2-1中的3、4渊抽、5步驟蟆豫;

3、 前端控制器收回控制權(quán)懒闷,然后根據(jù)返回的邏輯視圖名十减,選擇相應(yīng)的視圖進(jìn)行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染愤估;圖2-1中的步驟6帮辟、7;

4玩焰、 前端控制器再次收回控制權(quán)由驹,將響應(yīng)返回給用戶,圖2-1中的步驟8;至此整個(gè)結(jié)束蔓榄。

二并炮、Spring

2.1、IOC容器:

IOC容器就是具有依賴(lài)注入功能的容器甥郑,IOC容器負(fù)責(zé)實(shí)例化逃魄、定位、配置應(yīng)用程序中的對(duì)象及建立這些對(duì)象間的依賴(lài)澜搅。應(yīng)用程序無(wú)需直接在代碼中new相關(guān)的對(duì)象伍俘,應(yīng)用程序由IOC容器進(jìn)行組裝。在Spring中BeanFactory是IOC容器的實(shí)際代表者勉躺。

2.2癌瘾、AOP:

簡(jiǎn)單地說(shuō),就是將那些與業(yè)務(wù)無(wú)關(guān)饵溅,卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來(lái)妨退,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度概说,并有利于未來(lái)的可操作性和可維護(hù)性碧注。AOP代表的是一個(gè)橫向的關(guān)系

AOP用來(lái)封裝橫切關(guān)注點(diǎn),具體可以在下面的場(chǎng)景中使用:

  • Authentication 權(quán)限

  • Caching 緩存

  • Context passing 內(nèi)容傳遞

  • Error handling 錯(cuò)誤處理

  • Lazy loading 懶加載

  • Debugging  調(diào)試

  • logging, tracing, profiling and monitoring 記錄跟蹤 優(yōu)化 校準(zhǔn)

  • Performance optimization 性能優(yōu)化

  • Persistence  持久化

  • Resource pooling 資源池

  • Synchronization 同步

  • Transactions 事務(wù)

三糖赔、Mybatis

MyBatis 是支持普通 SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架轩端。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索放典。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects基茵,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄奋构。

總體流程:

(1)加載配置并初始化

觸發(fā)條件:加載配置文件
將SQL的配置信息加載成為一個(gè)個(gè)MappedStatement對(duì)象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語(yǔ)句拱层、結(jié)果映射配置)弥臼,存儲(chǔ)在內(nèi)存中。

(2)接收調(diào)用請(qǐng)求

觸發(fā)條件:調(diào)用Mybatis提供的API
傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對(duì)象
處理過(guò)程:將請(qǐng)求傳遞給下層的請(qǐng)求處理層進(jìn)行處理根灯。

(3)處理操作請(qǐng)求

觸發(fā)條件:API接口層傳遞請(qǐng)求過(guò)來(lái)
傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對(duì)象

處理過(guò)程:

(A)根據(jù)SQL的ID查找對(duì)應(yīng)的MappedStatement對(duì)象径缅。

(B)根據(jù)傳入?yún)?shù)對(duì)象解析MappedStatement對(duì)象,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)烙肺。

(C)獲取數(shù)據(jù)庫(kù)連接纳猪,根據(jù)得到的最終SQL語(yǔ)句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫(kù)執(zhí)行,并得到執(zhí)行結(jié)果。

(D)根據(jù)MappedStatement對(duì)象中的結(jié)果映射配置對(duì)得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理,并得到最終的處理結(jié)果述吸。

(E)釋放連接資源猾瘸。

(4)返回處理結(jié)果將最終的處理結(jié)果返回

MyBatis 最強(qiáng)大的特性之一就是它的動(dòng)態(tài)語(yǔ)句功能殿雪。如果您以前有使用JDBC或者類(lèi)似框架的經(jīng)歷娘纷,您就會(huì)明白把SQL語(yǔ)句條件連接在一起是多么的痛苦惜索,要確保不能忘記空格或者不要在columns列后面省略一個(gè)逗號(hào)等氛悬。動(dòng)態(tài)語(yǔ)句能夠完全解決掉這些痛苦购笆。

四粗悯、Dubbo

Dubbo是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC(遠(yuǎn)程過(guò)程調(diào)用協(xié)議)遠(yuǎn)程服務(wù)調(diào)用方案由桌,以及SOA服務(wù)治理方案为黎。簡(jiǎn)單的說(shuō),dubbo就是個(gè)服務(wù)框架行您,如果沒(méi)有分布式的需求铭乾,其實(shí)是不需要用的,只有在分布式的時(shí)候娃循,才有dubbo這樣的分布式服務(wù)框架的需求炕檩,并且本質(zhì)上是個(gè)服務(wù)調(diào)用的東東,說(shuō)白了就是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架捌斧。

1笛质、透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法捞蚂,只需簡(jiǎn)單配置妇押,沒(méi)有任何API侵入。

2姓迅、軟負(fù)載均衡及容錯(cuò)機(jī)制敲霍,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本丁存,減少單點(diǎn)肩杈。

3、 服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn)解寝,不再需要寫(xiě)死服務(wù)提供方地址扩然,注冊(cè)中心基于接口名查詢(xún)服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者聋伦。

節(jié)點(diǎn)角色說(shuō)明:

  • Provider: 暴露服務(wù)的服務(wù)提供方夫偶。

  • Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。

  • Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心嘉抓。

  • Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心索守。

  • Container: 服務(wù)運(yùn)行容器。

五抑片、Maven

Maven這個(gè)個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具卵佛,越來(lái)越多的開(kāi)發(fā)人員使用它來(lái)管理項(xiàng)目中的jar包。但是對(duì)于我們程序員來(lái)說(shuō),我們最關(guān)心的是它的項(xiàng)目構(gòu)建功能截汪。

六疾牲、RabbitMQ

消息隊(duì)列一般是在項(xiàng)目中,將一些無(wú)需即時(shí)返回且耗時(shí)的操作提取出來(lái)衙解,進(jìn)行了異步處理阳柔,而這種異步處理的方式大大的節(jié)省了服務(wù)器的請(qǐng)求響應(yīng)時(shí)間,從而提高了系統(tǒng)的吞吐量蚓峦。

RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器舌剂。

Erlang是一門(mén)動(dòng)態(tài)類(lèi)型的函數(shù)式編程語(yǔ)言。對(duì)應(yīng)到Erlang里暑椰,每個(gè)Actor對(duì)應(yīng)著一個(gè)Erlang進(jìn)程霍转,進(jìn)程之間通過(guò)消息傳遞進(jìn)行通信。相比共享內(nèi)存一汽,進(jìn)程間通過(guò)消息傳遞來(lái)通信帶來(lái)的直接好處就是消除了直接的鎖開(kāi)銷(xiāo)(不考慮Erlang虛擬機(jī)底層實(shí)現(xiàn)中的鎖應(yīng)用)避消。

AMQP(Advanced Message Queue Protocol)定義了一種消息系統(tǒng)規(guī)范。這個(gè)規(guī)范描述了在一個(gè)分布式的系統(tǒng)中各個(gè)子系統(tǒng)如何通過(guò)消息交互召夹。

七岩喷、Log4j

日志記錄的優(yōu)先級(jí),分為OFF监憎、FATAL纱意、ERROR、WARN鲸阔、INFO妇穴、DEBUG、ALL或者您定義的級(jí)別隶债。

八、Ehcache

EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架跑筝,具有快速死讹、精干等特點(diǎn),是Hibernate中默認(rèn)的CacheProvider曲梗。Ehcache是一種廣泛使用的開(kāi)源Java分布式緩存赞警。主要面向通用緩存,Java EE和輕量級(jí)容器。它具有內(nèi)存和磁盤(pán)存儲(chǔ)虏两,緩存加載器,緩存擴(kuò)展愧旦,緩存異常處理程序,一個(gè)gzip緩存servlet過(guò)濾器定罢,支持REST和SOAP api等特點(diǎn)笤虫。

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

1、 快速

2、 簡(jiǎn)單

3琼蚯、 多種緩存策略

4酬凳、緩存數(shù)據(jù)有兩級(jí):內(nèi)存和磁盤(pán),因此無(wú)需擔(dān)心容量問(wèn)題

5遭庶、 緩存數(shù)據(jù)會(huì)在虛擬機(jī)重啟的過(guò)程中寫(xiě)入磁盤(pán)

6宁仔、可以通過(guò)RMI、可插入API等方式進(jìn)行分布式緩存

7峦睡、 具有緩存和緩存管理器的偵聽(tīng)接口

8翎苫、支持多緩存管理器實(shí)例,以及一個(gè)實(shí)例的多個(gè)緩存區(qū)域

9榨了、提供Hibernate的緩存實(shí)現(xiàn)

缺點(diǎn):

1煎谍、使用磁盤(pán)Cache的時(shí)候非常占用磁盤(pán)空間:這是因?yàn)镈iskCache的算法簡(jiǎn)單,該算法簡(jiǎn)單也導(dǎo)致Cache的效率非常高阻逮。它只是對(duì)元素直接追加存儲(chǔ)粱快。因此搜索元素的時(shí)候非常的快。如果使用DiskCache的叔扼,在很頻繁的應(yīng)用中事哭,很快磁盤(pán)會(huì)滿。

2瓜富、不能保證數(shù)據(jù)的安全:當(dāng)突然kill掉java的時(shí)候鳍咱,可能會(huì)產(chǎn)生沖突,EhCache的解決方法是如果文件沖突了与柑,則重建cache谤辜。這對(duì)于Cache數(shù)據(jù)需要保存的時(shí)候可能不利。當(dāng)然价捧,Cache只是簡(jiǎn)單的加速丑念,而不能保證數(shù)據(jù)的安全。如果想保證數(shù)據(jù)的存儲(chǔ)安全结蟋,可以使用Bekeley DB Java Edition版本脯倚。這是個(gè)嵌入式數(shù)據(jù)庫(kù)∏妒海可以確保存儲(chǔ)安全和空間的利用率推正。

九、Redis

redis是一個(gè)key-value存儲(chǔ)系統(tǒng)宝惰。和Memcached類(lèi)似植榕,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)尼夺、list(鏈表)尊残、set(集合)炒瘸、zset(sorted set –有序集合)和hash(哈希類(lèi)型)。這些數(shù)據(jù)類(lèi)型都支持push/pop夜郁、add/remove及取交集并集和差集及更豐富的操作什燕,而且這些操作都是原子性的。在此基礎(chǔ)上竞端,redis支持各種不同方式的排序屎即。與memcached一樣,為了保證效率事富,數(shù)據(jù)都是緩存在內(nèi)存中技俐。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步统台。

Redis數(shù)據(jù)庫(kù)完全在內(nèi)存中雕擂,使用磁盤(pán)僅用于持久性。相比許多鍵值數(shù)據(jù)存儲(chǔ)贱勃,Redis擁有一套較為豐富的數(shù)據(jù)類(lèi)型井赌。Redis可以將數(shù)據(jù)復(fù)制到任意數(shù)量的從服務(wù)器。

1.2贵扰、Redis優(yōu)點(diǎn):

(1)異吵鹚耄快速:Redis的速度非常快戚绕,每秒能執(zhí)行約11萬(wàn)集合纹坐,每秒約81000+條記錄。

(2)支持豐富的數(shù)據(jù)類(lèi)型:Redis支持最大多數(shù)開(kāi)發(fā)人員已經(jīng)知道像列表舞丛,集合耘子,有序集合,散列數(shù)據(jù)類(lèi)型球切。這使得它非常容易解決各種各樣的問(wèn)題谷誓,因?yàn)槲覀冎滥男﹩?wèn)題是可以處理通過(guò)它的數(shù)據(jù)類(lèi)型更好。

(3)操作都是原子性:所有Redis操作是原子的吨凑,這保證了如果兩個(gè)客戶端同時(shí)訪問(wèn)的Redis服務(wù)器將獲得更新后的值片林。

(4)多功能實(shí)用工具:Redis是一個(gè)多實(shí)用的工具,可以在多個(gè)用例如緩存怀骤,消息,隊(duì)列使用(Redis原生支持發(fā)布/訂閱)焕妙,任何短暫的數(shù)據(jù)蒋伦,應(yīng)用程序,如Web應(yīng)用程序會(huì)話焚鹊,網(wǎng)頁(yè)命中計(jì)數(shù)等痕届。

1.3韧献、Redis缺點(diǎn):

(1)單線程

(2)耗內(nèi)存

十、Shiro

Apache Shiro是Java的一個(gè)安全框架研叫,旨在簡(jiǎn)化身份驗(yàn)證和授權(quán)锤窑。Shiro在JavaSE和JavaEE項(xiàng)目中都可以使用。它主要用來(lái)處理身份認(rèn)證嚷炉,授權(quán)渊啰,企業(yè)會(huì)話管理和加密等。Shiro的具體功能點(diǎn)如下:

(1)身份認(rèn)證/登錄申屹,驗(yàn)證用戶是不是擁有相應(yīng)的身份绘证;

(2)授權(quán),即權(quán)限驗(yàn)證哗讥,驗(yàn)證某個(gè)已認(rèn)證的用戶是否擁有某個(gè)權(quán)限嚷那;即判斷用戶是否能做事情,常見(jiàn)的如:驗(yàn)證某個(gè)用戶是否擁有某個(gè)角色杆煞∥嚎恚或者細(xì)粒度的驗(yàn)證某個(gè)用戶對(duì)某個(gè)資源是否具有某個(gè)權(quán)限;

(3)會(huì)話管理决乎,即用戶登錄后就是一次會(huì)話队询,在沒(méi)有退出之前,它的所有信息都在會(huì)話中瑞驱;會(huì)話可以是普通JavaSE環(huán)境的娘摔,也可以是如Web環(huán)境的;

(4)加密唤反,保護(hù)數(shù)據(jù)的安全性凳寺,如密碼加密存儲(chǔ)到數(shù)據(jù)庫(kù),而不是明文存儲(chǔ)彤侍;

(5)Web支持肠缨,可以非常容易的集成到Web環(huán)境;
Caching:緩存盏阶,比如用戶登錄后晒奕,其用戶信息、擁有的角色/權(quán)限不必每次去查名斟,這樣可以提高效率脑慧;

(6)shiro支持多線程應(yīng)用的并發(fā)驗(yàn)證,即如在一個(gè)線程中開(kāi)啟另一個(gè)線程砰盐,能把權(quán)限自動(dòng)傳播過(guò)去闷袒;

(7)提供測(cè)試支持;

(8)允許一個(gè)用戶假裝為另一個(gè)用戶(如果他們?cè)试S)的身份進(jìn)行訪問(wèn)岩梳;

(9)記住我囊骤,這個(gè)是非常常見(jiàn)的功能晃择,即一次登錄后,下次再來(lái)的話不用登錄了也物。

文字描述可能并不能讓猿友們完全理解具體功能的意思宫屠。下面我們以登錄驗(yàn)證為例,向猿友們介紹Shiro的使用滑蚯。至于其他功能點(diǎn)浪蹂,猿友們用到的時(shí)候再去深究其用法也不遲。

十一膘魄、設(shè)計(jì)模式

這個(gè)算不上框架乌逐,可自行忽略,不過(guò)博主認(rèn)為設(shè)計(jì)模式的思想很有必要了解一下创葡。

思想:

開(kāi)閉原則:

開(kāi)閉原則就是說(shuō)對(duì)擴(kuò)展開(kāi)放浙踢,對(duì)修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候灿渴,不能去修改原有的代碼洛波。

針對(duì)接口編程,針對(duì)接口編程骚露,依賴(lài)于抽象而不依賴(lài)于具體蹬挤。

盡量使用合成/聚合的方式,而不是使用繼承棘幸。

一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用焰扳,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。

使用多個(gè)隔離的接口误续,比使用單個(gè)接口要好吨悍。

里氏代換原則:

(1)子類(lèi)的能力必須大于等于父類(lèi),即父類(lèi)可以使用的方法蹋嵌,子類(lèi)都可以使用育瓜。

(2)返回值也是同樣的道理。假設(shè)一個(gè)父類(lèi)方法返回一個(gè)List栽烂,子類(lèi)返回一個(gè)ArrayList躏仇,這當(dāng)然可以。如果父類(lèi)方法返回一個(gè)ArrayList腺办,子類(lèi)返回一個(gè)List焰手,就說(shuō)不通了。這里子類(lèi)返回值的能力是比父類(lèi)小的怀喉。

(3)還有拋出異常的情況册倒。任何子類(lèi)方法可以聲明拋出父類(lèi)方法聲明異常的子類(lèi)。 而不能聲明拋出父類(lèi)沒(méi)有聲明的異常磺送。

我有一個(gè)微信公眾號(hào)驻子,經(jīng)常會(huì)分享一些Java技術(shù)相關(guān)的干貨;如果你喜歡我的分享估灿,可以用微信搜索“Java團(tuán)長(zhǎng)”或者“javatuanzhang”關(guān)注崇呵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馅袁,隨后出現(xiàn)的幾起案子域慷,更是在濱河造成了極大的恐慌,老刑警劉巖汗销,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犹褒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弛针,警方通過(guò)查閱死者的電腦和手機(jī)叠骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)削茁,“玉大人宙枷,你說(shuō)我怎么就攤上這事〖氚希” “怎么了慰丛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瘾杭。 經(jīng)常有香客問(wèn)我诅病,道長(zhǎng),這世上最難降的妖魔是什么粥烁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任贤笆,我火速辦了婚禮,結(jié)果婚禮上页徐,老公的妹妹穿的比我還像新娘苏潜。我一直安慰自己,他們只是感情好变勇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布恤左。 她就那樣靜靜地躺著,像睡著了一般搀绣。 火紅的嫁衣襯著肌膚如雪飞袋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天链患,我揣著相機(jī)與錄音巧鸭,去河邊找鬼。 笑死麻捻,一個(gè)胖子當(dāng)著我的面吹牛纲仍,可吹牛的內(nèi)容都是我干的呀袱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼郑叠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼夜赵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起乡革,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寇僧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沸版,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嘁傀,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年视粮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了细办。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馒铃,死狀恐怖蟹腾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情区宇,我是刑警寧澤娃殖,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站议谷,受9級(jí)特大地震影響炉爆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卧晓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一芬首、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逼裆,春花似錦郁稍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至桐愉,卻和暖如春财破,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背从诲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工左痢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓俊性,卻偏偏與公主長(zhǎng)得像略步,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子定页,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355