Javaweb MySQL 實(shí)現(xiàn)本地Android數(shù)據(jù)Api接口

Android Javaweb MySQL Tomcat 實(shí)現(xiàn)本地簡(jiǎn)易Api接口

需要配置兩個(gè)jar包 jackson-all-2.8.0.jar json解析和mysql 連接 mysql-connector-java-5.1.7-bin.jar 文末 云盤(pán)地址壓縮包包含。

使用Tomcat 本地服務(wù)疑苔,連接的是本地MYSQL 數(shù)據(jù)庫(kù)world 數(shù)據(jù)庫(kù) city表帽蝶,字段如圖:


image.png

創(chuàng)建city的實(shí)體類(lèi):

public class CityBeen {
    private String ID;
    private String Name;
    private String CountryCode;
    private String District;
    private String Population;
  //get set
 }

預(yù)期達(dá)到返回json格式,也就是包裝成json格式:

單個(gè)的

{
  "code": "ok",
  "msg": "訪(fǎng)問(wèn)成功",
  "time": 1510989490351,
  "object": {
        "id": "1",
        "name": "Kabul",
        "population": "1780000",
        "countryCode": "AFG",
        "district": "Kabol"
    }
}

列表

{
    "code": "ok",
    "msg": "訪(fǎng)問(wèn)成功",
    "time": 1511175554098,
    "items": [
      { … },
      { … },
      { … },
      ]
}

這樣子 可以找出其中的共同部分 就是code msg time ,可以據(jù)共同部分此做一個(gè)實(shí)體類(lèi)的基類(lèi)第队,包含code狀態(tài)碼 附加的msg以及時(shí)間戳 :

  public class AbstractJsonObject {

    private String code;  

    private String msg;  

    private Long time = new Date().getTime();  
    
   //省去get.set方法

}

然后單個(gè)、列表返回對(duì)象刨秆,可以繼承AbstractJsonObject 類(lèi)凳谦。

單個(gè)的SingleObject

  public class SingleObject extends AbstractJsonObject{
     
        private Object object;    
         // get set 方法
  }

列表的 ListObject

public class ListObject extends AbstractJsonObject {
 // 列表對(duì)象  
    private List<?> items;  

    public List<?> getItems() {  
        return items;  
    }  

    public void setItems(List<?> items) {  
        this.items = items;  
    }  
}

實(shí)體類(lèi)都有了,那么該考慮數(shù)據(jù)的問(wèn)題衡未,思想就是 通過(guò)連接mysql數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)表的增刪改查尸执。mysql 連接 mysql-connector-java-5.1.7-bin.jar包引進(jìn)到項(xiàng)目里;新建數(shù)據(jù)庫(kù)操作的Dbhelper工具類(lèi):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DbHelper {
     public static final String url = "jdbc:mysql://localhost/world";    
     public static final String name = "com.mysql.jdbc.Driver";    
     public static final String user = "root";    
     public static final String password = "000000";    
 
     public Connection conn = null;    
     public PreparedStatement pst = null;    
 
     public DbHelper(String sql) {    
         try {    
             Class.forName(name);//  
             conn = DriverManager.getConnection(url, user, password);//  
             pst = conn.prepareStatement(sql);//  
         } catch (Exception e) {  
             System.err.println(e.getMessage());
             e.printStackTrace();    
         }    
     }    
 
     public void close() {    
         try {    
             this.conn.close();    
             this.pst.close();    
         } catch (SQLException e) {    
             e.printStackTrace();    
         }    
     }    

}

其中要注意的是引用的包是java.sql.下的缓醋,所以把包都貼上來(lái)了如失,jdbc的url 要具體到對(duì)應(yīng)的數(shù)據(jù)庫(kù),之外 Class.forName(name);e是一個(gè)靜態(tài)方法,同樣可以用來(lái)加載類(lèi)送粱,然后可以創(chuàng)建該類(lèi)的對(duì)象褪贵,http://bbs.csdn.net/topics/390216436
諸多大佬有比較清楚的解釋。

