• 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();
  • 相关阅读:
    Python 之解析配置文件模块ConfigParser
    SonarQube代码质量管理平台
    SVN代码统计工具StatSVN
    python 3接口测试
    python+selenium使用chrome时,报错ignore certificate errors
    python3发送邮件(有附件)
    日记
    杂记 包含 serialize().ajaxStart() .ajaxStop()以及其他
    还是要说一下XML。全当日记
    桑心!XML
  • 原文地址:https://www.cnblogs.com/mahuan2/p/6733566.html
Copyright © 2020-2023  润新知