zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    c:forTokens标签循环输出
    jsp转long类型为date,并且格式化
    spring中@Param和mybatis中@Param使用区别(暂时还没接触)
    734. Sentence Similarity 有字典数组的相似句子
    246. Strobogrammatic Number 上下对称的数字
    720. Longest Word in Dictionary 能连续拼接出来的最长单词
    599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
    594. Longest Harmonious Subsequence强制差距为1的最长连续
    645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
    409. Longest Palindrome 最长对称串
  • 原文地址:https://www.cnblogs.com/mahuan2/p/6733566.html
Copyright © 2011-2022 走看看