數(shù)據(jù)庫(kù)連接通之后就是數(shù)據(jù)的獲取和解析包裝:

下文方法是新建dbhelper對(duì)象執(zhí)行sql查詢(xún)語(yǔ)句從city表獲取所有數(shù)據(jù):

public static List<CityBeen> getAllStudents() {  
    List<CityBeen> list = new ArrayList<CityBeen>();//list對(duì)象  
    String sql = null;  
    DbHelper db1 = null;  
    sql = "select * from city";// SQL  
    db1 = new DbHelper(sql);//創(chuàng)建DBHelper對(duì)象  
    ResultSet ret = null;//創(chuàng)建結(jié)果集對(duì)象抗俄,執(zhí)行sql后返回的數(shù)據(jù)集合  
    try {  
        ret = db1.pst.executeQuery();//這個(gè)方法就類(lèi)似于執(zhí)行了SELECT語(yǔ)句一樣脆丁!  
        while (ret.next()) {  
            String id = ret.getString(1);//第一列是id  
            String name = ret.getString(2);//第二列是name  
            String CountryCode = ret.getString(3);//第三列是CountryCode  
            String District = ret.getString(4);//第四列是District  
            String     p= ret.getString(5);//第四列是Population 
            CityBeen city = new CityBeen();//創(chuàng)建city對(duì)象  
            city.setID(id);//設(shè)置id  
            city.setName(name);//設(shè)置name  
            city.setCountryCode(CountryCode);//設(shè)置CountryCode  
            city.setDistrict(District);//設(shè)置District 
            city.setPopulation(p);//設(shè)置District 
            
            list.add(city);//將city對(duì)象放置到列表中  
        } //循環(huán)從結(jié)果集中獲取數(shù)據(jù)并設(shè)置到list列表對(duì)象中  
        ret.close();//關(guān)閉對(duì)象  
        db1.close();//關(guān)系數(shù)據(jù)庫(kù)連接  
    } catch (SQLException e) {  
        e.printStackTrace();  
    } //  

    return list;//返回結(jié)果  
}  

但是 一個(gè)表的數(shù)據(jù)那么多顯然不現(xiàn)實(shí),那么還是要從分頁(yè)查詢(xún)动雹,當(dāng)然這樣可以做測(cè)試來(lái)嘗試是否連接成功槽卫。復(fù)習(xí)mysql 語(yǔ)法:

mysql中的sql語(yǔ)句: select * from 表名 limit 0,10;表示取表中的前10條數(shù)據(jù)(從第1條開(kāi)始,取10條)

返回具體一個(gè)的sql很容易事項(xiàng),那么需要兩個(gè)值一個(gè)起始值和一個(gè)偏移量胰蝠,也就是(頁(yè)碼-1)*一頁(yè)數(shù)量歼培,一頁(yè)數(shù)量震蒋。
那么完整的 實(shí)現(xiàn)從數(shù)據(jù)庫(kù)取值賦值的類(lèi)為:

public class CityBusiness {
 /** 
 * 獲取所有數(shù)據(jù) 
 * @return 
 */  
public static List<CityBeen> getAllStudents() {  
    List<CityBeen> list = new ArrayList<CityBeen>();//list對(duì)象  
    String sql = null;  
    DbHelper db1 = null;  
    sql = "select * from city";// SQL  
    db1 = new DbHelper(sql);//創(chuàng)建DBHelper對(duì)象  
    ResultSet ret = null;//創(chuàng)建結(jié)果集對(duì)象,執(zhí)行sql后返回的數(shù)據(jù)集合  
    try {  
        ret = db1.pst.executeQuery();//這個(gè)方法就類(lèi)似于執(zhí)行了SELECT語(yǔ)句一樣丐怯!  
        while (ret.next()) {  
            String id = ret.getString(1);//第一列是id  
            String name = ret.getString(2);//第二列是name  
            String CountryCode = ret.getString(3);//第三列是CountryCode  
            String District = ret.getString(4);//第四列是District  
            String     p= ret.getString(5);//第四列是Population 
            CityBeen city = new CityBeen();//創(chuàng)建city對(duì)象  
            city.setID(id);//設(shè)置id  
            city.setName(name);//設(shè)置name  
            city.setCountryCode(CountryCode);//設(shè)置CountryCode  
            city.setDistrict(District);//設(shè)置District 
            city.setPopulation(p);//設(shè)置District 
            
            list.add(city);//將city對(duì)象放置到列表中  
        } //循環(huán)從結(jié)果集中獲取數(shù)據(jù)并設(shè)置到list列表對(duì)象中  
        ret.close();//關(guān)閉對(duì)象  
        db1.close();//關(guān)系數(shù)據(jù)庫(kù)連接  
    } catch (SQLException e) {  
        e.printStackTrace();  
    } //  

    return list;//返回結(jié)果  
}      
/**
* 查詢(xún)某一頁(yè)
* @param page
* @param num
* @return
*/
public static List<CityBeen> getStudentsBypage(String pagenum,String datanum) {  
     List<CityBeen> list = new ArrayList<CityBeen>();//list對(duì)象  
     String sql = null;  
     DbHelper db1 = null;  
     int page=Integer.parseInt(pagenum);//第幾頁(yè)
     int num=Integer.parseInt(datanum);//一頁(yè)數(shù)量
     int start=(page-1)*num ;
     sql = "select * from city limit "+start+","+num;// SQL  
     db1 = new DbHelper(sql);//創(chuàng)建DBHelper對(duì)象  
     ResultSet ret = null;//創(chuàng)建結(jié)果集對(duì)象喷好,執(zhí)行sql后返回的數(shù)據(jù)集合  
     try {  
         ret = db1.pst.executeQuery();//這個(gè)方法就類(lèi)似于執(zhí)行了SELECT語(yǔ)句一樣!  
         while (ret.next()) {  
             String id = ret.getString(1);//第一列是id  
             String name = ret.getString(2);//第二列是name  
             String CountryCode = ret.getString(3);//第三列是CountryCode  
             String District = ret.getString(4);//第四列是District  
             String     p= ret.getString(5);//第四列是Population 
             CityBeen city = new CityBeen();//創(chuàng)建city對(duì)象  
             city.setID(id);//設(shè)置id  
             city.setName(name);//設(shè)置name  
             city.setCountryCode(CountryCode);//設(shè)置CountryCode  
             city.setDistrict(District);//設(shè)置District 
             city.setPopulation(p);//設(shè)置District                  
             list.add(city);//將city對(duì)象放置到列表中  
         } //循環(huán)從結(jié)果集中獲取數(shù)據(jù)并設(shè)置到list列表對(duì)象中  
         ret.close();//關(guān)閉對(duì)象  
         db1.close();//關(guān)系數(shù)據(jù)庫(kù)連接  
     } catch (SQLException e) {  
         e.printStackTrace();  
     } //  

     return list;//返回結(jié)果  
 }  
    
/** 
 * 通過(guò)id來(lái)獲取某個(gè)城市數(shù)據(jù) 
 * @param _id 
 * @return 
 */  
public static CityBeen getStudentInfoById(String _id) {  
    String sql = null;  
    DbHelper db1 = null;  
    sql = "select * from city where id =" + _id;// sql  
    db1 = new DbHelper(sql);//創(chuàng)建DBHelper對(duì)象  
    ResultSet ret = null;//創(chuàng)建結(jié)果集對(duì)象  
    CityBeen city = new CityBeen();//創(chuàng)建對(duì)象  
    try {  
        ret = db1.pst.executeQuery();//正常來(lái)說(shuō)读跷,這個(gè)結(jié)果集只有一個(gè)對(duì)象  
        while (ret.next()) {  
               String id = ret.getString(1);//第一列是id  
               String name = ret.getString(2);//第二列是name  
               String CountryCode = ret.getString(3);//第三列是CountryCode  
               String District = ret.getString(4);//第四列是District  
               String Population= ret.getString(5);//第四列是Population 
               
               city.setID(id);//設(shè)置id  
               city.setName(name);//設(shè)置name  
               city.setCountryCode(CountryCode);//設(shè)置CountryCode  
               city.setDistrict(District);//設(shè)置District  
               city.setPopulation(Population);//設(shè)置District 
               
        } //循環(huán)從結(jié)果集中獲取數(shù)據(jù)并設(shè)置到對(duì)象中(正常來(lái)說(shuō)梗搅,這個(gè)循環(huán)只執(zhí)行一次)  
        ret.close();//關(guān)閉對(duì)象  
        db1.close();//關(guān)系數(shù)據(jù)庫(kù)連接  
    } catch (SQLException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } //   
    return city;//返回結(jié)果  
 }  
}

