Tomcat介紹

Tomcat介紹

Tomcat

Tomcat服務器是Apache組織開發的一種JSP引擎同時支持Servlet,自己具備Web服務器的功能,能夠做爲獨立的Web服務器來使用。
    Tomcat 是一種具備JSP環境的Servlet容器,Servlet容器是代替用戶管理和調用 Servlet的運行時外殼。
        JSP(Java Server Pages)是一種運行於服務器端的動態網頁開發技術,它基於Java技術,執行JSP時須要在Web服務器上架設一個編譯JSP網頁的引擎。
        Servlet容器,負責處理客戶請求,當客戶請求來到時,Servlet容器獲取請求,而後調用某個Servlet,並把Servlet的執行結果返回給客戶。當客戶請求某個資源時,Servlet容器使SERVLETREQUEST對象把客戶的請求信息封裝起來,而後調用JAVA Servlet API中定義的Servlet的一些生命週期方法,完成Servlet的執行,接着把Servlet執行的要返回給客戶的結果封裝到SERVLETRESPONSE對象中,最後SERVLET容器把客戶的請求發送給客戶,完成爲客戶的一次服務過程。
        
    Tomcat做爲Web服務器方面,Tomcat處理靜態HTML頁面時不如Apache迅速,也沒有Apache健壯,因此咱們通常將Tomcat與Apache配合使用,讓Apache對網站的靜態頁面請求提供服務,而Tomcat做爲專用的JSP引擎,提供JSP解析,以獲得更好的性能。
    
    Tomcat自己就是Apache的一個子項目,因此Tomcat對Apache提供了強有力的支持,對於大多數網站來講,Tomcat是一個很不錯的選擇。
    
    Tomcat 在嚴格意義上並非一個真正的應用服務器,它只是一個能夠支持運行Serlvet/JSP的Web容器,不過Tomcat也擴展了一些應用服務器的功能,如JNDI,數據庫鏈接池,用戶事務處理等等。
    
    Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。
    
    Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的。當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。
    
    Tomcat和IIS等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。
    
    Tomcat處理靜態HTML的能力不如Apache服務器。
    
    Tomcat以面向對象的方式運行,它能夠在運行時動態加載配置文件中定義的對象結構,這有點相似於apache的httpd模塊的調用方式。

Tomcat運行環境

tomcat使用java語言來編寫,tomcat和php同樣都是用來處理動態程序的(也能夠解析靜態資源)。
    tomcat能夠處理.jsp或者.do結尾的動態文件,處理時並非tomcat自己去處理,而是交給後端的jvm來處理,也就是java虛擬機來處理,處理以前先裝入tomcat的類文件,而後由jvm來處理,因此安裝tomcat必須先安裝JDK(Java Development Kit)。
    java開發工具箱在java虛擬機之上,安裝了JDK就至關於安裝java虛擬機,JDK有兩種開源的軟件能夠安裝,OpenJDK和Oracle JDK.
    Java代碼的運行:
        *.java(source code) --> javac --> *.class(bytecode)
    jvm:
        class loader,加載程序的類文件,及程序的類文件依賴到的其它的類文件然後運行,整個運行表現爲一個jvm進程。
    JVM運行時區域:
        方法區:
            線程共享,用於存儲被JVM加載的class信息、常量、靜態變量、方法等;
        堆:
            是jvm所管理的內存中佔用空間最大的一部分,也是GC管理的主要區域,存儲對象;
        Java棧:
            線程私有,存儲線程本身的局部變量;
        PC寄存器:
            線程私有的內存空間,程序的指令指針;
        本地方法棧:
    JDK:
        瞭解當前的java環境:
            java  -version   
        OpenJDK: 
            java-VERSION-openjdk:
                The OpenJDK runtime environment.
            java-VERSION-openjdk-headless:
                 The OpenJDK runtime environment without audio and video support.
            java-VERSION-openjdk-devel:
                The OpenJDK development tools.  
            CentOS 7:
                VERSION:1.6.0, 1.7.0, 1.8.0
            注意:多版本並存時,可以使用 alternatives命令設定默認使用的版本;
        Oracle JDK:
            安裝相應版本的rpm包;
                jdk-VERSION-OS-ARCH.rpm
                例如:jdk-1.8.0_25-linux-x64.rpm 
        注意:安裝完成後,要配置JAVA_HOME環境變量,指向java的安裝路徑;
            OpenJDK:
                JAVA_HOME=/usr
            Oracle JDK:
                JAVA_HOME=/usr/java/jdk_VERSION
    Java 2 EE:
        CGI: Common Gateway Interface
        Servlet:
            類庫;web app;
            Servlet container,Servlet Engine
        JSP: Java Server Page
                類庫:
                    <html>
                        <title>TITLE</title‘
                        >
                        <body>
                            <h1>...</h1>
                            <%
                                ... java code...
                            %>
                        </body>
                    </html>
            .jsp -->jasper--> .java --> javac --> .class --> jvm 
            注意:基於jasper將靜態輸出的數據轉爲java代碼進行輸出,結果爲servlet規範的代碼;
        JSP Container:
            JSP + Servlet Container
            Java Web Server:JWS
            ASF:JServ
                O'Reilly
                Tomcat 3.x
                Tomcat 4.x
                    Catalina
                http://tomcat.apache.org/
            商業實現:
                WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss, ...
            開源實現:
                Tomcat, Jetty, Resin, ...
        Tomcat: Java 2 EE技術體系的不完整實現; 
    一、OpenJDK的安裝
        yum install java-1.8.0-openjdk-devel.x86_64 
        肯定JDK是否安裝可使用以下命令
            java -version    ##能夠看到版本,說明安裝成功
    二、Oracle JDK的安裝
        在oracle官方網站上下載jdk-8u151-linux-x64.rpm
            http://www.oracle.com/technetwork/java/javase/downloads/index.html  
        rpm -ivh jdk-8u151-linux-x64.rpm 
        cd /usr/java/
        ll      ##有兩個軟連接文件,一個指向的是默認的,一個指向的是最新的,這裏只有一個版本,若是有多個版本這兩個軟連接會分別指向不一樣的版本
            total 0
            lrwxrwxrwx 1 root root  16 Nov  3 21:01 default -> /usr/java/latest    
            drwxr-xr-x 9 root root 268 Nov  3 21:01 jdk1.8.0_151
            lrwxrwxrwx 1 root root  22 Nov  3 21:01 latest -> /usr/java/jdk1.8.0_151
        
        cd bin/             ##發現有不少java程序文件,由於不在PATH變量裏,因此最好定義PATH變量
        vim  /etc/profile.d/java.sh
            PATH=/usr/java/latest/bin/:$PATH
        .  /etc/profile.d/java.sh     ##生效
        java -version                   ##發現java環境已經準備好了,定義完PATH變量,java虛擬機就會自動開啓
            java version "1.8.0_151"
            Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
            Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

Tomcat安裝運行

