搭建SSM框架

  • 本SSM框架是用eclipse搭建,SSM=Spring+SpringMVC+Mybaties,打包工具使用的是Maven,本教程会指导如何搭建SSM框架,一个各种配置文件的意义以及配置方式。

1. 创建maven项目,如下所示

1.第一步


image.png

2.第二步


image.png

3.第三步
image.png

2. 修改工程添加web.xml文件

  • 因为按照上述方式创建的项目是没有web.xml文件的,所以使用以下方法为项目创建web.xml文件。
    1.选择该项目右击>Properties----->Project Facts------>将Dynamic Web Service 2.5勾去掉(是否是2.5是具体的版本决定的)步骤二取消勾选后先点保存再将其勾选上,否则3不会出现
    image.png

    2.为web.xml选择保存地址,如步骤四中所示,web.xml一般放置在src/main/webapp目录下,记得一定要勾选5
    image.png

3. 为项目配置maven工程

  • maven作为项目管理工具得到了广泛的应用,官方下载地址:http://maven.apache.org/download.cgi
    image.png
  • 下载下来的是免安装的包,只需要解压进行配置便可使用,具体操作如下进行描述

1.解压下载的安装包并放在一个特定的目录,例如我windows的存放路径为:“E:\apache-maven-3.3.9”

  • 右击我的电脑,新建系统变量 MAVEN_HOME,变量的值为 (E:\apache-maven-3.3.9
  • 编辑变量path,在最前面加上(%MAVEN_HOME%\bin;
  • 在dos命令下测试是否安装好,输入(mvn -v)或者(mvn -version),看是否如如下图所示信息出现,如有,则表示安装好
    image.png

    2.修改安装Mavensettings配置文件,文件位置:* E:\apache-maven-3.3.9\conf* ,这个配置文件是有关于你的.m2的文件位置(此目录主要用来放置maven项目依赖的jar包),此时我在settings文件最下面加入这样一句话(<localRepository>D:/m2/repository</localRepository>),这句话指本地maven仓库的地址在D盘的根目录的.m2文件夹下。改完记得保存。如下图所示:
    image.png

    3.修改maven原来的国外中央仓库为国内的阿里云仓库,加快依赖包的下载速度,具体修改位置和改成什么样子如下图所示:
    修改前
    image.png

    **修改后
    image.png
  1. 打开eclipse,选择windows--->preferences,找到Maven,修改默认的Maven插件
    image.png
  • 点击add,将之前解压的Maven添加进来
    image.png
  • 勾选刚刚添加进来的Maven
    image.png
  • 接着点击user Settings,将Maven里面的settings.xml文件添加进来
    image.png
  • 此时.m2文件的生成路径是在如图所示,其中这个路径已经在前面的setting.xml文件中配置过:
    image.png
  • .m2生成较慢,可以在网上下载一个放置到项目的目录,这样更快。但是不建议那么做,自己按照上述操作一遍也不难。

4. 配置pom.xml文件,引入项目依赖的jar

  • 项目依赖的 jar 包主要包括Spring+Spring MVC + Mybaties + web开发过程中一些常用的包,代码如下所示,都有详细的说明。
  • Maven仓库的地址为: http://mvnrepository.com/在仓库中选择需要下载的Jar包,然后点击复制,以下为一个实例,例如下载Spring-mvc的依赖jar包。
    image.png

    点进步骤2,如下所示:
    image.png

    点击依赖复制:
    image.png

以下为pom.xml中的文件详情,每一个依赖包有何作用已有备注。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.atguigu</groupId>
  <artifactId>ssm-crud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  
  <dependencies>
        <!-- 引入项目依赖的jar包 --> 
        <!-- springMVC、Spring -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    
    <!-- Spring-JDBC -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
            
    <!-- Spring面向切面 编程-->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <!-- spring 测试 -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    
    <!-- 分页插件 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.0.1</version>
    </dependency>



    <!-- Mybaties相关的Jar包 -->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.2</version>
    </dependency>
    
    <!-- Mybaties逆向工程的JAR包 -->
    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.5</version>
    </dependency>
    
    
    <!-- 返回json字符串的 支持 -->
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.8</version>
    </dependency>
    
    <!-- Mybatis整合Spring的适配包 -->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>
    
    
    
    
    <!-- 数据库连接池、驱动 -->
    <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1</version>
    </dependency>
    
    
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <!--  <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
    -->
        
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.30</version>
    </dependency>
        
    
    <!--jstl,server-api,junit  -->
    <!-- https://mvnrepository.com/artifact/jstl/jstl -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <!-- tomcat中也有servlet-api包,会发生了冲突 解决方法:添加<scope>provided</scope>,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat的时候,就不会冲突了 -->
        <scope>provided</scope><!-- 告诉服务器已经提供 -->
    </dependency>

    
    <!-- junit -->
    <!-- https://mvnrepository.com/artifact/junit/junit -->   
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
    </dependencies>
</project>

5. 配置文件

  • 配置文件主要有以下几种

1 web项目------->web.xmlweb项目在启动时需要加载很多东西,包括监听器、过滤器、Servlet等

2 Spring ------>applicationContext.xml 主要描述了Spring相关配置信息,包括自动扫描Spring的注解类,引入数据源,创建创建SqlSessionFactory,装配DAO,配置Spring事物,AOP等

3 SpringMVC ---->springmvc-servlet.xml 主要描述了Spring MVC相关配置信息,包括配置控制器,即扫描controller所在的包(故在spring扫描的时候一般不扫描controller包),还有视图解析器、拦截器、映射器和适配器等等

4 Mybatis ---->mybatis-config.xml 主要描述了Mybaties的配置信息

5 数据库 ---->dbconfig.properties 主要描述了数据库的连接池、数据库名、用户名、密码等等,最主要的目的是为了开发过程的方便


  • 说明:
    1上述只是指出一个web项目中有哪些基本配置文件,在最后的项目中最后不一定是这么写的,比如在最后项目的配置中有可能将SpringMybatis的配置文件合到一起,变成spring-mybatis.xml,上述只是一个例子,本项目的搭建也是按照上述例子来的,基于尽量将配置文件分开写清楚一点的原则,当然当自己的自己水平达到一定的深度了以后可以将能合并的文件合并起来,简化配置文件也是推崇的。

配置文件内容如下所示:

1.web.xml配置文件:

  • 启动java web程序的时候,java web会读取配置文件web.xml;读取<listener>和<context-param>两个节点,随后创建servletContext(servlet上下文),并且web中是所有部分共享这个上下文;容器将<context-param>转换为键值对,并交给servletContext,web.xml 的加载顺序是:ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
 <!--是描述性的文字,可以去掉,cloudGateway指本web项目的名字-->
  <display-name>cloudGateway</display-name>
  
  <!--以下配置的加载顺序:先 ServletContext >> context-param >> listener >> filter >> servlet >>  spring-->
  
  
  <!--------------------------------- 1.全局范围内环境参数初始化---------------------------->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext.xml</param-value>
  </context-param>
  
  
  
  <!---------------------------------- 2.监听器的配置 --------------------------------------->
  <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
  <!-- 防止Spring内存溢出监听器  -->  
  <listener>  
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  </listener> 
  
  
  
  <!----------------------------------- 3.过滤器的配置 -------------------------------------->
  <!-- 例:编码过滤器 -->
  <filter>  <!-- 用来声明filter的相关设定,过滤器可以截取和修改一个Servlet或JSP页面的请求或从一个Servlet或JSP页面发出的响应-->  
    <filter-name>CharacterEncodingFilter</filter-name>  <!--指定filter的名字-->
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <!--定义filter的类的名称-->
    <async-supported>true</async-supported>     <!--设置是否启用异步支持-->
    <init-param><!--用来定义参数,若在Servlet可以使用下列方法来获得:Stringparam_name=getServletContext().getInitParamter("param-name里面的值");-->  
      <param-name>encoding</param-name>   <!--参数名称-->
      <param-value>UTF-8</param-value>    <!--参数值-->
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>   <!--用来定义filter所对应的URL-->
    <filter-name>CharacterEncodingFilter</filter-name>   <!--指定对应filter的名字-->
    <url-pattern>/*</url-pattern>     <!--指定filter所对应的URL,/*表示所有的url--> 
  </filter-mapping>
  
  
 <!------------------------------------------- 4.servlet配置 ------------------------------------------------------------>
    <servlet>  <!-- 用来申明一个servlet数据 -->
    <servlet-name>springmvc</servlet-name> <!-- 指定servlet的名称 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--指定servlet的类名称,这里配置了前端控制器-->
    <init-param><!--用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数 -->
      <param-name>contextConfigLocation</param-name>  <!--参数名称-->
      <param-value>classpath:spring/springmvc-servlet.xml</param-value>  <!--参数值-->
    </init-param>
    <load-on-startup>1</load-on-startup><!--当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.-->
  </servlet>
  
  <servlet-mapping><!--用来定义servlet所对应的URL--> 
    <servlet-name>default</servlet-name><!--指定servlet的名称-->
    <url-pattern>/static/*</url-pattern><!--指定servlet所对应的URL-->
  </servlet-mapping>
  
    <servlet-mapping><!--用来定义servlet所对应的URL--> 
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
 
  <!-----------------------------------------------其他配置------------------------------------------------->
  <!-----会话超时配置(单位为分钟)---->  
  <session-config><!--如果某个会话在一定时间未被访问,则服务器可以扔掉以节约内存-->  
      <session-timeout>120</session-timeout>  
  </session-config>  
  
  
  <!-----MIME类型配置---->  
  <mime-mapping><!--设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开-->  
      <extension>*.ppt</extension>            <!--扩展名名称-->  
      <mime-type>application/mspowerpoint</mime-type>         <!--MIME格式-->  
  </mime-mapping>  

 
  <!-- 欢迎页面,这个不多说 -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 

<!-- 配置错误页面 -->
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/views/errors/404.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/WEB-INF/views/errors/error.jsp</location>
  </error-page>
 
</web-app>


2. applicationContext.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:p="http://www.springframework.org/schema/p"  
       xmlns:tx="http://www.springframework.org/schema/tx"  
       xmlns:aop="http://www.springframework.org/schema/aop"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans.xsd  
       http://www.springframework.org/schema/tx  
       http://www.springframework.org/schema/tx/spring-tx.xsd  
       http://www.springframework.org/schema/aop  
       http://www.springframework.org/schema/aop/spring-aop.xsd  
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context.xsd"  
       default-init-method="init">
       
    <!-- 1.自动扫描 将标注Spring注解的类自动转化成bean-->   
    <context:component-scan base-package="com.macrosan.cloudGateway">
    <!-- 不扫描controller,其他都扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
    <!-- 2.开启基于AOP功能,AOP如果用不到,可以不写 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    
    
    <!-- 3.数据源 ,事务控制 -->                   
    <!-- 引入jdbc配置文件 -->  
    <context:property-placeholder location="classpath:jdbc.properties" order= "1" ignore-unresolvable="true"/>
      <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="testConnectionOnCheckin" value="false"/>
        <property name="testConnectionOnCheckout" value="true"/>
    </bean>  
    
   
    <!-- 4.配置和MyBatis的整合,创建SqlSessionFactory,同时指定数据源 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">      
        <!-- 注入数据源 -->
        <property name="dataSource" ref="pooledDataSource"></property>
        <!-- 指定mybatis全局配置文件位置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <!-- 配置sql映射文件所在位置  注意:默认与mapper类位置相同   -->  
        <property name="mapperLocations" value="classpath:com/macrosan/cloudGateway/business/daoMapper/*.xml" />  
    </bean>  
    
    <!-- 5.装配dao接口,Mapper接口所在包名,Spring会自动查找其下的Mapper -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.macrosan.cloudGateway.business.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> 
        <!-- 默认情况下会自动注入id=sqlSessionFactory的bean,也可以按上述方式指定sqlSessionFactory -->  
    </bean> 
     
     
    <!-- 6.配置一个可以执行批量的sqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
        <!-- 执行类型批量 -->
        <constructor-arg name="executorType" value="BATCH"></constructor-arg>
    </bean>
   
    <!-- 7.配置事务管理器,全注解声明式事务  -->  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
       <!-- 控制住事务源 -->
        <property name="dataSource" ref="pooledDataSource"></property> 
    </bean> 
    
    <!--对@Transactional这个注解进行的驱动,这是基于注解的方式使用事务配置声明,这样在具体应用中可以指定对哪些方法使用事务-->
    <tx:annotation-driven transaction-manager="transactionManager" />

</beans>

3. springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop   
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
        http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-3.0.xsd   
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   
        http://www.springframework.org/schema/tx   
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" >
            

    <!-- 1.扫描controller层,使spring mvc认为该包下使用了@Controller注解的类是控制器 -->
    <context:component-scan base-package="com.macrosan.cloudGateway.business.controller" />
    <!-- 扫描service层 -->

    <!-- 2.视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".html"></property>
    </bean>
    
    <!-- 3.配置映射器和适配器,能支持springMVC更高级的一些功能,JSR303校验,快捷的ajax..映射动态请求  -->
    <mvc:annotation-driven />
    
    <!-- 4.启用默认Servlet,将springmvc不能处理的请求交给tomcat-->
    <mvc:default-servlet-handler/>
    
    <!-- 5.拦截器的配置 -->
    <mvc:interceptors>
       <bean class="com.macrosan.cloudGateway.business.core.LoginInterceptor" />
    </mvc:interceptors>
    
    <!-- 6. 静态资源处理 -->
    <mvc:resources mapping="/**" location="/"/>
    
    
</beans>

4.mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
    <settings>
        <!-- 开启驼峰命名规则 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings> 
    
    <!-- 类型别名 -->
    <typeAliases>
        <package name="com.macrosan.bean"/>
    </typeAliases>
  
  <!-- 分页插件 -->
  <plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 分页合理化 -->
        <property name="reasonable" value="true"/>
    </plugin>       
  </plugins>
  
  
  
</configuration>

5 dbconfig.properties

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

推荐阅读更多精彩内容