有三個(gè)靜態(tài)類(lèi)分別是返回所有記錄和 分頁(yè)查詢(xún)和按照id 查詢(xún)。

使用工廠(chǎng)模式思想效览,創(chuàng)建一個(gè)實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)接口无切,可以這樣寫(xiě):

首先是一個(gè)服務(wù)接口CityService:

 public interface  CityService {
     public List<CityBeen> getAllCitys();  
     public CityBeen getCityByid(String id);  
     public List<CityBeen> getCitysByPage(String pagenum,String datanum); 
}

實(shí)現(xiàn)類(lèi):

public class CityServiceImpl implements CityService{

@Override
public List<CityBeen> getAllCitys() {
    // TODO Auto-generated method stub
    return CityBusiness.getAllStudents();
}

@Override
public CityBeen getCityByid(String id) {
    // TODO Auto-generated method stub
    return CityBusiness.getStudentInfoById(id);
}

@Override
public List<CityBeen> getCitysByPage(String pagenum, String datanum) {
    // TODO Auto-generated method stub
    return CityBusiness.getStudentsBypage(pagenum, datanum);
}
}

這樣子,要構(gòu)建返回訪(fǎng)問(wèn)具體的對(duì)象時(shí)可以類(lèi)似這樣獲蓉ね鳌:

CityBeen city = new CityServiceImpl().getCityByid("1");//從數(shù)據(jù)庫(kù)查找到id=1的城市 
SingleObject object = new SingleObject();//構(gòu)建單個(gè)返回對(duì)象
object.setObject(city);//返回內(nèi)容
object.setcode("ok");//狀態(tài)碼
object.setmsg("獲取信息成功")//附加信息    

最后把object 解析成json返回http請(qǐng)求就可以了哆键,每個(gè)返回對(duì)象都有code 的成員變量和msg成員變量,這個(gè)要定義為cons瘦锹;

public class StatusCode {
  public static String CODE_SUCCESS = "ok";//訪(fǎng)問(wèn)成功  
  
    public static String CODE_ERROR = "0001"; //訪(fǎng)問(wèn)錯(cuò)誤  
  
    public static String CODE_ERROR_PARAMETER = "0002";//參數(shù)錯(cuò)誤  
  
    public static String CODE_ERROR_PROGRAM = "0003";//程序異常  
  
 }

其實(shí)也可以把這兩個(gè)成員變量拿出來(lái)做一個(gè)對(duì)象統(tǒng)一管理:

public class StatusObject {
// 狀態(tài)碼  
private String code;  

// 狀態(tài)信息  
private String msg;  

public StatusObject(String code, String msg) {  
    super();  
    this.code = code;  
    this.msg = msg;  
  }  
  //get set 
 }

為了統(tǒng)一管理狀態(tài)碼和msg的關(guān)聯(lián)籍嘹,新建StatusHouse 類(lèi)

