tomcat和應用集成


將tomcat作為應用的一部分集成到應用中,使得應用可以直接開啟http服務,對外提供接口。此時應用程序不必再遵守j2ee中的文件目錄格式要求。

此種方式改變了以往先部署tomcat容器,再按照j2ee標准目錄格式部署應用的做法,簡化了網絡應用的部署工作,也方便了將現有模塊功能網絡化訪問的需求。

建立maven工程

pom.xml文件,其中使用了tomcat8.5.9版本,jdk1.8。

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.founder</groupId>
    <artifactId>embed-tomcat</artifactId>
    <version>8.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>tomcat</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <tomcat.version>8.5.9</tomcat.version>
        <!-- <tomcat.version>7.0.32</tomcat.version> -->
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-util</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-juli</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper-el</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <!-- -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-i18n-ja</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-i18n-fr</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-i18n-es</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-el-api</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-dbcp</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-coyote</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <!-- tomcat.version must be greater than 8.*.* <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jni</artifactId> 
            <version>${tomcat.version}</version> </dependency> -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-api</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-annotations-api</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina-ws</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina-ha</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina-ant</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
View Code

Tomcat組成結構

 

建立tomcat啟動類

public class TomcatStarter {
    public static void main(String[] args) throws LifecycleException {
        Tomcat tomcat = new Tomcat();
        // tomcat.setBaseDir("/temp");
        Server server = tomcat.getServer();
        // server.setPort(8080);
        Service service = tomcat.getService();
        service.setName("Tomcat-embbeded");
        Connector connector = tomcat.getConnector();
        // connector.setPort(8888);
        Context context = tomcat.addContext("", "/");
        tomcat.addServlet("", "test", new MyServlet());
        context.addServletMappingDecoded("/*", "test");
        server.start();
        server.await();
    }
}

實例初始化

tomcat

因為Tomcat啟動時,需要指定它的工作目錄(此原因還未深究),所以在建立Tomcat實例后,使用

tomcat.setBaseDir("/temp");

設置此目錄。如果為設置過此目錄,則默認會是“tomcat.8080”。8080是tomcat實例中設置的port值,默認為8080。

此外此目錄中,要確保有“webapps”目錄(此原因還未深究)。

server

通過

tomcat.getServer();

可獲得一個Server實例,並可以設置此server的port值,在此端口上監聽server關閉請求。

service

通過

tomcat.getService();

 

可獲得service實例,其真實類型為StandardService。

此service實際為上述創建的server中的service;

connector

通過

tomcat.getConnector();

可獲得一個connector實例,默認protocol為“HTTP/1.1”。

此connector實際上為上述創建的service中的connector。

connector.setPort(8888);

用於設置監聽的端口,即http請求時訪問的端口。

context

tomcat.addContext("", "/");

創建context時,會將默認的engine、host一同創建,因此在TomcatStarter中可以忽略其創建。

addContext中的兩個參數分別是contextPath和docBase。

contextPath:即網絡請求是的路徑;

docBase:即在tomcatBaseDir/webapps目錄下的目錄,可以不包含任何文件,但必須存在(此原因還未深究)。

這里同server.xml中的配置相似。

servlet

tomcat.addServlet("", "test", new MyServlet());

用於向指定的context添加servlet。

context.addServletMappingDecoded("/*", "test");

用於完成servlet在context中的映射配置。

這里同web.xml中的配置相似。

 

注意:context的顯示創建是不可以忽略的。

  • context用於映射網絡請求到具體的程序;

注意:service、connector、engine、host的顯式創建可以忽略。

  • engine、host會在context創建時創建;
  • server會在engine創建時創建;
  • service會在server創建時創建;
  • 如果沒有顯式創建connector,需要使用tomcat實例去設置port值,使用tomcat實例啟動服務時,會創建connector;

簡化后的TomcatStarter可以為

public class TomcatStarter {
    public static void main(String[] args) throws LifecycleException {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        Context context = tomcat.addContext("", "/");
        tomcat.addServlet("", "test", new MyServlet());
        context.addServletMappingDecoded("/*", "test");
        tomcat.start();
        tomcat.getServer().await();
    }
}

 啟動

server.start(); // 或者tomcat.start();
server.await(); //或者tomcat.getServer().await();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM