1、Server.xml
从tomcat的server.xml中我们可以看到tomcat的相关模块设计,从server.xml文件中解析出来的各个对象都是容器,比如Server、service、Connector和host等,这些容器都有新建、初始化、启动、停止、失败和销毁等状态。
Server.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<!--服务器-->
<Server port="8005" shutdown="SHUTDOWN">
<!--服务-->
<Service name="Catalina">
<!--连接器-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--连接器-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--引擎-->
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
2、Tomcat生命周期管理模块的主要类
StandardServer、StandardService、Connector、StandardContext这些容器,彼此之间都有父子关系,每个容器都可能包含零个或者多个子容器,这些子容器可能存在不同类型或者相同类型的多个,如下图:
3、Tomcat创建web服务编程:
import java.io.File;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Server;
import org.apache.catalina.Service;
import org.apache.catalina.Wrapper;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.core.StandardService;
import org.apache.catalina.startup.Tomcat.FixContextListener;
public class Tomcat2 {
public static void main(String[] args) {
System.setProperty("catalina.base", System.getProperty("user.dir"));
System.err.println("start TestTomcat");
//创建连接器
Connector connector = new Connector("HTTP/1.1");
connector.setPort(8080);
//创建上下文容器
Context context = new StandardContext();
context.setPath("/context");
//创建servlet包装类
Wrapper defaultServlet = context.createWrapper();
defaultServlet.setName("test");
defaultServlet.setServletClass("com.xxxx.servlet.TestServlet");
defaultServlet.setLoadOnStartup(1);
defaultServlet.setOverridable(true);
//上下文容器中添加servlet
context.addChild(defaultServlet);
context.addServletMappingDecoded("/test", "test");
context.addLifecycleListener(new FixContextListener());
//创建host
Host host = new StandardHost();
host.addChild(context);
host.setName("localhost");
host.setAppBase(System.getProperty("user.dir") + File.separator + ".");
//创建引擎
Engine engine = new StandardEngine();
engine.setName("Tomcat");
engine.addChild(host);
engine.setDefaultHost("localhost");
engine.getCatalinaBase();
//创建一个服务,作为服务器server中的一个服务
Service service = new StandardService();
service.setName("Tomcat");
service.setContainer(engine );
service.addConnector(connector);
//创建服务器
Server server = new StandardServer();
server.setPort(-1);
server.addService(service);
server.setCatalinaBase(new File(System.getProperty("user.dir")));
server.setCatalinaHome(new File(System.getProperty("user.dir")));
if (server instanceof Lifecycle) {
try {
//初始化服务
server.init();
//启动服务
((Lifecycle) server).start();
//挂起服务
server.await();
}
catch (LifecycleException e) {
e.printStackTrace(System.out);
}
}
// Shut down the server
if (server instanceof Lifecycle) {
try {
((Lifecycle) server).stop();
}
catch (LifecycleException e) {
e.printStackTrace(System.out);
}
}
}
}