启动嵌入式Tomcat
从Tomcat5.0开始提供和支持Embeded版本,即最简化Tomcat Server,下面就针对Tomcat Server的Embeded版本进行介绍,怎样把Tomcat集成到Java应用中。
首先可以在http://apache.mirrors.versehost.com/jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28-embed.tar.gz 下载Tomcat的Embeded版本,下载解压后把最里层的jakarta-tomcat-5.0.28-embed目录copy到容易查找的目录,为简易需要更名为tomcat-embed,作为嵌入Tomcat的工作目录。
首先我们需要了解Tomcat在工作时的层次情况,它按照:
<Server>
<Service>
<Connector />
<Engine>
<Host>
<Context 1/>
<Context 2/>
<Context n…/>
</Host>
</Engine>
</Service>
</Server>
这样的结构表明Tomcat Embeded工作时实例结构情况,一个Server含有1个Connector和1个Engine,其中Engine里含有1个Host,1个Host 内可以含有多个Context,Context代表Web应用,即1个Host里可以包含多个Web应用。
接下来在创建开发应用的项目后,我们需要把tomcat-embed目录下的lib内的所有jar包引入到项目的环境中,也就是说把这些Jar文件放到BuildPath中间去,这样就完成了项目开发环境的搭建。
在具体应用时启动嵌入式Tomcat,需要根据以下步骤(主要是参照上面的结构图):
1)创建org.apache.catalina.startup.Embedded实例,其代表嵌入式Tomcat Server的实例;
2)创建org.apache.catalina.Engine 实例,代表上面XML结构示例中的Engine,作为容器用来包含Host节点;
3)创建org.apache.catalina.Host实例,代表虚拟主机服务,把它加入到2)中产生的Engine中去;
4)创建一个或多个org.apache.catalina.Context实例,代表具体Web应用,每个Web应用都需要加入到3)产生的Host中;
5)最后创建org.apache.catalina.Connector实例,把它加入2)创建的Engine中,它用来接收客户发出的请求。
import java.io.File; import java.net.InetAddress; import java.net.UnknownHostException; import org.apache.catalina.Context; import org.apache.catalina.Engine; import org.apache.catalina.Host; import org.apache.catalina.startup.Embedded; public class TomcatService { private static Embedded tomcat; public static void main(String[] args) { // set the path for tomcat embed String path = "F:/myDaRepository/apache-tomcat-embed"; Embedded tc = createTomcat(path); try { tc.start(); System.out.println("Tomcat Server start over"); // tc.stop(); } catch (Exception e) { e.printStackTrace(); } } private static Embedded createTomcat(String path) { // create Tomcat Server Instance tomcat = new Embedded(); // set the tomcat home tomcat.setCatalinaHome(path); // create the Tomcat engine Engine engine = tomcat.createEngine(); engine.setName("MyTestServer"); // create the host Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome() + "/webapps"); // put the host into engine engine.addChild(host); engine.setDefaultHost(host.getName()); String javayouPath = host.getAppBase() + "/CloudscapeDemo"; if (!new File(javayouPath).exists()) { System.err.println("Please test if the javayou exists"); return null; } System.out.println("javayouPath"+javayouPath); // create the context, and add it to the host Context ctxtJavayou = tomcat .createContext("/CloudscapeDemo", javayouPath); host.addChild(ctxtJavayou); tomcat.addEngine(engine); try { // put the Connector to Tomcat,listen the local visit from 127.0.0.1 tomcat.addConnector(tomcat.createConnector(InetAddress .getByName("127.0.0.1"), 8080, false)); } catch (UnknownHostException e) { System.err .println("can not bind tomcat Server to the localhost 127.0.0.1:8080;test the host is free"); e.printStackTrace(); tomcat = null; } return tomcat; } public void shutdown() throws Exception { tomcat.stop(); } }
打开IE,输入http://localhost:8080/CloudscapeDemo/HelloCloudscape.jsp,就可以看到运行结果了,Jsp和Servlet在预编译的时候稍显有些慢,之后感觉就和Tomcat实际运行的差不多了。
如果需要设置Host中的默认Web应用,如把javayou设置成默认的Web应用,则参考下面例子:
//创建CloudscapeDemo的Context,虚拟路径为"",而物理路径设置为 ../CloudscapeDemo
Context ctxtJavayou = tomcat.createContext("",host.getAppBase() +"/CloudscapeDemo");
ctxtJavayou.setPrivileged(true);
host.addChild(ctxtRoot);
用来替换上面例子中ctxJavayou的创建,编译后重新启动服务,则通过http://localhost:8080/HelloCloudscape.jsp
也可以访问了。
在这里需要注意,由于嵌入式版本Tomcat没有common/lib目录,一些需要的Jar包可以复制到JDK的/jre/lib/endorsed目录下进行使用。
对于Tomcat5 Embeded版本的使用介绍就到这里。在我们的印象中AppServer是复杂而消耗资源的,能把一个Tomcat整合到你的应用中,是个有趣的想法, 除此之外,它也可以让你方便的整合和调试具有后台应用的Web服务,也可以让你整改早前的胖客户应用程序,使它支持Web功能,还可以用来开发支持Web 功能的自己的服务器,当然还可以扩展更多,但需要我们的有想法。
阅读更多
- 使用embeded tomcat进行嵌入式tomcat-启动tomcat
- gradle中使用嵌入式(embedded) tomcat, debug 启动
- 程序实现启动和停止嵌入式Tomcat Web服务器
- 使用embeded tomcat进行嵌入式javaee开发-启动tomcat
- gradle中使用嵌入式(embedded) tomcat, debug 启动
- springboot启动嵌入式tomcat报错找不到jar包,关键字:FileNotFoundException,derbyLocale_cs.jar,StandardJarScanner.scan
- 使用嵌入式tomcat启动web项目
- 启动嵌入式Tomcat
- Tomcat嵌入式启动
- tomcat下启动cxf
- 在pom.xml文件中配置嵌入式tomcat运行j2ee项目
- tomcat 7/8 启动非常慢的解决方法
- Tomcat启动时方法启动
- Linux下Tomcat开机自动启动
- Tomcat 启动失败 解决方法
- Tomcat 启动报错:host-manager does not exist or is not a readable directory
- 一个tomcat启动失败问题
- Spring Boot (一) 基础搭建、兼容jar启动及war tomcat启动、集成Swagger2 API。
- 在Tomcat中启动Servlet激活器的时候,出现异常
- linux tomcat启动权限不足