Tomact從入門到進(jìn)階

tomcat從入門到進(jìn)階

Tomat是由Apache軟件基金會下屬的Jakarta項(xiàng)目開發(fā)的一個(gè)Servlet容器。由于Tomcat本身也包含了一個(gè)HTTP服務(wù)器琼开,它可以被視作一個(gè)單獨(dú)的WEB服務(wù)器易结。不過HTTP服務(wù)器是C語言實(shí)現(xiàn)的Web服務(wù)器,而Tomcat則是由Java編寫柜候。


什么是Servlet呢搞动? Servlet,全稱 Java Servlet渣刷,是用Java編寫的服務(wù)器端程序鹦肿,主要功能在于交互式的瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容辅柴。

JSP代碼運(yùn)行過程

index.jsp –> 由jasper轉(zhuǎn)換 –> index_jsp.java–> 通過javac編譯器 –> 生成類文件 index_jsp.class –> 在(engine上)jvm虛擬機(jī)上運(yùn)行
基于jsp將靜態(tài)輸出的數(shù)據(jù)轉(zhuǎn)為java代碼進(jìn)行輸出箩溃,結(jié)果為Servlet規(guī)范的代碼

Java代碼運(yùn)行過程

.java –> javac –> .class(bytecode字節(jié)碼)

JVM運(yùn)行時(shí)區(qū)域

方法區(qū)   :   用于存儲被JVM加載的class信息、常量碌嘀、靜態(tài)變量涣旨,方法等
堆       :  是jvm所管理的內(nèi)存中占用空間最大的一部分,也是GC管理的主要區(qū)域股冗,用
            來存儲對象信息
棧       :  線程私有霹陡,存儲線程自己的局部變量
PC寄存器 :  線程私有的內(nèi)存空間,程序的指令指針
GC      :  垃圾回收魁瞪,回收堆中不再使用的空間

JDK

在Linux下想要運(yùn)行tomcat穆律,就必須依賴JDK環(huán)境了,這里我們使用的JDK版本是java-1.8.0-openjdk导俘。openjdk是jdk的一個(gè)分支峦耘,也是其開源的項(xiàng)目。

安裝JDK

由于使用的是Centos 7旅薄,所以在base倉庫就已經(jīng)提供了3種openjdk版本:

$ yum list all *jdk*
java-1.6.0-openjdk
java-1.7.0-openjdk
java-1.8.0-openjdk

這里我們使用java-1.8.0-openjdk版本

$ yum install java-1.8.0-openjdk
$ java -version

為了防止其他程序要使用java時(shí)找不到JAVA_HOME辅髓,我們這里手動配置JAVA_HOME

$ vim /etc/profile.d/java.sh
export JAVA_HOME=/usr
$ . /etc/profile.d/java.sh

如果是使用Oracle版本的JDK,其默認(rèn)安裝在/usr/java/jdk_VERSION路徑下

$ vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk_VERSION
export PATH=$JAVA_HOME/bin:$PATH
$ . /etc/profile.d/java.sh

安裝完jdk之后少梁,我們就可以開始安裝和配置Tomcat了洛口!

Tomcat安裝與配置

安裝Tomcat
  • 使用base倉庫安裝

      $ yum install -y tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
    
  • 使用官方二進(jìn)制版本安裝

$ wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz
$ tar -xf  apache-tomcat-8.5.16.tar.gz -C /usr/local/
$ cd /usr/local
$ ln -sv apache-tomcat-8.5.16 tomcat

注意這里使用軟連接的方式,是為了生產(chǎn)環(huán)境中凯沪,如果需要版本升級時(shí)第焰,可以很好的進(jìn)行替換操作,只需將連接修改至新版本即可妨马。

如果使用了二進(jìn)制版本安裝挺举,我們就需要手動添加環(huán)境變量了:

$ vim /etc/profile.d/tomcat.sh 
export CATALINA_BASE=/usr/local/tomcat 
export PATH=$CATALINA_BASE/bin:$PATH
$ . /etc/profile.d/tomcat.sh

Tomcat程序環(huán)境

tomcat的目錄結(jié)構(gòu)

bin         腳本杀赢,及啟動時(shí)用到的類
conf        配置文件目錄
lib         庫文件,Java類庫湘纵,jar
logs        日志文件目錄
temp        臨時(shí)文件目錄
webapps     webapp的默認(rèn)目錄
work        工作目錄
ROOT        存放主站的文件脂崔,就是訪問 / 的顯示的頁面

rpm包安裝的程序環(huán)境

配置文件目錄:/etc/tomcat
主配置文件:/etc/tomcat/server.xml
認(rèn)證用戶配置文件:/etc/tomcat/tomcat-users.xml
webapps存放位置:/var/lib/tomcat/webapps/
Unit File:/usr/lib/systemd/system/tomcat.service
環(huán)境配置文件:/etc/sysconfig/tomcat

運(yùn)行Tomcat進(jìn)程的用戶

默認(rèn)為tomcat用戶,但無權(quán)監(jiān)聽80端口

使用authbind程序使tomcat用戶可以監(jiān)聽80端口

$ wget https://s3.amazonaws.com/aaronsilber/public/authbind-2.1.1-0.1.x86_64.rpm
$ yum install -y ./authbind-2.1.1-0.1.x86_64.rpm
$ chmod 755 /etc/authbind/port/80 
$ chown test.test /etc/authbind/port/80 
$ authbind --deep systemctl restart tomcat

authbind-github下載

tomcat的配置文件

配置文件路徑          /etc/tomcat/conf 
server.xml          主配置文件
web.xml             每個(gè)webapp只有"部署"后才能被訪問梧喷,它的部署方式通常由web.xml進(jìn)行定義砌左,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認(rèn)部署相關(guān)的配置
context.xml         每個(gè)webapp都可以專用的配置文件铺敌,它通常由專用的配置文件context.xml來定義汇歹,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認(rèn)配置
tomcat-users.xml    用戶認(rèn)證的賬號和密碼文件
catalina.policy     當(dāng)使用-security選項(xiàng)啟動tomcat時(shí)适刀,用于為tomcat設(shè)置安全策略秤朗;
catalina.properties Java屬性的定義文件,用于設(shè)定類加載器路徑笔喉,以及一些與JVM調(diào)優(yōu)相關(guān)參數(shù)
logging.properties  日志系統(tǒng)相關(guān)的配置

二進(jìn)制安裝中 catalina.sh腳本使用方法

debug             測試模式
debug -security   安全策略的測試模式
run               運(yùn)行為守護(hù)進(jìn)程
run -security     安全策略模式啟動
start             運(yùn)行為守護(hù)進(jìn)程
start  -security  安全策略模式啟動
stop              停止
stop n            等待幾秒后停止
stop -force       強(qiáng)制停止
stop n -force     幾秒后強(qiáng)制停止
version           版本
$ catalina.sh start         #啟動tomcat
$ catalina.sh version       #查看tomcat版本

JSP WebAPP的組織結(jié)構(gòu)

路徑                 /var/lib/tomcat/webapps
/                   webapps的根目錄
    index.jsp       主頁文件
    WEB-INF/        當(dāng)前webapp的'私有資源路徑'取视;通常用于存儲當(dāng)前webapp的web.xml和context.xml配置文件
    META-INF/       類似于WEB-INF/
    classes/        類文件,當(dāng)前webapp所提供的類
    lib/            類文件常挚,當(dāng)前webapp所提供的類作谭,被打包為jar格式

部署deploy webapp的相關(guān)操作

deploy      將webapp的源文件放置于目標(biāo)目錄(網(wǎng)頁程序文件存放目錄),配置tomcat服務(wù)器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp
undeploy    反部署奄毡,停止webapp折欠,并從tomcat實(shí)例上卸載webapp
start       啟動處于停止?fàn)顟B(tài)的webapp
stop        停止webapp,不再向用戶提供服務(wù)吼过;其類依然在jvm上
redeploy    重新部署

部署有兩種方式

自動部署:auto deploy(可能需要重啟)
手動部署:
    冷部署:把webapp復(fù)制到指定的位置锐秦,而后才啟動tomcat
    熱部署:在不停止tomcat的前提下進(jìn)行部署
部署工具:manager、ant腳本盗忱、tcd(tomcat client deployer)等

tomcat的兩個(gè)管理應(yīng)用

manager

不用關(guān)閉tomcat酱床,完成webapp的熱部署
使用此功能,需要先配置用戶和密碼:
    conf/tomcat-user.xml
    $ vim tomcat-user.xml
    <role rolename="manager-gui">
    <user username="tomcat" password="tomcat" roles="manager-gui" />
    修改完之后趟佃,重啟tomcat
    $ systemctl restart tomcat 
    expire session:清除超過指定時(shí)間的會話
    只要把webapp放到路徑下扇谣,然后在網(wǎng)頁控制頁面中的deploy填寫 /test /test2 類似這樣
    并創(chuàng)建WEB-INF、META-INF闲昭、index.jsp即可

host-manager