安裝tomca也有兩種方法,一種是base倉庫,另一種就是到官方站點下載,這裏在上面準備好的OpenJDK上用base倉庫安裝,在Oracle JDK上安裝編譯好的二進制包。
    一、Base Repo:
        yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
        rpm -q tomcat                         ##查看版本
        cat /usr/sbin/tomcat                ##能夠看到tomcat並非一個二進制的程序,而是一個腳本文件,經過腳本文件調用java程序。
        service tomcat start
        ps -aux          ##發現tomcat啓動的是一個java虛擬機程序
        jps -v            ##能夠看到啓動過程,先裝載tomcat的類文件完成自舉,而後運行java虛擬機程序,因此tamcat真正運行的是一個java程序
        ss -nlt         ##從這也能夠看到運行的是java進程
            State       Recv-Q Send-Q                                              Local Address:Port                                                Peer Address:Port 
            LISTEN      0      1                                                ::ffff:127.0.0.1:8005                                                          :::*      users:(("java",5990,52))
            LISTEN      0      100                                                            :::8009                                                          :::*      users:(("java",5990,48))
            LISTEN      0      100                                                            :::8080                                                          :::*      users:(("java",5990,47))
            監聽的端口有三個:8080爲http協議的接口,8009爲ajp協議的接口,8005爲管理接口
        telnet 127.0.0.1 8005
            Trying 127.0.0.1...
            Connected to 127.0.0.1.
            Escape character is '^]'.
            SHUTDOWN   
            Connection closed by foreign host.
        ss -nlt             ##發現tomcat實例被關閉了,因此這個管理端口監聽在本地的8005,這樣比較安全,否則誰telnet到這個端口均可以關閉tomcat,不過通常這個端最好不要監聽,這樣更安全
        進行安全設置
            vim /etc/tomcat/server.xml
             <Server port="8005" shutdown="SHUTDOWN">
            把上面的改爲port=-1,就表示關閉端口,或者openssl rand -hex 10 生成一個隨機數來當shuntdown,這樣別人就不知道該怎麼關閉了
        http://172.18.21.106:8080/         ##訪問http協議的接口能夠看到web站點
            
    二、Tomcat binary release
        在官方網站上下載
            http://tomcat.apache.org/
        tomcat是屬於apache旗下的產品,這裏下載的是apache-tomcat-7.0.82.tar
        tar -xvf apache-tomcat-7.0.82.tar.gz -C /usr/local
        ln -s apache-tomcat-7.0.82/ tomcat
        useradd tomcat                     ##運行tomcat時最好以普通用戶的身份運行,因此建立一個tomcat用戶
        chown -R root:tomcat ./*       ##修改tomcat目錄下的文件的全部者和所屬組,這裏只修改所屬組爲tomcat是由於怕tomcat帳號被別人盜用後,登錄此帳號後修改tomcat內的二進制程序文件
        chown -R tomcat ./{logs,temp,work,webapps,conf}    ##將這些目錄的全部者修改成tomcat,由於在執行tomcat時有可能要修改這些目錄內的文件
        vim /etc/profile.d/tomcat.sh
            PATH=/usr/local/tomcat/bin/:$PATH
        . /etc/profile.d/tomcat.sh
        su - tomcat
        $catalina.sh start       ##利用這個命令來啓動和關閉tomcat
        $catalina.sh --help    
        $ss -nlt                     ##發現端口已經打開
        $ps -aux                   ##發現是以tomcat的身份在運行,若是用root用戶去開啓tomcat會發現tomcat是以root的身份在運行
        catalina.sh version
            Using CATALINA_BASE:   /usr/local/tomcat
            Using CATALINA_HOME:   /usr/local/tomcat
            Using CATALINA_TMPDIR: /usr/local/tomcat/temp
            Using JRE_HOME:        /usr/java/latest
            Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
            Server version: Apache Tomcat/7.0.82      ##能夠看到tomcat的版本
            Server built:   Sep 29 2017 12:23:15 UTC
            Server number:  7.0.82.0
            OS Name:        Linux
            OS Version:     3.10.0-514.el7.x86_64
            Architecture:   amd64
            JVM Version:    1.8.0_151-b12                    ##java虛擬機的版本
            JVM Vendor:     Oracle Corporation
        catalina.sh --help
            debug               在調試器中啓動Catalina
            debug -security     採用安全管理調試Catalina
            jpda start          在JPDA調試器中啓動Catalina
            run                 在當前窗口啓動Catalina
            run -security       採用安全管理在當前窗口中啓動
            start               在單獨的窗口中啓動Catalina
            start  -security    在單獨的窗口中採用安全管理啓動
            stop                中止Catalina,等待5秒來進行進程中止
            stop n              中止Catalina,等待N秒來進行進程中止
            stop -force         中止Catalina,等待5秒,若還在運行則使用kill -KILL來中止進程運行
            stop n -force       中止Catalina,等待n秒,若還在運行則使用kill -KILL來中止進程運行
            configtest          在server.xml上運行基礎同步檢查-檢查結果的退出代碼
            version             顯示版本

Tomcat程序環境

rpm -ql tomcat
        /etc/logrotate.d/tomcat
        /etc/sysconfig/tomcat                ##特殊服務配置文件
        /usr/bin/tomcat-digest
        /usr/bin/tomcat-tool-wrapper
        /usr/lib/systemd/system/tomcat.service
        /usr/lib/systemd/system/tomcat@.service
        /usr/libexec/tomcat
        /etc/tomcat                               ##配置文件目錄
        /etc/tomcat/server.xml           ##主配置文件
        /etc/tomcat/tomcat.conf            ##全局配置文件
        /etc/tomcat/tomcat-users.xml   ##用戶認證的帳號和密碼文件;角色(role),用戶(User),此文件在tomcat啓動時被裝入內存
        /usr/share/tomcat/webapps      ##webapp的默認根目錄
        /usr/sbin/tomcat
        /var/lib/tomcat
        /var/lib/tomcats
        /var/log/tomcat
        /var/log/tomcat/catalina.out
    tomcat的目錄結構
        bin:腳本目錄,及啓動時用到的類。
            catalina.sh,用於啓動和關閉tomcat服務器
            configtest.sh,用於檢查配置文件
            startup.sh,啓動Tomcat腳本
            shutdown.sh,關閉Tomcat腳本
        conf:配置文件目錄。
            server.xml,Tomcat 的全局配置文件
            web.xml,爲不一樣的Tomcat配置的web應用設置缺省值的文件
            tomcat-users.xml,Tomcat用戶認證的配置文件
        lib:庫文件,Java類庫,jar。
            包含被Tomcat使用的各類各樣的jar文件,在Linux/UNIX上任何這個目錄中的文件將被附加到Tomcat的classpath中。
        logs:日誌文件目錄。
            localhost_access_log.2013-09-18.txt,訪問日誌
            localhost.2013-09-18.log,錯誤和其它日誌
            manager.2013-09-18.log,管理日誌
            catalina.2013-09-18.log,Tomcat啓動或關閉日誌文件
        temp:臨時文件目錄;
        webapps:webapp的默認目錄,即Tomcat的主要Web發佈目錄。
            含Web應用的程序 (JSP、Servlet和JavaBean等)
            
        work:工做目錄,存放編譯後的字節碼文件,即Tomcat將翻譯JSP文件到的Java文件和class文件放在這裏
            由Tomcat自動生成,這是Tomcat放置它運行期間的中間(intermediate)文件(諸如編譯的JSP文件)地方。 
            若是當Tomcat運行時,你刪除了這個目錄那麼將不可以執行包含JSP的頁面。

    rpm包安裝的程序環境:
        配置文件目錄:/etc/tomcat
            主配置文件:server.xml 
        webapps存放位置:/var/lib/tomcat/webapps/
            examples
            manager
            host-manager
            docs
        Unit File:tomcat.service
        環境配置文件:/etc/sysconfig/tomcat
    
    Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有如下幾個:
        server.xml:主配置文件;
        web.xml:
        context.xml:tomcat-users.xml:;
        catalina.policy:; 
        catalina.properties:;
        logging.properties:;
        server.xml:
             Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息。
        web.xml:
            每一個webapp只有「部署」後才能被訪問,它的部署方式一般由web.xml進行定義,其存放位置爲WEB-INF目錄中,此文件爲全部的webapps提供默認部署相關的配置。
            遵循Servlet規範標準的配置文件,用於配置servlet,併爲全部的Web應用程序提供包括MIME映射等默認配置信息。
            web.xml基於Java Servlet規範,可被用於每個Java servlet容器,一般有兩個存放位置,$CATALINA_BASE/conf和每一個Web應用程序(一般是WEB-INF/web.xml)。
            Tomcat在deploy一個應用程序時(包括重啓或從新載入),它首先讀取conf/web.xml,然後讀取WEB-INF/web.xml。
        tomcat-user.xml:
            用戶認證的帳號和密碼文件,角色(role),用戶(User),此文件在tomcat啓動時被裝入內存。
            Realm認證時用到的相關角色、用戶和密碼等信息,Tomcat自帶的manager默認狀況下會用到此文件,在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現。
        catalina.policy:
            Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力。
            當使用-security選項啓動tomcat時,用於爲tomcat設置安全策略。
        catalina.properties:
            Java屬性的定義文件,用於設定類加載器路徑,以及一些與JVM調優相關參數。
            Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制,Tomcat在啓動時會事先讀取此文件的相關設置。
        logging.properties: 
            日誌系統相關的配置。
            Tomcat經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等。
        context.xml:
            全部host的默認配置信息。
            每一個webapp均可以使用的配置文件,它一般由專用的配置文件context.xml來定義,其存放位置爲WEB-INF目錄中,此文件爲全部的webapps提供默認配置。
    
    JSP WebAPP的組織結構:
            /:     webapps的根目錄
            index.jsp:主頁;
            WEB-INF/:當前webapp的私有資源路徑,一般用於存儲當前webapp的web.xml和context.xml配置文件;
            META-INF/:相似於WEB-INF/;
            classes/:類文件,當前webapp所提供的類;
            lib/:類文件,當前webapp所提供的類,被打包爲jar格式;

    Tomcat的Web應用程序目錄組成
        頁面內容等文件的存放位置:
            *.html, *.jsp等能夠有許多目錄層次,由用戶的網站結構而定,實現的功能應該是網站的界面,也就是用戶主要的可見部分。
            除了HTML文件、JSP文件外,還有js(JavaScript)文件和css(樣式表)文件以及其餘多媒體文件等。
        Web-INF/web.xml 
            這是一個Web應用程序的描述文件。
            這個文件是一個XML文件,描述了Servlet和這個Web應用程序的其餘組件信息,此外還包括一些初始化信息和安全約束等等。
        Web-INF/classes/ 
            這個目錄及其下的子目錄應該包括這個Web應用程序的全部JavaBean及Servlet等編譯好的Java類文件(*.class)文件,以及沒有被壓縮打入JAR包的其餘class文件和相關資源。
            注意,在這個目錄下的Java類應該按照其所屬的包層次組織目錄(即若是該*.class文件具備包的定義,則該*.class文件應該放在.\WEB-INF\classes\包名下)。
            這個目錄下的類文件也能夠打包成JAR文件,並能夠放到WEB-INF下的lib目錄下,如將 classes目錄下的各個*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*)
        common/lib/ 
            這個目錄下包含了全部壓縮到JAR文件中的類文件和相關文件。
            好比:第三方提供的Java庫文件、JDBC驅動程序等。
            其中msbase.jar、mssqlserver.jar、msutil.jar文件爲SqlServer2000的JDBC驅動程序
            其中servlet-api.jar和jsp-api.jar爲Servlet和JSP的API所在的包
        
    webapp歸檔格式:
        tree /usr/share/tomcat/webapps/ 能夠看到根目錄結構
        .war:webapp,通常生產中用到的都是這種格式的打包好的程序文件,只要把它扔到網頁程序文件存放的目錄下就會自動展開這個文件,不用解壓包
        .jar:EJB的類打包文件(類庫);
        .rar:資源適配器類打包文件;
        .ear:企業級webapp;
        
    部署(deploy) webapp的相關操做:
        deploy:將webapp的源文件放置於目標目錄(網頁程序文件存放目錄),配置tomcat服務器可以基於web.xml和context.xml文件中定義的路徑來訪問此webapp,將其特有的類和依賴的類經過class loader裝載至JVM。
            部署有兩種方式:
                自動部署:auto deploy
                手動部署:+
                    冷部署:把webapp複製到指定的位置,然後才啓動tomcat;
                    熱部署:在不中止tomcat的前提下進行部署;
                        熱部署工具:manager、ant腳本、tcd(tomcat client deployer)等;                   
        undeploy:拆除(反部署),中止webapp,並從tomcat實例上卸載webapp;
        start:啓動處於中止狀態的webapp;
        stop:中止webapp,再也不向用戶提供服務;其類依然在jvm上;
        redeploy:從新部署;

    tomcat的兩個管理應用:
        manager
        host-manager

    示例:
        手動提供一測試類應用,並冷部署:
            # mkidr  -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>
相關文章
相關標籤/搜索