java基礎(chǔ)學習:JavaWeb之JSP

其他更多java基礎(chǔ)文章:
java基礎(chǔ)學習(目錄)

本章內(nèi)容較多搬瑰,全部認真看完可能需要一小時以上款票,建議邊看邊做筆記,否則容易混亂


一泽论、JSP概述

1.1艾少、JSP結(jié)構(gòu)

網(wǎng)絡(luò)服務(wù)器需要一個JSP引擎,也就是一個容器來處理JSP頁面翼悴。容器負責截獲對JSP頁面的請求缚够。內(nèi)嵌JSP容器的Apache支持JSP開發(fā)。
JSP容器與Web服務(wù)器協(xié)同合作抄瓦,為JSP的正常運行提供必要的運行環(huán)境和其他服務(wù)潮瓶,并且能夠正確識別專屬于JSP網(wǎng)頁的特殊元素。
下圖顯示了JSP容器和JSP文件在Web應用中所處的位置钙姊。

1.2毯辅、JSP運行流程

以下步驟表明了Web服務(wù)器是如何使用JSP來創(chuàng)建網(wǎng)頁的:
1)就像其他普通的網(wǎng)頁一樣,您的瀏覽器發(fā)送一個HTTP請求給服務(wù)器煞额。Web服務(wù)器識別出這是一個對JSP網(wǎng)頁的請求思恐,并且將該請求傳遞給JSP引擎沾谜。通過使用URL或者.jsp文件來完成。
2)JSP引擎從磁盤中載入JSP文件胀莹,然后將它們轉(zhuǎn)化為servlet基跑。這種轉(zhuǎn)化只是簡單地將所有模板文本改用println()語句,并且將所有的JSP元素轉(zhuǎn)化成Java代碼描焰。
3)JSP引擎將servlet編譯成可執(zhí)行類媳否,并且將原始請求傳遞給servlet引擎。
4)Web服務(wù)器的某組件將會調(diào)用servlet引擎荆秦,然后載入并執(zhí)行servlet類篱竭。在執(zhí)行過程中,servlet產(chǎn)生HTML格式的輸出并將其內(nèi)嵌于HTTP response中上交給Web服務(wù)器步绸。Web服務(wù)器以靜態(tài)HTML網(wǎng)頁的形式將HTTP response返回到您的瀏覽器中掺逼。
最終,Web瀏覽器處理HTTP response中動態(tài)產(chǎn)生的HTML網(wǎng)頁瓤介,就好像在處理靜態(tài)網(wǎng)頁一樣吕喘。

以上提及到的步驟可以用下圖來表示:


一般情況下,JSP引擎會檢查JSP文件對應的servlet是否已經(jīng)存在刑桑,并且檢查JSP文件的修改日期是否早于servlet氯质。如果JSP文件的修改日期早于對應的servlet,那么容器就可以確定JSP文件沒有被修改過并且servlet有效漾月。這使得整個流程與其他腳本語言(比如PHP)相比要高效快捷一些病梢。

Jsp 生成java源碼,默認第一次生成梁肿,之后直接執(zhí)行,除非內(nèi)容修改觅彰,具體點說吩蔑,由于JSP只會在客戶端第一次請求的時候被編譯,因此第一次請求JSP時會感覺比較慢填抬,而之后的請求因為不會編譯JSP烛芬,所以速度就快多了。
如果將Tomcat保存的JSP編譯后的class文件刪除飒责,Tomcat也會重新編譯JSP赘娄。在開發(fā)Web程序的時候經(jīng)常需要修改JSP, Tomcat能夠自動檢測到JSP程序的改動,如果檢測到JSP源代碼發(fā)生了改動宏蛉,Tomcat會在下次客戶端請求JSP時重新編譯JSP,而不需要重啟Tomcat遣臼,這種自動檢測功能默認是開啟的,檢測改動會消耗少量的時間拾并,在部署web應用程序的時候可以在web.xml中將它關(guān)掉揍堰。
這也就是為什么我們能夠在jsp頁面直接修改內(nèi)容鹏浅,而不用重新啟動服務(wù)器的原因。

