JavaWeb - jsp簡介/注釋/指令/內(nèi)置對象/動作標簽/旦装,javabean林艘,el表達式獲取域?qū)ο笾械闹?/h1>
轉(zhuǎn)載請注明出處:http://www.reibang.com/p/924196cb497e

第一部分:jsp

1塞茅、jsp的簡介

1.1 sun公司用于動態(tài)網(wǎng)站的開發(fā)技術(shù)唠雕,servlet jsp

1.2 jsp:java server pages衷旅,運行在服務器端的頁面,jsp就是servlet,
最終jsp會被編譯成servlet

1.3 jsp在訪問時候編譯成servlet,會編譯到tomcat的work目錄里面

1.4 jsp組成:html+java代碼+jsp自身的一些東西

1.5 jsp嵌入java代碼有三種方式
(1)<%!   %>:定義的變量是成員變量
(2)<%=   %>:向頁面輸出內(nèi)容,代碼生成到servlet里面service方法里面
(3)<%    %>:寫java代碼腺兴,代碼生成到servlet里面service方法里面

2、jsp的注釋

2.1 html的注釋
(1)寫法 <!--  -->

2.2 java的注釋
(1)有三種注釋
(2)單行注釋  //
     多行注釋  /*  *.
     文檔注釋  /**  */
(3)把java注釋寫到java代碼

2.3 jsp自身的注釋
(1)<%--  --%>

2.4 代碼
    <!-- html的注釋 -->

    <!-- java的注釋 -->
    <%
    // 單行注釋
    /* 多行注釋 */
    /**
       文檔注釋
    */
     %>
     
     <!-- jsp自身的注釋  -->
     <%-- jsp自身的注釋 --%>

2.5 jsp里面三種注釋的作用范圍
(1)jsp自身的注釋存在jsp源代碼階段
(2)jsp編譯成servlet之后廉侧,html的注釋和java的注釋存在
(3)通過瀏覽器看到的內(nèi)容页响,只有html的注釋

3、jsp的指令

3.1 有三個指令 
(1)寫法: <%@ 指令名稱  屬性="屬性值"%>

3.2 page指令
(1)設(shè)置jsp頁面的一些信息
(2)寫法: <%@ page 屬性="屬性值"%>
(3)屬性
= language:jsp支持語言類型段誊,目前支持是java語言
= extends:jsp會編譯成servlet闰蚕,繼承的類,默認繼承的是HttpJspBase

= session:在jsp中是否可以直接使用session對象连舍,默認值true
== 代碼
    <!-- session屬性:在jsp中是否可以直接使用session對象  -->
    <%
        //向session域設(shè)置值
        //request.getSession().setAttribute("msg", "sessionValue");
        session.setAttribute("msg", "sessiontest");
    %>
    ${msg }

= import:在jsp中導入包
== 可以分開寫没陡,也可以寫在一起 <%@ page import="java.util.List,java.util.ArrayList"%>

= buffer:設(shè)置jsp對客戶端輸出的緩沖區(qū)的大小 8kb
= autoFlush:如果內(nèi)容超出緩沖區(qū)是否會正確輸出 默認值是true

= errorPage:如果jsp頁面出現(xiàn)異常,設(shè)置跳轉(zhuǎn)到錯誤頁面

= isErrorPage:在錯誤頁面中是否顯示錯誤信息
    java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
    if (exception != null) {
    response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }
== 使用exception對象 <%=exception.getMessage() %>

= contentType:設(shè)置打開的瀏覽器的編碼
= pageEncoding:jsp編譯成servlet索赏,使用編碼方式的設(shè)置盼玄,優(yōu)先權(quán)大于contentType

= isELIgnored:是否忽略el表達式,默認不忽略false潜腻;如果設(shè)置成true之后埃儿,把el表達式作為普通文本

重點掌握的屬性:session、import融涣、errorPage童番、contentType、pageEncoding

3.3 include指令
    (1)在一個頁面中包含其他頁面內(nèi)容
    (2)寫法: <%@ include 屬性="屬性值"%>
    (3)規(guī)范:
    第一:在被包含的頁面中暴心,直接寫內(nèi)容
    第二:被包含的頁面不能使用變量傳遞
    第三:包含的頁面路徑后面不能加參數(shù)

    (4)include包含也稱為靜態(tài)包含
    多個jsp頁面妓盲,最終會編譯成幾個servlet杂拨?
    多個jsp頁面专普,最終編譯成一個servlet

3.4 taglib指令
    (1)經(jīng)常和jstl標簽庫一起使用,替代頁面中的<%%>
    (2)寫法:<%@ taglib uri="jstl標簽庫的路徑" prefix="jstl標簽庫的別名"%>

jsp中有幾個指令弹沽?
三個指令分別是什么檀夹?
三個指令分別可以做什么?

4策橘、jsp的內(nèi)置對象

4.1 在jsp中有9個內(nèi)置對象炸渡,在jsp不需要創(chuàng)建,可以使用的對象
request:相當于servlet里面的HttpServletRequest丽已,獲取請求的信息蚌堵,是一個域?qū)ο罂梢源嬷岛腿≈?response:相當于servlet里面HttpServletResponse,向頁面輸出內(nèi)容,把cookie回寫到瀏覽器
session:相當于servlet里面HttpSession吼畏,是一個域?qū)ο蟠嬷岛腿≈?config:相當于servlet里面ServletConfig督赤,獲取servlet名稱,獲取初始化參數(shù)
application:相當于servlet里面ServletContext泻蚊,是一個域?qū)ο蟠嬷岛腿≈刀闵啵@取web項目中文件

exception:page指令屬性isErrorPage,把這個屬性值設(shè)置成true之后性雄,才可以使用這個對象
    java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
    if (exception != null) {
      response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }

page:當前對象

out:輸出的對象
out和response.getWriter()使用的是不是一個對象
= out使用的是JspWriter
= response.getWriter()使用的是PrintWriter

= 現(xiàn)在分別使用out輸出和response.getWriter()輸出

= out的輸出機制:
== 會產(chǎn)生兩個緩沖區(qū)没卸,out緩沖區(qū)和response緩沖區(qū)
== out輸出會把內(nèi)容放到out緩沖區(qū),response輸出會把內(nèi)容放到response緩沖區(qū)
== out緩沖區(qū)不能直接向頁面輸出秒旋,把內(nèi)容先放到response緩沖區(qū)里面约计,通過response緩沖區(qū)才能向頁面輸出

pageContext:
(1)是一個域?qū)ο?= pageContext范圍是當前頁面,不能在servlet里面迁筛,只能使用在jsp中
= 向pageContext域里面設(shè)置值:setAttribute(java.lang.String name, java.lang.Object value)
= 從pageContext域里面獲取值:getAttribute(java.lang.String name) 
= 代碼
    <%
      //設(shè)置值
      pageContext.setAttribute("page", "pageValue");
    %>
    <!-- 從pageContext域里面獲取值 -->
    <%=pageContext.getAttribute("page") %>

= application病蛉、session、request瑰煎、pageContext

(2)向其他的域?qū)ο罄锩嬖O(shè)置值
= 使用傳統(tǒng)方式向四個域?qū)ο笤O(shè)置值
        <!-- 使用傳統(tǒng)方式向四個域?qū)ο罄锩嬖O(shè)置值 -->
    <%
        //向application里面設(shè)置值(servletContext)
        application.setAttribute("app", "appvalue");
        //向session里面設(shè)置值
        session.setAttribute("session", "sessionvalue");
        //向request里面設(shè)置值
        request.setAttribute("request", "requestvalue");
        //向pageContext里面設(shè)置值
        pageContext.setAttribute("page", "pagevalue");
    %>
    <%=application.getAttribute("app") %>
    <%=session.getAttribute("session") %>
    <%=request.getAttribute("request") %>
    <%=pageContext.getAttribute("page") %>

= 使用pageContext內(nèi)置對象向application铺然、session、request域里面設(shè)置
== 使用setAttribute(java.lang.String name, java.lang.Object value, int scope) 
== 有三個參數(shù):第一個參數(shù)是名稱酒甸;第二個參數(shù)設(shè)置的值魄健;第三個參數(shù)哪個域(PageContext里面的常量表示不同的域)
== 代碼
    <!-- 使用pageContext內(nèi)置對象向四個域?qū)ο罄锩嬖O(shè)置值 -->
    <%
        //向application
        pageContext.setAttribute("app100", "app100value", PageContext.APPLICATION_SCOPE);
        //向session
        pageContext.setAttribute("session100", "session100value", PageContext.SESSION_SCOPE);
        //向request
        pageContext.setAttribute("request100", "request100value", PageContext.REQUEST_SCOPE);
        //向pageContext
        pageContext.setAttribute("page100", "page100value", PageContext.PAGE_SCOPE);
    %>

(3)從其他的域?qū)ο罄锩娅@取值
= 獲取四個域?qū)ο罄锩娴闹担篻etAttribute(java.lang.String name, int scope) 
== 兩個參數(shù):第一個參數(shù)域名稱;第二個參數(shù)是哪個域(PageContext里面的常量表示不同的域)
= 代碼
    <!-- 使用pageContext內(nèi)置對象獲取四個域?qū)ο罄锩娴闹?-->
    <!-- 獲取application里面的值 -->
    <%=pageContext.getAttribute("app", PageContext.APPLICATION_SCOPE) %>
    <!-- 獲取session里面的值 -->
    <%=pageContext.getAttribute("session", PageContext.SESSION_SCOPE) %>
    <!-- 獲取request里面的值 -->
    <%=pageContext.getAttribute("request", PageContext.REQUEST_SCOPE) %>
    <!-- 獲取pageContext域里面的值 -->
    <%=pageContext.getAttribute("page",PageContext.PAGE_SCOPE) %>

(4)獲取到其他的八個內(nèi)置對象
= 代碼
    <!-- 使用pageContext內(nèi)置對象獲取其他八個內(nèi)置對象 -->
    <%
        //獲取request內(nèi)置對象
        pageContext.getRequest();

        //獲取response內(nèi)置對象
        pageContext.getResponse();

        //獲取session內(nèi)置對象
        pageContext.getSession();
        .......
    %>

(5)findAttribute(java.lang.String name)方法的使用
= 分別向四個域?qū)ο罄锩嬖O(shè)置值插勤,名稱相同
= 獲取到域范圍最小的里面的值
== <%=pageContext.findAttribute("test") %>

4.2 四個域?qū)ο?servletContext(application):范圍是整個web項目
session:范圍是一次會話
request:范圍是一次請求
pageContext:范圍是當前頁面

4.3 在jsp中有幾個內(nèi)置對象沽瘦?
    jsp中九個內(nèi)置對象分別是什么?
    jsp中九個內(nèi)置對象分別做什么农尖?
    out內(nèi)置對象的輸出機制析恋?
    pageContext內(nèi)置對象的四個用途?

5盛卡、jsp的動作標簽

5.1 什么是動作標簽助隧,在jsp使用動作標簽可以完成功能

5.2 寫法: 在jsp中使用 <jsp:動作標簽名稱 屬性="屬性值"></jsp:動作標簽名稱>

5.3 常用的動作標簽
(1)<jsp:forward> :轉(zhuǎn)發(fā)
= <jsp:forward page="/forward/hello.jsp"></jsp:forward>

(2)<jsp:include> :頁面包含(動態(tài)包含)
= <jsp:include page="head.jsp"></jsp:include>
= 有多個jsp文件,最終會編譯成幾個servlet滑沧?
== 多個jsp文件會編譯成多個servlet

(3)<jsp:param>   :傳遞參數(shù)
= 在帶路徑的動作標簽里面使用
= 代碼
    <jsp:forward page="/forward/hello.jsp">
    <jsp:param value="aaa100" name="id11"></jsp:param>
    </jsp:forward>

5.4 下面的三個動作標簽用于操作javabean
(4)<jsp:useBean>
(5)<jsp:setProperty>
(6)<jsp:getProperty>

第二部分:javabean

1并村、什么是javabean