此管理應(yīng)用罐寨,需要另一個(gè)配置。
    <role rolename="admin-gui">n
    <user username="tomcat" password="tomcat" roles="admin-gui" />
但是在這里通過圖形化界面添加的 虛擬主機(jī)序矩,重啟tomcat后鸯绿,就會失效,需要定義在 server.xml

Tomcat的常用組件配置

Server:代表tomcat instance,即表現(xiàn)出的一個(gè)java進(jìn)程楞慈;監(jiān)聽在8005端口幔烛,只接收“SHUTDOWN”。各server監(jiān)聽的端口不能相同囊蓝,因此,在同一物理主機(jī)啟動多個(gè)實(shí)例時(shí)令蛉,需要修改其監(jiān)聽端口為不同的端口
Service:用于實(shí)現(xiàn)將一個(gè)或多個(gè)connector組件關(guān)聯(lián)至一個(gè)engine組件
Connector組件:
    負(fù)責(zé)接收請求聚霜,常見的有三類http/https/ajp;
    進(jìn)入tomcat的請求可分為兩類:
        (1) standalone : 請求來自于客戶端瀏覽器珠叔;
        (2) 由其它的web server反代:來自前端的反代服務(wù)器蝎宇;
            nginx --> http connector --> tomcat 
            httpd(proxy_http_module) --> http connector --> tomcat
            httpd(proxy_ajp_module) --> ajp connector --> tomcat 
            http(mod_jk) --> ajp connector --> tomcat 
    
    參數(shù):
        address:監(jiān)聽的IP地址;默認(rèn)為本機(jī)所有可用地址
        maxThreads:最大并發(fā)連接數(shù)祷安,默認(rèn)為200
        enableLookups:是否啟用DNS查詢功能
        acceptCount:等待隊(duì)列的最大長度
        
Engine組件:
    Servlet實(shí)例姥芥,即servlet引擎,其內(nèi)部可以一個(gè)或多個(gè)host組件來定義站點(diǎn)汇鞭; 通常需要通過defaultHost來定義默認(rèn)的虛擬主機(jī)
    
Host組件:
    位于engine內(nèi)部用于接收請求并進(jìn)行相應(yīng)處理的主機(jī)或虛擬主機(jī)
    
    參數(shù):
        (1)'appBase':此Host的'webapps的默認(rèn)存放目錄'凉唐,指存放非歸檔的web應(yīng)用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對路徑霍骄;
        (2) autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí)台囱,將某webapp放置于appBase所定義的目錄中時(shí),是否'自動將其部署至tomcat读整;'
        (3) unpackWARs:是否自動解開 WAR 文件
注意:'這里如果是新建的HOST簿训,主頁的文件資源必須放在appBase指定的目錄下的ROOT目錄下,否則將無法訪問'
Context組件:(類似于nginx中的alias)
    參數(shù):
        path:URL路徑
        reloadable:是否支持自動裝載
        docBase:系統(tǒng)文件路徑
Valve組件:
    參數(shù):
        定義訪問日志:org.apache.catalina.valves.AccessLogValve
        定義訪問控制:org.apache.catalina.valves.RemoteAddrValve 
        pattern:日志格式
        prefix:日志前綴
        suffix:日志后綴
    日志路徑:
        rpm安裝:/var/log/tomcat/
        綠色安裝:/usr/local/tomcat/logs/

綜合示例:

<Host name="www.maxie.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="node1_access" suffix=".log"
        pattern="%h %l %u %t "%r" %s %b" />
    <Context path="/test" docBase="test" reloadable="">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="node1_test_access_" suffix=".log"
        # 設(shè)置為combined格式的日志
        pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i" />      
    </Context>
</Host>

配置幾個(gè)Tomcat示例

簡單測試頁 配置
  • 安裝Tomcat
安裝所需要的包:
$ yum install -y java-1.8.0-openjdk-devel tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp 
配置tomcat.users.xml 
$ vim /etc/tomcat/tomcat.users.xml
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui"/>
<role rolename="manager-gui"/>
<user username="maxie" password="maxie" roles="manager-gui"/>
修改網(wǎng)卡地址為內(nèi)網(wǎng)地址
  • 配置Tomcat測試頁
$ mkdir /usr/share/tomcat/webapps/test/{classes,META-INF,WEB-INF}
$ vim /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
        <title>Test Page</title>
    </head>
    <body>
        <font size=10 color="#38B0DE" > Tomcat One Server  </font>
        <table align="centre" border="1">
        <tr>
                <td>Session ID</td>
                <% session.setAttribute("magedu.com","magedu.com"); %>
                <td><%= session.getId() %></td>
        </tr>
        <tr>
                <td>Created on</td>
                        <td><%= session.getCreationTime() %></td>
                </tr>
        </table>
        <br>
        <% out.println("hello world");
        %>
    </body>