總的來說屏歹,JSP網(wǎng)頁就是用另一種方式來編寫servlet而不用成為Java編程高手隐砸。除了解釋階段外,JSP網(wǎng)頁幾乎可以被當成一個普通的servlet來對待蝙眶。

1.3季希、JSP生命周期

理解JSP底層功能的關(guān)鍵就是去理解它們所遵守的生命周期。JSP生命周期就是從創(chuàng)建到銷毀的整個過程幽纷,類似于servlet生命周期式塌,區(qū)別在于JSP生命周期還包括將JSP文件編譯成servlet。
以下是JSP生命周期中所走過的幾個階段:
編譯階段:
servlet容器編譯servlet源文件霹崎,生成servlet類
初始化階段:
加載與JSP對應的servlet類珊搀,創(chuàng)建其實例,并調(diào)用它的初始化方法
執(zhí)行階段:
調(diào)用與JSP對應的servlet實例的服務(wù)方法
銷毀階段:
調(diào)用與JSP對應的servlet實例的銷毀方法尾菇,然后銷毀servlet實例
很明顯境析,JSP生命周期的四個主要階段和servlet生命周期非常相似,下面給出圖示:

二派诬、JSP語法

2.1劳淆、jsp腳本

1)使用<% 編寫java代碼 %>,中間java代碼必須遵循Java語法

      

來看看默赂,jsp變?yōu)閟ervlet時的代碼是如何編寫的


2)使用<%=xxx %>來輸出結(jié)果

使用<%=result %>來輸出結(jié)果沛鸵,servlet中就會將其轉(zhuǎn)換為out.print(result)進行輸出。輸出各種類型數(shù)據(jù):int缆八、double曲掰、boolean、String奈辰、Object等栏妖。

3)注釋

<%-- --%>:jsp注釋
<!-- -->:這個注釋奖恰,會發(fā)送到瀏覽器端的源碼中顯示
注釋分別在servlet中如何顯示:

在servlet中

總結(jié):JSP注釋不會在servlet文件中顯示吊趾,而java注釋則會,但其所有的注釋到了瀏覽器端瑟啃,都不會出現(xiàn)在源碼中论泛,只有這個注釋會到瀏覽器的網(wǎng)頁源碼中去。

4)JSP中申明方法與屬性(全局變量)  使用<%! 方法蛹屿、屬性%>

2.2屁奏、3個指令

JSP指令(directive)是為JSP引擎而設(shè)計的,它們并不直接產(chǎn)生任何可見輸出蜡峰,而只是告訴引擎如何處理JSP頁面中的其余部分了袁。指令用來申明JSP頁面的一些屬性朗恳,比如編碼方式,文檔類型载绿。我們在servlet中也會申明我們使用的編碼方式和響應的文檔類型的粥诫,而JSP就是用指令來申明。

JSP指令格式:<%@ directive {attribute=value}* %>(<%@ 指令名稱 屬性1=“屬性值1” 屬性2=“屬性值2”崭庸。怀浆。。%>)
分析:  
directive:指令名稱怕享,例如page指令
attribute=value:緊跟指令名稱后面的就是各種屬性执赡,以鍵值對的形式書寫
*:代表后面能跟0個或多個屬性。

2.2.1函筋、page指令(用來聲明JSP頁面的屬性等)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  page指令沙合,后面跟著三個屬性,分別是language跌帐、contentType首懈、pageEncoding。

這只是其中的幾個屬性谨敛,并沒有寫全究履,page指令允許的屬性如下表所示:

屬性名稱 取值范圍 描述
language java 解釋該JSP文件時采用的語言,一般為java語言脸狸,默認為java
extends 任何類的全名 編譯該JSP文件時繼承哪個類最仑,JSP為Servlet,因此當指明繼承普通類時需要實現(xiàn)Servlet的init炊甲、destroy等方法
import 任何包名泥彤、類名 引入該JSP中用到的類、包等卿啡,import是唯一可以聲明多次的page指令屬性全景,一個import可以引用uogelei,中間用英文逗號隔開牵囤,如<%@ page import="java.util.List,java.util.ArrayList"%>
session true、false 該JSP內(nèi)是否內(nèi)置Session對象滞伟,如果為true揭鳞,則內(nèi)置Session對象,可直接使用梆奈,否則反之野崇,默認為true
autoFlush true,false 是否運行緩存亩钟,如果為true乓梨,則使用out.println()等方法輸出的字符串并不是立刻到達客戶端服務(wù)器的鳖轰,而是暫時存到緩存里,緩存滿了或者程序執(zhí)行完畢或者執(zhí)行out.flush()操作時才到客戶端扶镀,默認為true蕴侣。
buffer none或者數(shù)字KB 指定緩存大小,當autoFlush設(shè)為true時有效臭觉,例如<%@ page buffer=10kb%>
isThreadSafe true昆雀,false 是否線程安全,如果為true蝠筑,則運行多個線程同時運行該jsp程序狞膘,否則只運行一個線程,其余線程等待什乙,默認為false
isErrorPage true挽封,false 指定該頁面是否為錯誤顯示頁面,如果為true臣镣,則該JSP內(nèi)置有一個Exception對象exception辅愿,可直接使用,否則沒有退疫,默認為false
errorPage 某個JSP頁面的相對路徑 指明一個錯誤頁面渠缕,如果該JSP程序拋出一個未捕捉的異常,則轉(zhuǎn)到errorPage指定的頁面褒繁,errorPage指定的頁面通常isErrorPage屬性為true亦鳞,且內(nèi)置的exception對象為未捕捉的異常
contentType 有效的文檔類型 客戶端瀏覽器根據(jù)該屬性判斷文檔類型,例如 HTML格式為text/html棒坏、純文本格式為text/plain燕差、JPG圖像為image/jpeg、GIF圖像為image/gif坝冕、WORD文檔為application/msword徒探,該屬性常跟著charset設(shè)置編碼一起,作用是通知服務(wù)器和瀏覽器都使用同一個碼表
info 任意字符串 指明JSP的信息喂窟,該信息可以通過Servlet.getServletInfo()方法獲取到
trimDirective Whitespaces true测暗、false 是否去掉指令前后的空白字符,默認為false
pageEncoding UTF-8,ISO-8859-1等 指定一張碼表來對該JSP頁面進行編碼
2.2.2磨澡、include指令

比較簡單碗啄,只有一種形式 <%@ include file="relativeURL"%>  relativeURL:本應用程序內(nèi)另一個JSP文件或者HTML文件的路徑,例如稳摄,網(wǎng)址內(nèi)所有頁面均有一個統(tǒng)一風格的導航欄和頁腳版權(quán)稚字,那么就可以使用該指令將其包含進來。

特點:include指令會將包含頁面的源代碼添加到使用include指令的頁面中來,然后編譯成class文件胆描,而等下會講到的一個JSP行為瘫想,<jsp:include page="relativeURL">作用跟include指令一樣,但是不同的是昌讲,include行為是運行時單獨執(zhí)行包含頁面国夜,然后把執(zhí)行的結(jié)果包含到本頁面來,屬于先運行后包含剧蚣。

注意  
靜態(tài)包含:把其它資源包含到當前頁面中支竹。
<%@ include file="/include/header.jsp" %>
動態(tài)包含:
<jsp:include page="/include/header.jsp"></jsp:include>

兩者的區(qū)別:翻譯的時間段不同
前者:在翻譯時就把兩個文件合并
后者:不會合并文件,當代碼執(zhí)行到include時鸠按,才包含另一個文件的內(nèi)容礼搁。
原則:能用靜的就不用動的。

2.2.3目尖、taglib指令

JSP支持標簽技術(shù)馒吴,后面會講到標簽的用法,jstl標簽庫的使用等
作用:用來指明JSP頁面內(nèi)使用的JSP標簽庫瑟曲,taglib指令有兩個屬性饮戳,uri為類庫的地址,prefix為標簽的前綴
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

2.3洞拨、6個動作

前面講了JSP語法扯罐,介紹了JSP頁面中的內(nèi)容有哪些,分別有什么作用烦衣,就兩個東西歹河,模塊數(shù)據(jù)和元素。其中元素有包括腳本花吟,指令秸歧,標簽,腳本就是JSP中嵌入java代碼衅澈,指令作用就是申明頁面的屬性键菱,那標簽是干嘛的,標簽分為JSP自帶內(nèi)置的標簽今布,和通過taglib指令來使用JSP標簽庫经备,或者自定義標簽。現(xiàn)在我們先來講一些JSP內(nèi)置的標簽部默∨ 
JSP內(nèi)置的標簽就被稱為JSP行為(JSP Actions)。只要書寫很少的標記代碼就能使用JSP提供的豐富功能甩牺,JSP行為其實是對常用的JSP功能的抽象與封裝,可以取代jsp腳本累奈,讓JSP中就少一些嵌入java代碼的地方贬派。

簡單的說就是使用標簽的形式來表示一段java代碼急但,格式:
<jsp:elements {attribute="value"}* />  
分析:
jsp:標簽的前綴,說明是jsp內(nèi)置的標簽搞乏,
elements:行為的名稱波桩,
attribute=value:使用鍵值對來編寫屬性
*:能指定0個或多個屬性對

2.3.1、<jsp:include />行為(動態(tài)包含)
<jsp:include page="/include/header.jsp"></jsp:include>

include行為用于運行時包含某個文件请敦,如果被包含的文件為JSP程序镐躲,則先會執(zhí)行JSP程序,然后在把執(zhí)行的結(jié)果包含進來侍筛。

作用是跟include指令一樣的萤皂,唯一的區(qū)別就在于,include指令是將被包含的文件的源碼加入到了本JSP程序中匣椰,然后在進行編譯裆熙,屬于靜態(tài)包含,而include行為只是將被包含的文件的運行結(jié)果包含進自己禽笑。屬于動態(tài)包含入录。

2.3.2、Java bean行為

是一組與Java Bean 相關(guān)的行為佳镜,包括useBean行為僚稿、setProperty行為、getProperty行為等蟀伸。Java Bean就是普通的Java類蚀同,也被稱為POJO,只有私有的屬性與對應的getter方法和setter方法望蜡,注意其中當私有的屬性為boolean類型時唤崭,習慣上一般把getter方法寫成isXxx();而不是getXxx();

1)userBean行為

<jsp:useBean id="beanObject" class="className" scope="Value">  作用:在jsp中定義一個java bean對象。

分析:   
id:指明Java Bean對象的名稱脖律,JSP中可以使用該名稱引用該Java Bean對象谢肾,相當于給new出來的對象取一個變量名,
class:Java Bean類的全名
scope:該java bean對象的作用范圍小泉,可以寫的就四個芦疏,也就是JSP的四大作用域,page微姊、request酸茴、session、application
---page:只能在當前JSP頁面使用兢交,如果不在JSP頁面薪捍,那么就會失效
---request:這個前面學過,A頁面請求轉(zhuǎn)發(fā)到B頁面,那么使用的是同一個request酪穿,那么A,B頁面都算是request的作用域凳干,也就是通過請求轉(zhuǎn)發(fā)的頁面都是其作用域
----session:該作用域在一個web項目下任何位置應該讀訪問的到,只要cookie不關(guān)閉被济,并且cookie設(shè)置的訪問路徑為"/"救赐,
---application:其實就是Servlet中的servletContext,服務(wù)器下的所有項目都能訪問到只磷。

2)setProperty行為
<jsp:setProperty name="beanName" property="propertyName" value="">
分析:
對Java Bean對象進行屬性的設(shè)置
name:java bean對象的名稱经磅,也就是在useBean行為中的id
property:對象中的屬性名,
value:要對其屬性進行賦值的值

3)getProperty行為
<jsp:getProperty name="beanName" property="propertyName" />
分析:            
獲取JavaBean對象的某個屬性值
name:java bean 對象的名稱钮追,也就是在useBean行為中的id
property:對象的屬性名

2.3预厌、<jsp:forward />行為

實現(xiàn)請求轉(zhuǎn)發(fā)功能,Servlet中通過request.getRequestDispatcher("someServlet").forward(request,response);而在JSP中也能夠?qū)崿F(xiàn)相同的功能畏陕,只不過用的是<jsp:forward />行為配乓,實際上forward行為就是對其進行了封裝。

格式:

<jsp:forward page="someServlet">
  <jsp:param name="param1" value="value1"/>
  <jsp:param name="param2" value="value2"/>
</jsp:forward>

分析:page:需要跳轉(zhuǎn)到的頁面或者servlet惠毁、<jsp:param/>參數(shù)行為犹芹,帶一些參數(shù)過去,name鞠绰、value是以鍵值對的形式帶過去的

2.4腰埂、9個內(nèi)置對象

我們知道JSP中的內(nèi)容就只有兩種,模版數(shù)據(jù)和元素蜈膨,元素就包括了指令屿笼,腳本,標簽(行為)翁巍,腳本會慢慢被標簽全部代替酪捡,也就是說JSP中基本上不會嵌入Java代碼潮剪,但是我們也知道JSP會轉(zhuǎn)換為servlet,在Servlet中,輸出數(shù)據(jù)時官扣,都需要通過response.getWrite()谷炸;但是在JSP中剪芥,直接使用out對象進行輸出交汤,為什么呢?這就是因為out為JSP的一個隱藏對象恰响,JSP中內(nèi)置了9個隱藏對象趣钱,使得JSP比Servlet使用起來更簡單,更方便胚宦。

2.4.1首有、九大內(nèi)置對象概述

分析:
request:請求對象燕垃,類型:httpServletRequest
response:響應對象,類型:httpServletResponse
session:表示一次會話绞灼,在服務(wù)器端記錄用戶狀信息的技術(shù)
application:標識web應用上下文利术,類型:ServletContext,詳情就看Servlet中的ServletContext的使用
exception:表示發(fā)生異常對象低矮,類型 Throwable,在上面我們介紹page指令中的一個errorPage屬性時就有說到他
page:page對象代表當前JSP頁面被冒,是當前JSP編譯后的Servlet類的對象军掂。相當于this昨悼。
config:標識Servlet配置蝗锥,類型:ServletConfig,api跟Servlet中的ServletConfig對象是一樣的率触,能獲取該servlet的一些配置信息终议,能夠獲取ServletContext
out:輸出響應體 類型:JspWriter
pageContext:表示 jsp頁面上下文(jsp管理者) 類型:PageContext

注意:標記了紅色的對象就是JSP獨有的,其他的都是Servlet中的老東西葱蝗。

在這個由jsp轉(zhuǎn)換為servlet的文件中穴张,只能看到8個內(nèi)置對象,少了exception對象两曼,因為我們在將page指令時皂甘,說過一個isErrorPage屬性,默認是false偿枕,被關(guān)閉了,所以其中并沒有exception對象户辫。

2.4.2渐夸、pageContext(重要)

這個功能就比較強大了,基本上什么他都有渔欢,因為是它是JSP頁面的管理者(上下文)墓塌,所以JSP中的內(nèi)置對象呀,它統(tǒng)統(tǒng)能夠獲得膘茎,下面介紹它的api:

1)獲得其它八大內(nèi)置對象 getXxx()

在普通類中可以通過PageContext獲取其他JSP隱式對象桃纯。自定義標簽時就使用。
pageContext.getOut();  //獲得out對象
pageContext.getApplication();  //獲得application對象
等等....

2)對作用域的屬性進行操作(四大作用域)
對默認作用域的屬性進行操作披坏。page
Object getAttribute(String name);  //獲得page作用域數(shù)據(jù)
void setAttribute(String name,Object o);  //給page作用域設(shè)置內(nèi)容
void removeAttribute(String name);  //給page作用域移除內(nèi)容

3)對指定作用域的屬性進行操作
Object getAttribute(String name,int Scope);  //獲得 指定作用域中的數(shù)據(jù)
void setAttribute(String name,Object o,int Scope);  //給指定作用域設(shè)置內(nèi)容
void removeAttribute(String name,int Scope); // 移除指定作用域的內(nèi)容(page/request/session/application)

4)提供作用域常量
PageContext.PAGE_SCOPE  page
PageContext.REQUEST_SCOPE  request      
PageContext.SESSION_SCOPE  response
PageContext.APPLICATION_SCOPE  application

5)一次獲得指定名稱內(nèi)容
pageContext中最厲害的方法是:
findAttribute(String name); //自動從page request session application依次查找棒拂,找到了就取值玫氢,結(jié)束查找。

6)提供了的簡易方法  
pageContext.forward("2.jsp");
pageContext.include("2.jsp");

2.4.3谜诫、out對象

類型:JspWriter

jsp 輸出底層使用 response.getWriter()漾峡;什么意思呢?這里就要講解一下JSP緩存和Servlet緩存了喻旷,輸出的過程是這樣的

JSP頁面轉(zhuǎn)換為Servlet后生逸,使用的out對象是JspWriter類型的,所以是會先將要發(fā)送的數(shù)據(jù)存入JSP輸出緩存中且预,然后槽袄,等JSP輸出緩存滿了在自動刷新到servlet輸出緩存等serlvet輸出緩存滿了,或者程序結(jié)束了锋谐,就會將其輸出到瀏覽器上遍尺。除非手動out.flush()。

驗證servlet輸出緩存和JSP輸出緩存和我們上面所說的是正確:



結(jié)果:


分析:
如果按沒有jsp緩存和servlet緩存的話涮拗,輸出的結(jié)果應該是aaaabbbbcccc乾戏,但是輸出的卻是bbbbaaaacccc三热,為什么呢鼓择?按照我們上面所說的原理進行分析,out對象是先將其輸出到JSP緩存中惯退,所以aaaa加入了jsp緩存,而response.getWriter().print("bbbb")是直接將bbbb輸出到servlet緩存中从藤,然后又使用out對象將cccc輸出到j(luò)sp緩存催跪,到程序結(jié)束,servlet緩存中有bbbb夷野,然后jsp會將緩存中的內(nèi)容就刷新到servlet緩存中懊蒸,serlvet就是bbbbaaaacccc了,然后到瀏覽器也就得到我們的輸出結(jié)果了悯搔。如果在12行將注釋去掉骑丸,那么輸出的結(jié)果又會是什么呢?答案就是aaaabbbbcccc妒貌,過程自行分析通危。

2.4.4、config對象

類型:ServletConfig
能夠獲取servlet的初始化參數(shù)灌曙,獲取servletContext對象菊碟,獲取servletName。

2.4.5在刺、exception異常對象

包含了異常的信息
使用它逆害,必須結(jié)合page指令中的isErrorPage屬性和errorPage屬性头镊。
如下例子,exception.jsp拋異常的一個NullPointException魄幕,并且跳轉(zhuǎn)到error.jsp錯誤顯示頁面相艇,其中errorPage屬性的意思是如果發(fā)生未捕捉到的異常,將會跳轉(zhuǎn)到error.jsp頁面


exception.jsp

error.jsp  isErrorPage屬性說明該頁面是一個錯誤顯示頁面纯陨,則可以使用exception對象


error.jsp

訪問:訪問http://localhost:8080/Web_Jsp/exception.jsp

2.4.6坛芽、總結(jié):九大內(nèi)置對象和servlet中對象的關(guān)系

page就是jsp轉(zhuǎn)換為servlet對象本身,也就是this
config -- Servlet中的servletConfig
application -- Servlet中的ServletContext
request  -- Servlet中的request
response  -- Servlet中的response
session  -- Servlet中的session    
out  -- JspWriter
exception  -- 異常對象
pageContext  -- 表示 jsp頁面上下文(jsp管理者) 類型:PageContext
其中pageContext是最厲害的翼抠,因為它可以得到其他8個內(nèi)置對象

2.5靡馁、4大作用域

這四大作用域,其實就是其九大內(nèi)置對象中的四個机久,為什么說他們也是JSP的四大作用域呢?
因為這四個對象都能存儲數(shù)據(jù)赔嚎,比如request.setAttribute()注意和request.setParameter()區(qū)分開來膘盖,一個是存儲在域中的、一個是請求參數(shù)尤误,session.setAttribute()侠畔、application其實就是SerlvetContext,自然也有setAttribute()方法损晤。

而page作用域的操作就需要依靠pageContext對象來進行了软棺。在上面我們也有提到JSP的四大作用域。

1)page作用域
代表變量只能在當前頁面上生效

2)request作用域
代表變量能在一次請求中生效尤勋,一次請求可能包含一個頁面喘落,也可能包含多個頁面,比如頁面A請求轉(zhuǎn)發(fā)到頁面B最冰。

3)session作用域
代表變量能在一次會話中生效瘦棋,基本上就是能在web項目下都有效,session的使用也跟cookie有很大的關(guān)系暖哨。一般來說赌朋,只要瀏覽器不關(guān)閉,cookie就會一直生效篇裁,cookie生效沛慢,session的使用就不會受到影響。

4)application作用域
代表變量能一個應用下(多個會話)达布,在服務(wù)器下的多個項目之間都能夠使用团甲。比如baidu、wenku等共享帳號往枣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伐庭,一起剝皮案震驚了整個濱河市粉渠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圾另,老刑警劉巖霸株,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異集乔,居然都是意外死亡去件,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門扰路,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尤溜,“玉大人,你說我怎么就攤上這事汗唱」常” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵哩罪,是天一觀的道長授霸。 經(jīng)常有香客問我,道長际插,這世上最難降的妖魔是什么碘耳? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮框弛,結(jié)果婚禮上辛辨,老公的妹妹穿的比我還像新娘。我一直安慰自己瑟枫,他們只是感情好斗搞,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著力奋,像睡著了一般榜旦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上景殷,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天溅呢,我揣著相機與錄音,去河邊找鬼猿挚。 笑死咐旧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绩蜻。 我是一名探鬼主播铣墨,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼办绝!你這毒婦竟也來了伊约?” 一聲冷哼從身側(cè)響起姚淆,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屡律,沒想到半個月后腌逢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡超埋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年搏讶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍殴。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡媒惕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出来庭,到底是詐尸還是另有隱情妒蔚,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布月弛,位于F島的核電站面睛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尊搬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一土涝、第九天 我趴在偏房一處隱蔽的房頂上張望佛寿。 院中可真熱鬧,春花似錦但壮、人聲如沸冀泻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弹渔。三九已至,卻和暖如春溯祸,著一層夾襖步出監(jiān)牢的瞬間肢专,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工焦辅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留博杖,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓筷登,卻偏偏與公主長得像剃根,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子前方,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354