public class StatusHouse {
public static StatusObject COMMON_STATUS_OK = new StatusObject(StatusCode.CODE_SUCCESS, "訪(fǎng)問(wèn)成功");
public static StatusObject COMMON_STATUS_ERROR = new StatusObject(StatusCode.CODE_ERROR,
        "訪(fǎng)問(wèn)錯(cuò)誤,錯(cuò)誤碼:(" + StatusCode.CODE_ERROR + ")");
public static StatusObject COMMON_STATUS_ERROR_PROGRAM = new StatusObject(StatusCode.CODE_ERROR_PROGRAM,
        "程序異常弯院,錯(cuò)誤碼:(" + StatusCode.CODE_ERROR_PROGRAM + ")");
public static StatusObject COMMON_STATUS_ERROR_PARAMETER = new StatusObject(StatusCode.CODE_ERROR_PARAMETER,
        "參數(shù)錯(cuò)誤辱士,錯(cuò)誤碼:(" + StatusCode.CODE_ERROR_PARAMETER + ")");
}

在增加 AbstractJsonObject 增加set方法

  public void setStatusObject(StatusObject statusObject) {  
       this.code = statusObject.getCode();  
       this.msg = statusObject.getMsg();  
 }  

這樣子就可以一下子設(shè)定code 和msg 。
到了這里 還需要把實(shí)體類(lèi)轉(zhuǎn)換成json 的工具類(lèi): jackson-all-2.8.0.jar包引進(jìn)項(xiàng)目(因?yàn)閰⒖紕e人的听绳,所以就直接拿過(guò)來(lái)用了)

json工具類(lèi):