</html>
$ systemctl restart tomcat
  • 使用nginx作為反向代理tomcat
$ yum install nginx 
$ vim /etc/nginx/nginx.conf
upstream 
server {
    listen 80;
    server_name www1.maxie.com;
    location / {
        proxy_pass http://192.168.1.30:8080;
    }
}
$ systemctl start nginx
  • 修改客戶端HOSTS文件

      $ sudo vim /etc/hosts
      172.16.3.10 www1.maxie.com
    
  • 打開網(wǎng)頁進(jìn)行測試

使用反向代理Tomcat

  • 使用httpd作為反代服務(wù)器(需要將之前nginx服務(wù)關(guān)閉米间,防止端口沖突)
$ yum install httpd 
$ cd /etc/httpd 
$ vim conf.d/maxie-http.conf 
<VirtualHost *:80>
    ServerName www1.maxie.com
    DocumentRoot "/data/maxie/"
    ProxyRequests Off              # 關(guān)閉正向代理
    ProxyVia      On           # 添加首部Via(由誰代理)--> 有可能會httpd被取消掉 
    ProxyPreserveHost On           # 把主機(jī)頭部發(fā)送到后端强品;保留代理服務(wù)器上虛擬主機(jī)的頭部(域名)
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / http://192.168.1.30:8080/          # 把/ 代理到后端服務(wù)器的地址
    #或者可以定義成:
    ProxyPass / http://192.168.1.30:8080/test/     # 把 / 代理到后端的 /test 上
    ProxyPassReverse / http://192.168.1.30:8080/   # 把重定向返回給客戶端
    <Location />                                   # 設(shè)置代理的/ 允許誰訪問
        Require all granted
    </Location>
</VirtualHost>  
$ httpd -M | grep proxy                                 # 確保 proxy_http 模塊裝載
$ httpd -t 
$ systemctl start httpd
  • 使用ajp協(xié)議進(jìn)行通信(確保 proxy_ajp_module裝載)
$ cp conf.d/maxie-http.conf conf.d/maxiecloud-ajp.conf
$ vim conf.d/maxiecloud-ajp.conf
<VirtualHost *:80>
    ServerName www1.maxiecloud.com
    DocumentRoot "/data/maxie/"
    ProxyRequests Off           
    ProxyVia      On                    
    ProxyPreserveHost On        
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / ajp://192.168.1.30:8009/ 
    ProxyPassReverse / ajp://192.168.1.30:8009/ 
    <Location /> 
        Require all granted
    </Location>
</VirtualHost>
$ systemctl restart httpd

使用nginx/httpd負(fù)載均衡Tomcat

這時(shí)需要兩臺Tomcat機(jī)器,兩臺配置一樣屈糊。只需復(fù)制之前做的一臺上的配置文件以及/test測試jsp文件

使用nginx反向代理調(diào)度器對tomcat實(shí)現(xiàn)負(fù)載均衡

  • 停止httpd服務(wù)

      $ systemctl stop httpd
    
  • 配置nginx

$ vim /etc/nginx/conf.d/maxie.conf 
upstream tomcatsrv {
    server 192.168.1.50:8080;
    server 192.168.1.60:8080;
}
server {
    listen          80;
    server_name     www.maxie.com;
    
    location / {
        proxy_pass http://tomcatsrv;
    }
}
$ systemctl restart nginx
  • 打開網(wǎng)頁進(jìn)行測試

如需設(shè)置會話保持功能:

$ vim /etc/nginx/conf.d/maxie.conf
在upstream中添加
hash $request_uri consistent;
或者
ip_hash;
或者
hash $cookie_name consistent;

使用httpd作為反向代理時(shí)的榛,對后端2臺tomcat實(shí)現(xiàn)負(fù)載均衡

  • 停止nginx服務(wù)

      $ systemctl stop nginx
    
  • 配置httpd

$ vim /etc/httpd/conf.d/maxie-http.conf
<Proxy balancer://tomcatsrv>
    BalancerMember http://192.168.1.50:8080
    BalancerMember http://192.168.1.60:8080
    ProxySet lbmethod=byrequests