1.1 javabean就是一個java類,遵循一定書寫規(guī)范
第一個規(guī)范:在javabean里面有一個公開的沒有參數(shù)的構(gòu)造方法
第二個規(guī)范:在javabean里面屬性是私有的
第三個規(guī)范:在javabean里面私有的屬性通過公開的方法暴露出來

(1)代碼
    //私有的屬性
    private String id;
    private String username;
    private String password;
    
    //公開方法暴露私有的屬性
    public String getId() {
        return id;
    }
    ......

1.2 javabean主要的用途是 封裝數(shù)據(jù)
(1)使用set方法設(shè)置值
(2)使用get方法獲取值

2滓技、封裝數(shù)據(jù)到javabean

2.0 創(chuàng)建jsp頁面哩牍,在頁面中寫表單,提交到servlet中令漂,在servlet進行數(shù)據(jù)封裝到javabean的操作

2.1 使用傳統(tǒng)方式進行封裝
(1)實現(xiàn)的步驟
 * 1膝昆、得到表單提交的數(shù)據(jù)
 * 2丸边、創(chuàng)建User的對象
 * 3、使用user里面的set方法進行封裝
(2)代碼
    //獲取表單提交的數(shù)據(jù)
    //處理中文亂碼問題
    request.setCharacterEncoding("utf-8");
    String id = request.getParameter("id");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //創(chuàng)建user對象
    User user = new User();
    //使用user里面的set方法進行封裝
    user.setId(id);
    user.setUsername(username);
    user.setPassword(password);     
    System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());

2.2 使用jsp的動作標簽進行封裝
(0)表單輸入項里面的 name屬性值 和 javabean里面的屬性值一樣
(1)使用到jsp中三個動作標簽
第一個:<jsp:useBean> :設(shè)置要封裝數(shù)據(jù)到的是哪一個javabean
第二個:<jsp:setProperty>:向哪個屬性里面設(shè)置值
第三個:<jsp:getProperty>:從哪個屬性里面或者值

(2)代碼
    <!-- 使用動作標簽封裝數(shù)據(jù)到javabean -->
    <!-- 創(chuàng)建封裝的javabean的對象 -->
    <jsp:useBean id="user" class="com.mythmayor.bean.User"></jsp:useBean>

    <!-- 設(shè)置值到javabean里面 -->
    <%--     <jsp:setProperty property="id" name="user"></jsp:setProperty>
    <jsp:setProperty property="username" name="user"></jsp:setProperty>
    <jsp:setProperty property="password" name="user"></jsp:setProperty> --%>

    <!-- 設(shè)置值到javabean的簡寫的方式 -->
    <!-- 表單輸入項里面的 name屬性值 和 javabean里面的屬性值一樣 -->
    <jsp:setProperty property="*" name="user"></jsp:setProperty>

    <!-- 獲取javabean里面值荚孵,顯示到頁面上 -->
    <jsp:getProperty property="id" name="user"></jsp:getProperty>
    <jsp:getProperty property="username" name="user"></jsp:getProperty>
    <jsp:getProperty property="password" name="user"></jsp:getProperty>

2.3 使用beanutils框架進行封裝
(1)beanutils框架是apache組織開發(fā)的原环,用于封裝數(shù)據(jù)到javabean的操作
(2)如果要想使用beanutils框架,首先導入jar包
(3)使用框架里面 BeanUtils類里面方法 populate(Object bean, Map properties) 
= 要求:表單輸入項的name的屬性值处窥,必須和javabean里面的屬性值一樣
= populate(Object bean, Map properties) 方法里面有兩個參數(shù)
== 第一個參數(shù)是封裝的javabean對象嘱吗;
== 第二個參數(shù)是要封裝數(shù)據(jù)的map集合(map結(jié)構(gòu)是key-value,key是屬性的名稱滔驾,value是值)
=== 在request里面方法getParameterMap()谒麦,返回map集合,key是表單輸入項name屬性的值哆致,value是輸入值
(4)代碼
    //創(chuàng)建user對象
    User user = new User();
    //進行封裝數(shù)據(jù)到javabean
    try {
        BeanUtils.populate(user, request.getParameterMap());
    } catch (Exception e) {
        e.printStackTrace();
    } 
    System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());

第三部分:el表達式

1绕德、使用el表達式獲取域?qū)ο罄锩娴闹?/h3>
(1)el表達式使用在jsp頁面中,不能在html中使用
(2)寫法: ${域?qū)ο竺Q}
(3)使用el表達式獲取四個域?qū)ο罄锩娴闹?= 代碼
    <!-- 向四個域?qū)ο罄锩嬖O(shè)置值 -->
    <%
    //向application里面設(shè)置
    application.setAttribute("test", "appvalue");
    //向session域里面設(shè)置值
    session.setAttribute("test", "sessionvalue");
    //向request域里面設(shè)置值
    request.setAttribute("test", "requestvalue");
    //向pageContext域里面設(shè)置值
    pageContext.setAttribute("test", "pagevalue");
     %>
     <!-- 使用el表達式獲取四個域?qū)ο罄锩娴闹?-->
     <!-- 獲取application里面的值 -->
     ${applicationScope.test }
     <!-- 獲取session里面的值 -->
     ${sessionScope.test }
     <!-- 獲取request里面的值 -->
     ${requestScope.test }
     <!-- 獲取pageContext里面的值 -->
     ${pageScope.test }

(4)如果使用el表達式獲取的名稱不存在摊阀,返回空字符串 ""耻蛇,不會出現(xiàn)空指針異常
     如果使用傳統(tǒng)方式getAttribute獲取名稱不存在,返回null胞此,容易出現(xiàn)空指針異常

(5)使用el表達式獲取域?qū)ο竺Q相同的臣咖,獲取的是域范圍最小的里面的值

2、使用el表達式獲取域?qū)ο罄锩鏀?shù)組漱牵、集合(list夺蛇、map)、對象屬性的值

(1)使用el表達式獲取域?qū)ο罄锩娴臄?shù)組的值
= 使用數(shù)組的下標得到里面的值,數(shù)組下標從0開始
= ${域?qū)ο竺Q[數(shù)組的下標] }
= 代碼
    <!-- 使用el表達式獲取域?qū)ο罄锩娴臄?shù)組的值 -->
    <%
        //創(chuàng)建數(shù)組
        String[] arr = {"lucy","mary","jack"};
        //把數(shù)組放到域?qū)ο罄锩?        request.setAttribute("arr100", arr);
    %>
    <!-- el表達式獲取值 -->
    <!-- 使用傳統(tǒng)方式:遍歷數(shù)組酣胀,根據(jù)數(shù)組的下標得到數(shù)組里面的值刁赦,數(shù)組下標從0開始 -->
    ${arr100[2] }

= 如果獲取的數(shù)組的下標不存在,返回是空字符串 ""


(2)使用el表達式獲取域?qū)ο罄锩鎙ist集合的值
= 使用list集合的下標獲取里面的值闻镶,list下標從0開始的
= ${域?qū)ο竺Q[list集合的下標]}
= 代碼
    <!-- 使用el表達式獲取域?qū)ο罄锩娴膌ist集合的值  -->
    <%
        //創(chuàng)建list集合
        List<String> list = new ArrayList<String>();
        //向list集合里面放數(shù)據(jù)
        list.add("AAAA");
        list.add("BBBB");
        list.add("CCCC");
        //把list集合放到域?qū)ο罄锩?        request.setAttribute("list100", list);
    %>
    <!-- el表達式獲取值 -->
    <!-- 使用傳統(tǒng)方式遍歷list甚脉,有四種方式 
        普通for:根據(jù)下標得到,下標從0開始
        迭代器
        增強for
        list迭代器
    -->
    ${list100[2] }
= 如果獲取list集合的下標不存在铆农,返回是空字符串 ""

= 向域?qū)ο罄锩娣舠et集合牺氨,使用el表達式不可以獲取域?qū)ο罄锩鎠et集合的值
== list和set的區(qū)別:list是有序的,set是無序的