import com.fasterxml.jackson.databind.ObjectMapper;

  public class JackJsonUtils {
  static ObjectMapper objectMapper;  
    /** 
     * 解析json 
     *  
     * @param content 
     * @param valueType 
     * @return 
     */  
    public static <T> T fromJson(String content, Class<T> valueType) {  
        if (objectMapper == null) {  
            objectMapper = new ObjectMapper();  
        }  
        try {  
            return objectMapper.readValue(content, valueType);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    /** 
     * 生成json 
     *  
     * @param object 
     * @return 
     */  
    public static String toJson(Object object) {  
        if (objectMapper == null) {  
            objectMapper = new ObjectMapper();  
        }  
        try {  
            return objectMapper.writeValueAsString(object);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  }

這樣子解析也完了颂碘,就差到web訪(fǎng)問(wèn)了,web涉及到可能亂碼的問(wèn)題所以也需要一個(gè)工具椅挣。

 public class ResponseUtils {

/** 
 * 返回json 串 
 *  
 * @param response 
 * @param text 
 */  
public static void renderJson(HttpServletResponse response, String text) {  
    // System.out.print(text);  
    render(response, "text/plain;charset=UTF-8", text);  
}  

/** 
 * 發(fā)送內(nèi)容头岔。使用UTF-8編碼。 
 *  
 * @param response 
 * @param contentType 
 * @param text 
 */  
public static void render(HttpServletResponse response, String contentType, String text) {  
    response.setContentType(contentType);  
    response.setCharacterEncoding("utf-8");  
    response.setHeader("Pragma", "No-cache");  
    response.setHeader("Cache-Control", "no-cache");  
    response.setDateHeader("Expires", 0);  
    try {  
        response.getWriter().write(text);  
    } catch (IOException e) {  
    }  
 }  
}

最后就差sel

/**
 * Servlet implementation class CityServleet
 */
@WebServlet("/CityServleet")
public class CityServleet extends HttpServlet {
      private static final long serialVersionUID = 1L;

    /**
     * Default constructor.
     */
    public CityServleet() {
        super();
    }

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String action = request.getParameter("action");
    switch (action) {
    case "all":

        List<CityBeen> list = new CityServiceImpl().getAllCitys();
        ListObject listObject = new ListObject();
        listObject.setItems(list);
        listObject.setStatusObject(StatusHouse.COMMON_STATUS_OK);
        String responseText = JackJsonUtils.toJson(listObject);
        ResponseUtils.renderJson(response, responseText);

        break;
    case "id":
        CityBeen city = new CityServiceImpl().getCityByid("1");
        SingleObject object = new SingleObject();
        object.setStatusObject(StatusHouse.COMMON_STATUS_OK);

        object.setObject(city);
        ResponseUtils.renderJson(response, JackJsonUtils.toJson(object));
        break;
    case "page":
        String page = request.getParameter("page");
        String num = request.getParameter("num");

        List<CityBeen> list2 = new CityServiceImpl().getCitysByPage(page, num);
        ListObject listObject2 = new ListObject();
        listObject2.setItems(list2);
        listObject2.setStatusObject(StatusHouse.COMMON_STATUS_OK);
        String responseText2 = JackJsonUtils.toJson(listObject2);
        ResponseUtils.renderJson(response, responseText2);

        break;
    default:
        SingleObject object2 = new SingleObject();
        object2.setStatusObject(StatusHouse.COMMON_STATUS_ERROR_PARAMETER);

        object2.setObject("");
        ResponseUtils.renderJson(response, JackJsonUtils.toJson(object2));
        
        break;
    }

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
}

}

可以看到不管四post請(qǐng)求還是get 請(qǐng)求都是要先獲取action 參數(shù)來(lái)具體下一步動(dòng)作鼠证。最后返回?cái)?shù)據(jù)峡竣。
最后使用tomcat run on sever...測(cè)試。
注意:jackson-all-2.8.0.jar json解析和mysql 連接 mysql-connector-java-5.1.7-bin.jar要復(fù)制一份到tomcat的安裝路徑的lib下量九,否則會(huì)報(bào) notfound錯(cuò)誤澎胡。

測(cè)試一下:


image.png

項(xiàng)目鏈接:
https://github.com/silencefun/WebTest

壓縮包地址(包含jar包):https://pan.baidu.com/s/1gfdBrpx 密碼: vg6r

參考:http://blog.csdn.net/zxw136511485/article/details/51437115

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娩鹉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稚伍,老刑警劉巖弯予,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異个曙,居然都是意外死亡锈嫩,警方通過(guò)查閱死者的電腦和手機(jī)受楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呼寸,“玉大人艳汽,你說(shuō)我怎么就攤上這事《匝” “怎么了河狐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瑟捣。 經(jīng)常有香客問(wèn)我馋艺,道長(zhǎng),這世上最難降的妖魔是什么迈套? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任捐祠,我火速辦了婚禮,結(jié)果婚禮上桑李,老公的妹妹穿的比我還像新娘踱蛀。我一直安慰自己,他們只是感情好贵白,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布率拒。 她就那樣靜靜地躺著,像睡著了一般戒洼。 火紅的嫁衣襯著肌膚如雪俏橘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天圈浇,我揣著相機(jī)與錄音寥掐,去河邊找鬼。 笑死磷蜀,一個(gè)胖子當(dāng)著我的面吹牛召耘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褐隆,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼污它,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了庶弃?” 一聲冷哼從身側(cè)響起衫贬,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歇攻,沒(méi)想到半個(gè)月后固惯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缴守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年葬毫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镇辉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贴捡,死狀恐怖忽肛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烂斋,我是刑警寧澤屹逛,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站源祈,受9級(jí)特大地震影響煎源,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜香缺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一手销、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧图张,春花似錦锋拖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至适袜,卻和暖如春柄错,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦酱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工售貌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫萤。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓颂跨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扯饶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恒削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)尾序,斷路器钓丰,智...
    卡卡羅2017閱讀 134,693評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,838評(píng)論 6 342
  • 烤肉質(zhì)感畫(huà)的我想死,還是要多看看大神是怎么畫(huà)的?˙3˙?(??? ? ???)?˙3˙?
    水墨鎮(zhèn)閱讀 519評(píng)論 1 3
  • 2017-9-11學(xué)經(jīng)匯報(bào): 一每币、學(xué)經(jīng)日期:2017年9月11日 農(nóng)歷七月廿一 多云 星期一 寶貝年齡...
    b0a4ca4b06a4閱讀 192評(píng)論 0 0
  • 三月鶯飛花漸醒 迢迢年華難相依 無(wú)事春風(fēng)惹床簾 應(yīng)是嘲我濃情意 夜半江竹人獨(dú)影 淡酒難窮此深情 不恨今生相識(shí)短 只...
    墨zlr閱讀 273評(píng)論 0 4