</Proxy>
<VirtualHost *:80>
    ServerName www.maxie.com
    ProxyRequests Off                  # 關(guān)閉正向代理
    ProxyVia      On               # 添加首部Via(由誰代理)--> 有可能會httpd被取消掉 
    ProxyPreserveHost On               # 把主機(jī)頭部發(fā)送到后端;保留代理服務(wù)器上虛擬主機(jī)的頭部(域名)
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / balancer://tomcatsrv/              # 把/ 代理到后端服務(wù)器的地址
    
    ProxyPassReverse / balancer://tomcatsrv/       # 把重定向返回給客戶端
    <Location />                                   # 設(shè)置代理的/ 允許誰訪問
        Require all granted
    </Location>
</VirtualHost>  
$ httpd -t
$ systemctl restart httpd
  • 打開網(wǎng)頁測試即可另玖,效果如nginx代理一樣
  • httpd負(fù)載均衡實(shí)現(xiàn)會話粘性并開啟httpd內(nèi)建的負(fù)載均衡狀態(tài)頁
$ vim /etc/httpd/conf.d/maxie-http.conf
Header add Set-Cookie "MYID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://tomcatsrv>
        BalancerMember http://192.168.1.50:8080 route=tom1 loadfactor=2
        BalancerMember http://192.168.1.60:8080 route=tom2 loadfactor=1
        ProxySet lbmethod=byrequests
        ProxySet stickysession=MYID
</Proxy>
<VirtualHost *:80>
    ServerName wwww.maxie.com
    ProxyRequests Off
    ProxyVia      On
    ProxyPreserveHost On
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / balancer://tomcatsrv/
    ProxyPassReverse / balancer://tomcatsrv/
    <Location />
        Require all granted
    </Location>
    <Location /http-stats>                  # 開啟管理負(fù)載均衡的接口
        SetHandler balancer-manager         # 啟動balancer-manager這個(gè)內(nèi)建功能
        ProxyPass !                         # !表示 不反代困曙,只在本機(jī)處理
        Require all granted
    </Location>
</VirtualHost>
$ systemctl restart httpd
  • 打開網(wǎng)頁測試
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谦去,隨后出現(xiàn)的幾起案子慷丽,更是在濱河造成了極大的恐慌,老刑警劉巖鳄哭,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件要糊,死亡現(xiàn)場離奇詭異,居然都是意外死亡妆丘,警方通過查閱死者的電腦和手機(jī)锄俄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門局劲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奶赠,你說我怎么就攤上這事鱼填。” “怎么了毅戈?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵苹丸,是天一觀的道長。 經(jīng)常有香客問我苇经,道長赘理,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任扇单,我火速辦了婚禮商模,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜘澜。我一直安慰自己施流,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布兼都。 她就那樣靜靜地躺著嫂沉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扮碧。 梳的紋絲不亂的頭發(fā)上趟章,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音慎王,去河邊找鬼蚓土。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赖淤,可吹牛的內(nèi)容都是我干的蜀漆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咱旱,長吁一口氣:“原來是場噩夢啊……” “哼确丢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吐限,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鲜侥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诸典,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描函,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舀寓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胆数。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖互墓,靈堂內(nèi)的尸體忽然破棺而出必尼,到底是詐尸還是另有隱情,我是刑警寧澤轰豆,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布胰伍,位于F島的核電站,受9級特大地震影響酸休,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祷杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一斑司、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧但汞,春花似錦宿刮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踩叭,卻和暖如春磕潮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背容贝。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工自脯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斤富。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓膏潮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親满力。 傳聞我的和親對象是個(gè)殘疾皇子焕参,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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

  • Java語言介紹Java EE和TomcatTomcat的主要配置Tomcat的管理工具Tomcat的反向代理 一...
    哈嘍別樣閱讀 555評論 0 0
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司油额,掛了不少叠纷,但最終還是拿到小米、百度悔耘、阿里讲岁、京東、新浪、CVTE缓艳、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,246評論 11 349
  • CocoaLumberjack是Mac和iOS上一個(gè)集快捷校摩、簡單、強(qiáng)大和靈活于一身的日志框架阶淘。其下載地址:http...
    sincere_bs閱讀 786評論 0 6
  • 簡直不要太弱衙吩,做了十幾分鐘的馬甲線訓(xùn)練,做完10組簡易burpee溪窒,覺得自己不行了坤塞,心跳超快,眼睛有點(diǎn)暈澈蚌,就趕緊停...
    丁信子閱讀 225評論 0 0
  • 一轉(zhuǎn)眼間第四周又過完了摹芙,在第四周里,我的任務(wù)開始提前了宛瞄,每天寫的字也開始加倍了浮禾,本來是寫一頁,但現(xiàn)在我每天...
    薛義之Harry閱讀 419評論 0 2