博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat和应用集成
阅读量:4045 次
发布时间:2019-05-24

本文共 6831 字,大约阅读时间需要 22 分钟。

将tomcat作为应用的一部分集成到应用中,使得应用可以直接开启http服务,对外提供接口。此时应用程序不必再遵守j2ee中的文件目录格式要求。

此种方式改变了以往先部署tomcat容器,再按照j2ee标准目录格式部署应用的做法,简化了网络应用的部署工作,也方便了将现有模块功能网络化访问的需求。

建立maven工程

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

4.0.0
com.founder
embed-tomcat
8.0.1-SNAPSHOT
jar
tomcat
http://maven.apache.org
UTF-8
8.5.9
junit
junit
3.8.1
test
org.apache.tomcat
tomcat-util
${tomcat.version}
org.apache.tomcat
tomcat-servlet-api
${tomcat.version}
org.apache.tomcat
tomcat-juli
${tomcat.version}
org.apache.tomcat
tomcat-jsp-api
${tomcat.version}
org.apache.tomcat
tomcat-jdbc
${tomcat.version}
org.apache.tomcat
tomcat-jasper-el
${tomcat.version}
org.apache.tomcat
tomcat-jasper
${tomcat.version}
org.apache.tomcat
tomcat-i18n-ja
${tomcat.version}
org.apache.tomcat
tomcat-i18n-fr
${tomcat.version}
org.apache.tomcat
tomcat-i18n-es
${tomcat.version}
org.apache.tomcat
tomcat-el-api
${tomcat.version}
org.apache.tomcat
tomcat-dbcp
${tomcat.version}
org.apache.tomcat
tomcat-coyote
${tomcat.version}
org.apache.tomcat
tomcat-api
${tomcat.version}
org.apache.tomcat
tomcat-annotations-api
${tomcat.version}
org.apache.tomcat
tomcat-catalina-ws
${tomcat.version}
org.apache.tomcat
tomcat-catalina-ha
${tomcat.version}
org.apache.tomcat
tomcat-catalina-ant
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-jasper
${tomcat.version}
org.apache.maven.plugins
maven-compiler-plugin
2.1
1.8
1.8

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();

 

转载地址:http://vpwci.baihongyu.com/

你可能感兴趣的文章
如何用好碎片化时间,让思维更有效率?
查看>>
No.147 - LeetCode1108
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>