(3)使用el表達式獲取域?qū)ο罄锩鎚ap集合的值
= 根據(jù)map的key名稱得到對應的value值
= 寫法:${域名稱.key名稱}
= 另外寫法:${域名稱["key名稱"]}
= 代碼
    <!-- 使用el表達式獲取域?qū)ο罄锩鎚ap集合的值 -->
    <%
    //創(chuàng)建map集合
    Map<String,String> map = new HashMap<String,String>();
    map.put("aa", "AA");
    map.put("bb", "BB");
    map.put("cc", "CC");
    //把map集合放到域?qū)ο罄锩?    request.setAttribute("map100", map);
     %>
     <!-- el表達式獲取值 -->
     <!-- 使用傳統(tǒng)方式遍歷map顿涣,有兩種方式
    第一種:得到所有的key波闹,根據(jù)key得到value
    第二種:得到key-value關(guān)系
      -->
     ${map100.aa }
= 如果key的名稱不存在酝豪,返回是空字符串 ""

= 如果map集合的key的類型是int類型涛碑,使用el表達式不能獲取里面的值,報錯


(4)使用el表達式獲取域?qū)ο罄锩娴膶ο蟮膶傩灾?= 使用名稱.對象里面的屬性的名稱得到值
= ${域?qū)ο竺Q.屬性的名稱}
= 代碼
    <!-- 使用el表達式獲取域?qū)ο罄锩鎸ο蟮膶傩缘闹?-->
    <%
    //創(chuàng)建對象
    User user = new User();
    user.setUsername("東方不敗");
    user.setPassword("999");
    //把user對象放到域?qū)ο罄锩?    request.setAttribute("user100", user);
     %>
     <!-- el表達式獲取值 -->
     ${user100.username }
     <br/>
     ${user100.password }
= 如果獲取的域?qū)ο罄锩娴膶ο蟮膶傩悦Q不存在孵淘,報錯

3蒲障、el表達式的其他操作

3.1 運算的操作
(1)算術(shù)的運算 + - ......
(2)關(guān)系的運算 < > <= >=.....
(3)邏輯的運算 && ||....

3.2 empty運算符
(1)判斷對象是否為空
= ${user == null}
= ${empty user}

= ${user != null}
= ${not empty user}

3.3 三元表達式
(1)${user != null ? user.name : ""}
= 如果user對象不為空,獲取user的name值,否則返回空字符串
= ${ not empty user ? user.name : ""}

3.4 在el表達式中有11個隱含對象
(1)pageContext隱含對象:對應于jsp中pageContext內(nèi)置對象揉阎,獲取其他的八個內(nèi)置對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末庄撮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毙籽,更是在濱河造成了極大的恐慌洞斯,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑赡,死亡現(xiàn)場離奇詭異烙如,居然都是意外死亡,警方通過查閱死者的電腦和手機毅否,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門亚铁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人螟加,你說我怎么就攤上這事徘溢。” “怎么了捆探?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵然爆,是天一觀的道長。 經(jīng)常有香客問我黍图,道長施蜜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任雌隅,我火速辦了婚禮翻默,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恰起。我一直安慰自己修械,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布检盼。 她就那樣靜靜地躺著肯污,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吨枉。 梳的紋絲不亂的頭發(fā)上蹦渣,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音貌亭,去河邊找鬼柬唯。 笑死,一個胖子當著我的面吹牛圃庭,可吹牛的內(nèi)容都是我干的锄奢。 我是一名探鬼主播失晴,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拘央!你這毒婦竟也來了涂屁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤灰伟,失蹤者是張志新(化名)和其女友劉穎拆又,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栏账,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡遏乔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了发笔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盟萨。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖了讨,靈堂內(nèi)的尸體忽然破棺而出捻激,到底是詐尸還是另有隱情,我是刑警寧澤前计,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布胞谭,位于F島的核電站,受9級特大地震影響男杈,放射性物質(zhì)發(fā)生泄漏丈屹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一伶棒、第九天 我趴在偏房一處隱蔽的房頂上張望旺垒。 院中可真熱鬧,春花似錦肤无、人聲如沸先蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竞漾。三九已至,卻和暖如春窥翩,著一層夾襖步出監(jiān)牢的瞬間业岁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工寇蚊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笔时,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓幔荒,卻偏偏與公主長得像糊闽,于是被迫代替她去往敵國和親梳玫。 傳聞我的和親對象是個殘疾皇子爹梁,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344