未分类

静态网页

动态网页CGI  asp(html+JavaScript+com组件) PHP 

jsp(html+java片段+jsp语法+js)在servlet基础上发展的

B/S开发模式(browser/server)浏览器→服务器

C/S开发模式(client/server)客户端→服务器


html:行内元素 独占一行      块级元素

target=  _blank新建选项卡打开 _self当前选项卡打开

在frameset中,可以给target指定一个frame的name

display改变元素的样式


CSS层叠样式表

常用的选择器:

标签选择器父子选择器class类选择器(.) ID选择器(以#开头) 通配符选择器(*)

浮动float


JavaScript:解释性语言  是基于对象和事件驱动

广泛用于客户端的web开发的脚本语言,常给html添加动态功能

没有class(类)

var Fish = new Fish()当做类使用

数字类型布尔类型字符串类型(使用引号)

false 0 “”null undefined NaN都表示false。

null:变量的值为null/赋值为null

undefined:变量没有值/声明了变量,没有赋值

算术运算:

推断:refer

当if遇到||运算时 从前向后运算  遇到真的时候返回真的对象 当没有真 就返回最后一个为假的对象


var input = window.prompt();

window.alert();

document.write();

强转parseInt();变整型


JS中,函数/方法定义的时候,形参不需要var


数组:foreach: Java中遍历的是元素  JS中是下标 用in替代:

数组中的键值对只能遍历出来


函数:自定义函数系统函数

调函数只看函数名

function函数调用时可直接赋参数 

用arguments可以for循环出赋予的参数(arguments里存放了通过参数传来的参数值)


重载:无重载后面的会覆盖前面的

定义类(原型对象)和对象:

没有类的概念,类怎么来?创建对象实例可通过构造函数实现

function Car(){}

var c = new Car();

1、①动态绑定属性 c.name=””;②动态绑定方法 c.run = function(){}

2、有参构造方法中 动态绑定 用 this.替换上面的c.  不用this用var 是私有的

即在JS中 被this修饰的都是公开的 否则为私有

静态绑定Car.prototype.属性或方法 所有对象都拥有了这些属性和方法


Array直接new 直接放


JSON一种简洁的方式创建一个对象 var car = {:,:,}

①var str = '{"name":"huangxiaojian","age":"23"}'

JSON.parse(str)    age: "23" name: "huangxiaojian"

②var a = {a:1,b:2}   

JSON.stringify(a)    "{"a":1,"b":2}"



封装

继承:①使用对象冒充的方式实现继承  多继承 多重继承

this.xx =父名;

this.xx();

  ②原型链:上面所示的静态绑定。

多态无态的


JS内建对象

Object对象.constructor,返回代码    Math    Date  String  Array  Boolean  Number


系统函数

URL:统一资源定位

URI:统一资源标识符

都能表示网络资源但前者可以获取资源

eval();


JS事件驱动机制

document.getElementById(“id号”);

-c→ C


DOM

删除p标签:先获取父节点 再删除子节点

onsubmit询问是否提交表单

window.setInterval(“方法”,毫秒)  每隔多少毫秒 调用一次方法

open(“网站”, “_self”)不新建的打开网站

span.innerText



History列表

Location对象

Navigator对象

Screen对象

Event对象  事件

Document对象常用函数

document.createElement(“a”)创建一个标签


了解:Tomcat WebSphere WebLogic

Tomcat:入门级服务器,支持JSP Servlet

WebSphere: IBM专业级应用服务器,支持JSP Servlet 数据库连接池管理 EJB容器等

WebLogic:世界第一应用服务器,支持数据库连接池 EJB容器 集群管理


Servlet与CGI(通用网关接口)的区别

Servlet是通过多线程的方法运行service的,一个实例服务于多个请求,实例一般不销毁。CGI是每次请求都会创建新的进程,服务完后就销毁


接收、处理、响应

Servlet:

servlet在Web服务器的运行过程:装入→→初始化→→调用→→销毁

主要体现在:init()service()destory()

加载和实例化:Servlet容器负责加载和实例化Servlet

1、初始化:init()  读取配置信息、初始化参数等,在Servlet生命周期中只执行一次。

2、调用:service()  ServletRequest请求对象和ServletResponse响应对象, 此外还可调用doGet()、doPost()方法来处理请求。

3、销毁:destory()  在Servlet生命周期中只执行一次,结束时。


配置:

1、创建一个java工程

2、搭建javaweb框架

①在项目里面创建一个文件夹webroot

②在webroot中创建WEB-INF的文件夹

③在WEB-INF中创建classes和lib

3、修改项目的编译路径(把以前编译到bin目录改为WEB-INF下的classes目录)

右键工程文件,build-path,进去选source 选择classes,classes会消失

4、从服务器的根路径中找到lib,然后再从lib中找到servlet-api.jar

拷贝到WEB-INF下的lib中,然后在该文件上右键 选择build-path →add to build

5、从服务器根目录中找到webapps,打开找到root,在找到WEB-INF 把其中的web.xml拷贝到WEB-INF目录下。

6、在web.xml文件夹中配置外界访问的servlet,添加如下代码:

thing//thing链接下面的thing

/nice//nice是将来浏览器访问的字符串

thing

ServletText//ServletText是src下的全限定名


7、告诉服务器要到指定的目录去自动部署项目,找到服务器根目录中的conf中的server.xml

在Host标签之间添加如下代码:

path中放的是上下文路径 可忽略 

8、访问:http://ip:port/上下文路径/资源名称(就是是哪个面的nice)

//给用户访问资源提供接口

<servlet-name>ming

/search 可以直接写多个

//根据名称找到具体的服务类



HTTPServlet类:专门处理HTML表单(FROM),不必重写父类的init()方法和destory()方法。

缺省的service()方法可以调用与HTTP请求方式相应的doXxx()功能。

get方法:数据量小、没有安全性考虑  post方法:数据量大 有安全放面考虑


当服务器调用Servlet的service() doGet() doPost()方法时,均需要请求和响应对象作为参数。


GET POST请求参数的乱码:字符流两次修改编码 字节流一次

响应页面的乱码

一:请求参数的乱码

GET:根据本来的编码(ISO-8859-1)获取其字节数组,再把字节数组按照我们的编码(UTF-8)来编码

  POST:同样拥有GET的方式; 设置request.setCharactorEncoding("你的编码");

二:响应页面的乱码

GET POST:

1):字节流

