通過tomcat自身進行簡單的動靜分離

一般的動靜分類會使用Apache+tomcat或者Nginx+tomcat的方式進行實現,Nginx+tomcat的方式配置較爲簡單,而且Nginx處理併發性能也更強;此處僅使用tomcat進行簡單的動靜分離處理。


tomcat、jboss、jetty等容器提供了一個默認的servlet:default,該servlet將靜態資源的映射從/改爲/static,該servlet在jboss中的定義位置爲:${jboss_home}/server/default/deployers/jbossweb.deployer/web.xml;在tomcat中的定義位置:${tomcat_home}/conf/web.xml。


默認的servlet是既服務於靜態資源又服務於目錄列表(如果允許目錄列表的話)的servlet。它在$CATALINA_HOME/conf/web.xml中被全局聲明。默認形式的聲明是這樣的: $CATALINA_HOME/conf/web.xml

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.DefaultServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

...

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

因此在默認的情況下,默認servlet在webapp啓動時被裝載,目錄列表可被使用,日誌調試功能被關掉。

DefaultServlet允許以下初始化參數:

debug日誌級別。如果你不是tomcat開發人員,這對你沒有什麼用處。目前,有用的值是0, 1, 11, 1000。
listings如果沒有歡迎文件,要不要顯示目錄列表?值可以是truefalse
歡迎文件是servlet api的一部分。
警告:列表顯示包含太多記錄的目錄是非常消耗服務性能的 . 大量請求訪問大目錄列表會吃掉服務器大部分的資源.
readmeFile如果允許目錄列表,可能有一個readme文件和這個列表在一起。這個文件包含HTML被插入。默認值是null。
globalXsltFile如果你希望定製你的目錄列表顯示效果,你可以使用一個XSL轉換(transformation)。這個值是一個可用於所有目錄列表的絕對路徑文件名。它可以被每個webapp 重新自定義使用,或者通過在你局部webapp的web.xml文件裏聲明默認servlet取消使用。這個xml文件的格式在下面有顯示。
localXsltFile你還可以在每個目錄通過配置localXsltFile定製你的目錄列表。它應該是在產生列表的目錄裏的一個相對路徑文件名。它覆蓋globalXsltFile。如果這個值存在,但是文件不存在,那麼就使用globalXsltFile。如果globalXsltFile也不存在,那麼默認的目錄列表就會被顯示出來。
input在讀取用於服務的資源時的輸入緩衝容量(in bytes)。[2048]
output在讀取用於服務的資源時的輸出緩衝容量(in bytes)。[2048]
readonly這個上下文否"read only",因此如PUT 和 DELETE的HTTP命令將被拒絕執行? [true]
fileEncoding文件編碼用於讀取靜態資源時. [平臺默認值]
sendfileSize如果連接器支持 sendfile, 這個參數表示sendfile將用到的最小文件大小(以KB爲單位) . 使用負數 可以禁止使用sendfile. [48]

那麼在實際應當當中,我們的應用的一些靜態資源就可以交給該servlet去處理,以減輕服務器壓力,節省資源。比如我們把對靜態資源的訪問路徑從/變更爲/static,如訪問http://localhot/style.css改成http://localhost/static/style.css,然後再應用的web.xml文件中增加如下配置代碼:

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/static/*</url-pattern>
    </servlet-mapping>

以此來實現簡單的動靜分離。



發佈了234 篇原創文章 · 獲贊 50 · 訪問量 169萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章