tomcat

博文參考

http://xtony.blog.51cto.com/3964396/988706/
http://blog.sina.com.cn/s/blog_a0e7e34c01015nes.html
http://blog.csdn.net/u010066934/article/details/51669043
http://www.cnblogs.com/doit8791/archive/2012/10/27/2742768.html

tomcat簡介

tomcat是SUN公司的JSWDK(JavaServer  Web  DEvelopmentKit,是SUN公司推出的小型Servlet/JSP調試工具  )的基礎上發展出來的一個優秀的徹底由Java語言編寫的Servlet容器;
Servlet,顧名思義,是一種運行在服務器上的小插件。Servlet最多見的用途就是擴展Web服務器的功能,可做爲很是安全的、可移植的、易於使用的CGI代替品。Servlet具備如下特色:
提供了可被服務器動態加載並執行的程序代碼,爲客服端的請求提供相應服務;
Servlet徹底用Java語言編寫,所以要求運行Servlet的服務器必須支持Java語言;
Servlet徹底運行在服務器端,所以它不依賴於瀏覽器。無論瀏覽器是否支持Java語言,都能請求訪問服務器端的Servlet;

clipboard.png

tomcat 三種工做模式

獨立servlet容器

Tomcat做爲獨立的Web服務器來單獨運行,Servlet容器組件做爲Web服務器中的一部分而存在,這是Tomcat的默認工做模式。在這種模式下,Tomcat是一個獨立運行Java程序,須要啓動一個Java虛擬機(JVM)進程來運行Tomcat;html

clipboard.png

其餘web服務進程內的servlet容器

在這種模式下,Tomcat分別爲Web服務器插件和Servlet容器組件兩部分。Web服務器插件在其餘的Web服務器進程內部地址空間啓動一個Java虛擬機,Servlet容器組件在此Java虛擬機中運行。若有客戶端發出調用Serlvet請求,Web服務器插件得到對此請求的控制並轉發給Servlet容器組件(使用JNI通信機制,即Java本地調用接口)。前端

clipboard.png

其餘web服務進程外的servlet容器

在這種模式下,Tomcat分爲Web服務器插件和Serlvet容器組件兩部分。Web服務器插件在其餘的Web服務器進程外部地址空間啓動一個Java虛擬機,Servlet容器組件在此Java虛擬機中運行。若有客戶端發出調用Serlvet請求,Web服務器插件得到對此請求的控制並轉發給Servlet容器組件(採用IPC通信機制,即進程間通訊的一種機制)。java

clipboard.png

安裝java環境

一、從Base倉庫安裝java開發工具包:OpenJDK;linux

注:tomcat對java1.7的兼容性較好nginx

yum install java-1.7.0-openjdk-devel.x86_64web

二、查看JDK是否正常安裝;apache

java -versionvim

三、查看java的環境配置信息;瀏覽器

type javatomcat

能夠看出/usr/bin/java以及/etc/alternatives/java均爲連接文件;
  java支持多版本同時運行,能夠經過alternatives命令修改默認版本,或者修改/etc/alternatives/java連接文件指向要設定的默認版本的路徑便可;

安裝tomcat

一、從官網下載tomcat二進制安裝包(http://tomcat.apache.org/

wget http://mirrors.tuna.tsinghua....

tar xf apache-tomcat-8.5.11.tar.gz -C /usr/local/

查看解壓後的目錄;

ll /usr/local/ | grep tomcat

二、爲方便管理,建立軟連接;

ln -s /usr/local/apache-tomcat-8.5.11/ /usr/local/tomcat

三、建立環境配置腳本;

vim /etc/profile.d/tomcat.sh

賦予執行權限;

chmod +x /etc/profile.d/tomcat.sh

加載環境配置;

source /etc/profile.d/tomcat.sh

四、啓動tomcat

/usr/local/tomcat/bin/catalina.sh start 或 #catalina.sh start

查看tomcat是否正常啓動

ss –tnl

五、測試本地8080端口是否正常監聽

curl -I 127.0.0.1:8080

六、經過瀏覽器訪問測試(需指定8080端口),注意selinux與iptables策略;

到此tomcat安裝成功;

tomcat目錄結構以及相關文件

一、Tomcat組件

Tomcat自己由一系列可配置的組件構成,其核心組件是Servlet容器組件,即運行在服務器上的小插件。每一個tomcat組件在server.xml文件中對應一種配置元素:

每個組件都由一個Java"類"實現,這些組件大致能夠分爲如下幾個類型:
頂級組件:Server;
服務類組件:Service;
鏈接器組件:http,https,ajp;
容器類組件:Engine,Host,Context;
嵌套類組件:valve,logger,realm,loader,manger,. . . ;
集羣類組件:listener,cluster,. . . ;

二、tomcat目錄結構

bin:腳本及啓動時用到的類
conf:配置文件目錄
lib:庫文件,java庫,jar
logs:日誌文件目錄
temp:臨時文件目錄
webapps:webapps的默認目錄
work:工做目錄
若是爲rpm包安裝:
配置文件目錄:/etc/tomcat
webapps存放位置:/var/lib/tomcat/webapps
環境配置文件:/etc/sysconfig/tomcat

三、tomcat的主要配置文件;

serverxml.xml:主要配置文件
web.xml每一個webapp只有"部署"後才能被訪問,它的部署方式一般由web.xml進行定義,其存放位置爲WEB-INF/目錄中,此文件爲全部的webapp提供默認配置;
context.xml:每一個web均可以專用的配置文件,它一般由專用的配置文件context.xml來定義,其存放位置爲WEB-INF/目錄中,此文件爲全部的webapp提供默認配置;
tomcat-users.xml:用戶認證的帳號和密碼文件;
catalina.policy:當使用-security選項啓動tomcat時,會附加加載該安全配置文件,用於爲tomcat設置安全策略;
catalima.properties:Java屬性的定義文件,因爲設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日誌系統相關的配置;

四、catalina.sh腳本參數詳解;

catalina.sh –help

WebAPP結構及簡單部署

一、JSP WebAPP的組織結構

/:webapps的根目錄

    index.jsp:主頁;
    WEB-INF/:當前webapp的私有資源路徑,一般用於存儲當前的webapp的web.xml和context.xml配置文件;
    META-INF/:相似於WEB-INF/;
    classes/:類文件,當前webapp所提供的類;
    lib/:庫文件,當前webapp所提供的庫文件,被打包爲jar;

二、webapp歸檔格式:

經常使用的歸檔格式有4種:*.war(webapp)、*.jar(EJB的類打包文件)、*.rar(資源適配器類打包文件)、*.ear(企業級webapp);若是使用的是*.war時,默認會自動展開;

三、部署(deploy)webapp的相關操做

eploy:將webapp的源文件放置於目標目錄(網頁程序文件存放目錄),配置tomcat服務器可以基於web.xml和context.xml文件中定義的路徑來訪問此webapp,將其特有的類和依賴的類經過class  loader裝載至JVM;
    部署方式分爲自動部署(auto  deploy)和手動部署兩種方式:
    自動部署只需將webapp展開到tomcat/下的webapps/目錄便可;
    手動部署又分爲冷部署和熱部署:冷部署,及把webapp複製到指定的位置,然後才啓動tomcat;熱部署,則是在不中止tomcat的前提下進行部署,須要藉助於manager、ant腳本、tcd(tomcat  client  deployer)等部署工具,tcd可用於遠程部署;
 undeploy:反部署,中止webapp,並將webapp從tomcat實例上卸載;
 start:啓動處於中止狀態的webapp;
 stop:中止webapp,再也不向用戶提供服務,其類依然在jvm上;
 redeploy:從新部署;

四、簡單冷部署一測試類應用:

mkdir -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}

建立文件/usr/local/tomcat/webapps/test/index.jsp內容以下:

<%@  page  language="java"  %>
        <%@  page  import="java.util.*"  %>
        <html>
            <head>
                <title>Test  Page</title>
            </head>
            <body>
                <%  out.println("hello  world");
                %>
            </body>
        </html>

調試測試頁面:

curl 127.0.0.1:8080/test/index.jsp

能夠看出,響應內容爲編譯後的頁面代碼;

tomcat經常使用組件配置

一、頂層組件Server

Server表明tomcat  instance(實例),即表現出的一個Java進程;監聽在8005端口上,只接收"SHUTDOWN"。各server監聽的端口不能相同,所以,在一物理主機啓動多個實例時,須要修改其監聽端口爲不一樣的端口;

    【經常使用屬性】
     Adderss:監聽shutdown命令的地址,默認爲localhost;
     port:監聽shutdown命令的端口,默認爲8005。設置爲-1,則禁止經過端口關閉Tomcat;
     shutdown:設置基於端口關閉Tomcat所需的字符串參數,默認爲"SHUTDOWN"

二、服務類組件Service

Service用於建一個或多個Connector(鏈接器組件)關聯至一個Engine組件;

三、鏈接器組件Connector

Connector負責接收請求,常見的有三種類http、https、ajp;
    進入tomcat的請求能夠分爲兩類:
   (1)、standalone:請求來自於客戶端瀏覽器;
   (2)、由其餘的web  server反代:來自前端的反代服務器:
     nginx  –>  http  connector  –>  tomcat  
     httpd(proxy_http_module)  –>  http  connector  –>  tomcat
     httpd(proxy_ajp_module)  –>  ajp  connector  –>  tomcat

【經常使用屬性】:

port:接收http請求的端口,默認8080;
   protocol:使用協議,默認HTTP/1.1
   redirectPort:接收https請求的端口,默認8443;
   connectionTimeout:每一個請求最長鏈接時間,單位毫秒,默認20000;

   address:監聽的IP地址;默認爲本機全部可用地址;
   maxThreads:最大併發鏈接數,默認爲150;
   enableLookups:是否啓用DNS查詢功能;
   acceptCount:等待隊列的最大長度;
   secure:安全設置
   sslProtocol:SSL協議

四、容器類組件Engine

Engine組件:Servlet實例,即servlet引擎,每一個Servlet只能包含一個Engine,其內部能夠一個或多個host組件來定義站點;一般須要經過defaultHost來定義默認的虛擬主機;

 【經常使用屬性】:
   name:Engine名稱
   defaultHost:默認Host
    jvmRoute:Tomcat集羣節點路由標示,用於區分不一樣tomcat;

五、容器類組件Host

Host組件位於engine內部用於接收請求並進行相應處理的主機或虛擬主機,示例:

   <Host  name="localhost"    appBase="webapps"
    unpackWARs="true"  autoDeploy="true">
   </Host>
  【經常使用屬性】:
    appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可使用基於$CATALINA_BASE變量所定義的路徑的相對路徑;
    autoDeploy:在Tomcat處於運行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat;
   startStopThreads:線程池內的線程數量
   示例:

    <Host  name="tc1.magedu.com"  appBase="/appdata/webapps"  unpackWARs="true"  autoDeploy="true">
    </Host>
    簡單示例:
#  mkdir  -pv  /appdata/webapps
#  mkdir  -pv  /appdata/webapps/ROOT/{lib,classes,WEB-INF}
#  vim  /usr/local/tomcat/webapps/ROOT/index.jsp
      建立一個測試頁測試便可(參照第四章節,第4小節);

六、容器類組件Context

每一個Context表明一個運行在虛擬主機上的Web應用,一個Host上能夠有多個Context;
  【經常使用屬性】
    path:該Web項目的URL入口;path設置爲"",輸入http://localhost:8080便可訪問Webapp;path設置爲"/test",輸入http://localhost:8080/test才能訪問Webapp
   docBas:webapps的路徑,相對或絕對路徑均可以;
   reloadable:自動部署配置,設置爲true時,當Web項目的/WEB-INF/classes/和/WEB-INF/lib發生變化時,tomcat會自動從新部署Web項目。reloadable默認值爲false。
 示例:

<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
七、嵌套類組件Valve

Valve組件經常使用於Tomcat的日誌、權限等控制,可嵌在Engine、Host、Context內;
  【經常使用屬性】
   className:
   定義訪問日誌:org.apache.catalina.valves.AccessLogValve
   定義訪問控制:org.apache.catalina.valves.RemoteAddrValve、org.apache.catalina.valves.RemoteHostValve
 【日誌配置】
   className:必須爲org.apache.catalina.valves.AccessLogValve
   directory:日誌文件目錄,默認爲logs(相對於$CATALINA_HOME);
   prefix:日誌前綴,默認爲localhost_access_log;
   suffix:日誌後綴,默認爲.txt;
   pattern:日誌記錄格式;具體見後面附表;
 示例:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log"  suffix=".txt"
pattern="%h  %l  %u  %t  &quot;%r&quot;  %s  %b"  />

  【基於IP訪問控制】
   className:必須爲org.apache.catalina.valves.RemoteAddrValve
   allow:容許名單;匹配模式:能夠基於IP、IP段,IP分隔符"."須要加"\"轉義,可用".*"通配
   deny:拒絕名單;匹配模式同allow;
  示例:

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172.16.0..*"/>

相關文章
相關標籤/搜索