①:我们自己要用给浏览器传输什么编码的数据(如:utf-8)

②:告诉浏览器使用什么编码解析数据(要和上面的utf-8一致)

2):字符流

①:我们自己要用给浏览器传输什么编码的数据(如:utf-8)


action:填写提交的URI


Cookie:一种用于保留用户操作信息的客户端技术

步骤:new一个cookie ,添加到响应里去           

set-cookie和cookie 原理

更新cookie

cookie.setPath(“/”);  cookie.setDomain();


编码URLEncoder

解码URLDecoder


Session:一种用于保留用户操作信息的服务端技术

服务器创建session:服务器把创建好的一个对象的地址映射成id,把默认id通过cookie传递给浏览器

session不传输,在服务器内存中开辟空间存放

步骤:请求获取session,设置session

只需要创建并设置值即可,不需要添加响应中,会自动添加session对象的地址映射id到本次请求的响应头中

销毁session和移除session中的属性


获取session看其是否有值来判断需不需要登录


Servlet页面间对象传递的方式:request、cookie、session、application


注解

1、@webServlet(“/annotation”)  相当于

多参数:@webServlet(

urlPatterns={“/annotation1”,“/annotation2”}, initParams=@webinitParams{name = ”users”, value = “gyvsxy”}

)

2、在web.xml中将metadata-complete改为false,意味不忽略注解


ServletContext全局应用程序: 全局只有一个Servlet对象。

web.xml中设置 


ServletContext和ServletConfig对比:前者全局应用对象,后者表示Servlet的初始化参数。


URL重定向 :在服务端让浏览器重新跳到指定的页面

用法:resp.sendRedirect(url);注意:  /  当前路径

重定向不能访问WEB-INF下的文件.


请求转发:浏览器请求一个Servlet里的转发给另一个Servlet

用法:req.getRequestDispatcher("url").forward(req, resp);


URL重定向和请求转发:前者改变地址栏地址,可跨域;后者不变,可以访问WEB-INF下的文件,不可跨域


Servlet三大作用域对象:共享数据

ServletContext

Httpsession

HTTPServletRequest

作用域越来越小


JSP:

xx.jsp→在web.xml找jsp对应的处理类→JSPservlet源程序→xx_jsp.java→xx_jsp.class→返回


xx_jsp→HttpJspBase→HttpServlet(都是继承)


JSP注释是隐式注释和HTML注释不同的是:前者不会被发送到客户端

JSP的java代码片段和java代码表达式=和全局代码片段!

九大内置对象四大作用域


request:客户端请求,包含GET/POST请求的参数。

response:传给客户端的响应

session:与用户请求相关的对象,用于保存该用户的信息,跟踪用户的操作状态。

application:Servlet中正在执行的内容,一直存在到服务器关闭。

out:用来传送响应的输出

pagecontext:管理网页的属性

config:取得服务器的配置信息

page:JSP页面本身

exception:针对错误页面,没有被捕捉的异常就会生成此对象


JSP、Servlet的异同:都可以加载成.class文件,JSP的本质就是一个Servlet,不同点:一个用于前端,一个用于后台


EL

语法:${}

作用:获取作用域中的共享数据

注:依次从pageContext,request,session,application(由小到大)

EL获取指定作用域:${requestScope.}

找不到返回空字符串与findAttribute的不同点

${param.key}对应getParameter


EL访问对象

注:属性(property)=字段(field)+getset方法

${对象.属性}


set/getAttribute设置获取作用域的值 findAttribute依次寻找

getParameter获取请求参数中的值


JSTL:JSP Standard Tag Library 即JSP标准标签库

作用:替代java的逻辑操作代码

用法:先导入taglib指令 

单条件判断

<% %>

多条件匹配

<% %>

循环

<%循环体%>${}

foreach

<% %>${}

格式化日期:

<%%>


分页

自定义(pageCount pageSize)


过滤器过滤请求

接口Filter

name

/* 或者/xxx/*



根据请求类型过滤



较好用函数:

JS:

confirm():如果用户点击确定按钮,则confirm()返回 true。如果点击取消按钮,则 confirm() 返回 false。



Struts2

基于MVC设计模式的轻量级JavaEE框架,本质上相当于一个Servlet(控制层)


原生mvc模式使用jsp+javabean+servlet来实现。jsp充当v,javabean充当m,servlet充当c。


作为控制器来建立模型和视图的数据交互

基于拦截器


运行原理:客户端发送请求经过核心过滤器,然后询问ActionMapper需要调用哪个Action,如果需要,核心过滤器会把请求交给ActionProxy代理,代理通过配置管理器加载Struts.xml文件,找需要调用的Action类,ActionProxy会创建Action类的实例,调用对应的方法,在调用之前依次调用所有配置的拦截器,执行完Action返回字符串,实例会根据字符串查Result,再经过所有配置的拦截器返回响应,响应经过核心过滤器返回给客户端。


DTD获取本地xml提示  需联网  如果没网需手动配置本地DTD


Struts2配置常量(如编码集、扩展名、开发模式、动态方法调用)有三种方式:

①struts.xml中的②struts.properties中③web.xml的


###是properties的注释信息


核心组件:Action和拦截器


包配置:  name唯一  默认struts-default,这样该包中的action就具有了Struts2默认的拦截器等功能。  抽象包不能写action

包含配置:


实现Action控制类的三种方式:

①直接写类名(POJO)②继承ActionSupport③实现Action接口


配置Action:

不写method会根据反射执行execute方法

写方法调用方法


写action的三种方法:

直接写

通配符法: 1表示从第一个*开始  *→方法名

动态方法调用:常量配置里默认关闭动态方法调用


的name可用在form表单的action


下的 全局的

标签的type属性值默认是dispatcher,实际上就是转发


访问Servlet API

①ActionContext.getContext()  分别可用在request、application、session

②通过特定接口ServletRequestAware ServletResponseAware 等

③通过ServletActionContext访问


Action处理请求参数

①属性驱动:只需set        把表单的name作为属性 getset方法

②对象驱动  必须set和get    新建类

集合驱动

③实现模型驱动


ServletActionContext封装了以前的servlet


数据校验

重写validate方法中加

if(){this.addFielderror(键值)}

s标签 s:fielderror fieldname=””


避免重复提交


XML配置方式数据校验

XML名字:Action类名-validation.xml  与Action类在同一个包下


资源文件

①针对action类

与action在同一个包下

名称:ActionClassName.properties这个配置文件只对当前action有用

②针对包下的所有action    package.properties

this.getText

③struts.properties 全局


拦截器

自定义拦截器实现interceptor

需要在struts.xml中

在package中

//系统的


如果在中设置方法名 忽略拦截方法

通过配置的形式向拦截其中传递参数

param参数会在启动服务器时把其中的参数name通过对应的setter方法传递到拦截器中


设置默认拦截器只能有一个

下面的action都可以被拦截


给action单独用拦截器

在action中加


action之间的传递参数

redirect和chain


注解:单个@XXX(“”)多个@XXXS({@xx(“”),@xx(“”)})


JSON

{“key”:”value”,”key2”:”value2”}[{},{}]

JS中加入 $.ajax({})

不跳转页面请求数据


Listener监听器

实现HttpSessionListener  ServletContextListener  RequestListener等等

设置配置


防止表单重复提交

token字符串  每请求一次都会生成一个字符串 可放在 session、隐藏域


避免表单用户输入乱码

req.setCharacterEncoding(“”);


JavaEE三层:表现层、业务层、持久层


前端控制器:过滤器栈


值栈

用来管理请求数据

生命周期就是一次请求

由root和 Context组成


OGNL对象图形导航语言

替换EL的

Struts2用OGNL作为默认的表达式语言

OGNL是基于ValueStack数据结构


获取root中的数据

①对象.getRoot().push(值)

②对象.set(键值) 

③private String val=”123”;  public String getVal(){return val;}             

获取context中的数据

凡是写在context中的数据 前面要加#  便于维护

①对象.getContext().put(键值)

②context.put(键值)


校验

validate()对应

如果不通过就执行input如果通过 就执行execute的success


标签


国际化


上传下载

上传:①上传的表单以POST方式 ②提交需要指定编码为:multipart/from-data;


标签

不需要再去填写contextPath

多选框

取setAttribute的值


Hibernate

是一个面向对象的持久化框架

hibernate.cfg.xml

//连接数据库

true


采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。

采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭。

采用getCurrentSession()需要在Hibernate.cfg.xml配置文件中加入如下配置:

如果是本地事物,及JDBC一个数据库:

thread

如果是全局事物,及jta事物、多个数据库资源或事物资源:

jta



类和表的映射配置文件:

xx.hbm.xml

//id是类中的属性  column是表中的字段

//设置主键


Transaction对事物的封装


save方法的执行流程

1、新建一个configuration对象

2、利用方法configuration.configure()加载hibernate.cfg.xml

3、根据xml中的连接数据库的信息连接数据库,并配置相关的property属性

4、加载解析映射文件,把映射文件的信息保存在configuration对象中

5、根据config创建sessionfactory对象,并创建session对象

6、执行保存事件


saveOrUpdate()方法

persist()持久化  JPA规范里面的  与save()有点相同

merge()与update()有点相同


load()与get()  load()动态的新建一个类:

Student stu =(Student) session.load(Student.Class, 3);多态

load():延迟加载  load()方法返回的是一个代理(代理只有一个ID),只有等真正使用该对象属性的时候才会发出sql语句

如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException


一级缓存

缓存:提高效率


在hibernate.cfg.xml中的

#hibernate.hbm2ddl.auto none/create/create-drop/update/validate


mapping文件获取属性是反射:反射不关心访问权限


OID:对象中对应数据表的主键的属性

自然主键(使用对象本身的属性作为主键)代理主键(序号)

主键生成策略:

assigned:手动设置主键

uuid:hibernate帮忙生成的

increment:查最大id然后加1

identity:数据库需支持自增

native:使用数据库支持的生成主键方式


持久化对象的状态

有没有被管理有没有id数据库中有没有值

瞬时态

持久态

脱管态

提交之前,delete之后,数据处于计划删除


session管理对象的状态 事务负责提交数据操作


事务处理方式(当多个事务同时访问数据库中的相同数据)

悲观锁:在每次操作数据时,悲观的认为会有其他事务来操作同一数据。加锁(数据库层次)

乐观锁:认为许多事务同时操作同一数据的情况很少发生。数据版本标识锁定机制(非库层次)


对象的关系

依赖关系

关联关系

聚合关系

组合关系


关联关系:一对多多对一多对多

多对一:

在多中:设置一的私有属性

一对多:

set:

在一中:Set<>  = new HashSet<>();

在一的xml中

list:


反转操作:

在双向关联中,一方的中加入inverse=”true”可以反转维护关系,即此方放弃对另一端关系的维护,而由对方来维护关系


一对多多对一双向:

删除时注意set里的inverse为false 

cascade级联删除:save-update、delete、all、delete-orphan、all-delete-orphan


一对一:先保存xx


多对多:两个set

注意中间表的主键重复需要把一个主键设置为


组件映射



SQL

HQL

Criteria


分页

HQL不支持 limit关键字

query.setFirstResult()

query.setMaxResults()


位置占位符?

名称占位符:xxx


Collection


query.uniqueResult()返回个数


SELECT NEW LIST(XX,XX,XX) FROM

SELECT NEW MAP(XX,XX,XX) FROM


session.getNameQuery()

主要是为了一些经常使用,在类的映射文件中添加一个标签“query”,属性name来指这个NameQuery的名字,在XML的innerText中写HQL语句


Spring

面向接口编程解耦

IoC/DI控制反转  依赖注入

IoC控制反转:说的是创建对象实例的控制权从代码控制剥离到IoC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

IoC是目的,di是手段。IoC是指让生成类的方式由传统方式(new)反过来,既程序员不调用new,需要类的时候由框架注入(DI),是同一件不同层面的解读。


Bean:放在Spring容器中的对象

bean中的属性:

id: bean的全局唯一标识

lazy-init=”true/false”告诉容器,不要在容器启动的时候实例化bean


bean的作用域  scope=”” 

singleton单例模式对于无会话状态的bean(Dao、Service)来说是最理想的选择 

prototype原型类型,每次都会创建个新的对象 适合需要保持会话状态的bean(struts2的action)


bean的生命周期

singleton作用域下的bean的声明周期受spring容器的管理,

prototype作用域下的bean,容器只负责创建,管理交给客户端代码


bean里面的constructor-arg:可传入构造参数 index type ref value


bean里面的property 用于调用bean实例中的setter方法

name和value  name有对应的属性,不是随便写

name和ref  ref=”xx”:是把id为xx的bean传过来


在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象

bean的实例化方法:

1、构造器实例化  通过实现类的默认无参构造器对bean进行实例化  传统bean的配置方式

2、静态工厂方法生产bean  class属性为对应的工厂实现类  factory-method

3、实例工厂方法  建立工厂bean,再通过factory-bean建调用工厂bean的bean,再通过factory-method指定实例化bean的方法


AOP

所有事务从Dao剥离,放在service层

静态代理

动态代理:

①通过实现接口的方式  代理类是对dao实现类的增强

Handler implements invocationHandler      proxy.newProxyInstance

public Object invoke(Object proxy, Method method, Object[] args)

method.invoke(obj, args);

proxy:代理方法调用的代理实例

method:

②通过继承的方式Enhancer

cglib  javassist:代码生成的库


AOP的xml和注解Annotation

xml

Annotation: point连贯方法

AOP:在某些事情即将发生的时候做某些事


XML

解析方式:DOM解析:把整个XML文件加载进内存进行解析

SAX解析:通过流的形式一行行解析


xmlns:xmlnamespace


dtd和schema的后缀xsd


SpringMVC

分离了控制器,模型对象,分派器,处理程序对象角色


DispatcherServlet:前端控制器,用于接收请求。

HandlerMapping接口:用于处理请求的映射。

DefaultAnnotationHandlerMapping:HandlerMapping接口的实现,用于把一个URL映射到具体的Controller类上。

HandlerAdapter接口:用于处理请求的映射。

AnnotationMethodHandlerAdapter:HandlerAdapter接口的试下,用于把一个URL映射到对应Controller类的某个方法上。

ViewResolver接口:用于解析View。

InternalResourceViewResolver:ViewResolver接口的实现,用于把ModelAndView的逻辑视图名解析为具体的View。


加载优先级


在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean


MyBatis(非标准的ORM框架)基于JDBC

做数据持久化(其他三种:流JDBC Hibernate(Hibernate是标准的对象关系映射ORM))

标准的ORM框架:

实现:

连接数据库:SqlSessionFactoryBuilder Reader SqlSessionFactory SqlSession

xml:

xxxMapper.xml:domain的类的映射文件

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。

parameterType:在映射文件中通过parameterType指定输入 参数的类型  可省略

resultType:在映射文件中通过resultType指定输出结果的类型

#{}接收输入参数,类型可以是简单类型,pojo、hashmap

keyProperty keyColumn use




Apache Shiro

易使用的Java安全框架,进行认证、授权、加密和会话管理

web.xml配置shiroFilter(放在最上面) 

applicationContext-shiro.xml,对shiro进行配置

applicationContext.xml中引入该文件


JQuery EasyUI

实现CRUD DataGrid

使用的插件:

datagrid:向用户展示列表数据。

dialog:创建或编辑一条单一的用户信息。

form:用于提交表单数据。

messager:显示一些操作信息。


FormData

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.


进度条

基于multipartResolver多部解析器的上传进度条

①写一个进度条的实体类

②实现ProgressListener

③继承CommonsMultipartResolver

④在springmvc的xml中重新配置自己的解析器

⑤编写Controller

⑥开发jsp、js页面


JQuery

XMLHttpRequest对象的 onload 回调函数是在异步请求加载完成后所执行的函数,当JavaScript监测到请求的数据全部传输完成后就会触发该函数。而 open() 函数设置异步请求的 method、URL 和同步方式等参数,执行 open() 后再执行 send() 函数才开始向服务器发送请求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容