在之前的章节中已经看到的是:如何初始化连接器和容器,并将它关联起来,并作为servlet 容器。
但是,前面只有一个连接器,通过端口8080对HTTP 请求进行服务。但你不能添加另一个连接器来处理例如HTTPS的请求。
另外之前的代码程序,都没有一套启动和停止 Servlet容器的机制。
Server 服务器
Server 接口表示整个Catalina Servlet 容器以及它的组件。
它提供了一套优雅的机制来启动和停止整个系统,不必再单独的启动和停止连接器和容器了
ublic interface Server extends Lifecycle {
// ------------------------------------------------------------- Properties
public NamingResourcesImpl getGlobalNamingResources();
public void setGlobalNamingResources
(NamingResourcesImpl globalNamingResources);
public javax.naming.Context getGlobalNamingContext();
/**
* @return the port number we listen to for shutdown commands.
*/
public int getPort();
/**
* Set the port number we listen to for shutdown commands.
*
* @param port The new port number
*/
public void setPort(int port);
/**
* @return the address on which we listen to for shutdown commands.
*/
public String getAddress();
/**
* Set the address on which we listen to for shutdown commands.
*
* @param address The new address
*/
public void setAddress(String address);
/**
* @return the shutdown command string we are waiting for.
*/
public String getShutdown();
/**
* Set the shutdown command we are waiting for.
*
* @param shutdown The new shutdown command
*/
public void setShutdown(String shutdown);
/**
* @return the parent class loader for this component. If not set, return
* {@link #getCatalina()} {@link Catalina#getParentClassLoader()}. If
* catalina has not been set, return the system class loader.
*/
public ClassLoader getParentClassLoader();
/**
* Set the parent class loader for this server.
*
* @param parent The new parent class loader
*/
public void setParentClassLoader(ClassLoader parent);
/**
* @return the outer Catalina startup/shutdown component if present.
*/
public Catalina getCatalina();
/**
* Set the outer Catalina startup/shutdown component if present.
*
* @param catalina the outer Catalina component
*/
public void setCatalina(Catalina catalina);
/**
* @return the configured base (instance) directory. Note that home and base
* may be the same (and are by default). If this is not set the value
* returned by {@link #getCatalinaHome()} will be used.
*/
public File getCatalinaBase();
/**
* Set the configured base (instance) directory. Note that home and base
* may be the same (and are by default).
*
* @param catalinaBase the configured base directory
*/
public void setCatalinaBase(File catalinaBase);
/**
* @return the configured home (binary) directory. Note that home and base
* may be the same (and are by default).
*/
public File getCatalinaHome();
/**
* Set the configured home (binary) directory. Note that home and base
* may be the same (and are by default).
*
* @param catalinaHome the configured home directory
*/
public void setCatalinaHome(File catalinaHome);
// --------------------------------------------------------- Public Methods
public void addService(Service service);
/**
* Wait until a proper shutdown command is received, then return.
*/
public void await();
public Service findService(String name);
public Service[] findServices();
public void removeService(Service service);
public Object getNamingToken();
}
Service 服务
Service 接口用于表示服务,一个服务可以有一个容器和多个连接器,并将它们跟容器相关联。
public interface Service extends Lifecycle {
// ------------------------------------------------------------- Properties
/**
* @return the <code>Engine</code> that handles requests for all
* <code>Connectors</code> associated with this Service.
*/
public Engine getContainer();
/**
* Set the <code>Engine</code> that handles requests for all
* <code>Connectors</code> associated with this Service.
*
* @param engine The new Engine
*/
public void setContainer(Engine engine);
public String getName();
public void setName(String name);
public Server getServer();
public void setServer(Server server);
public ClassLoader getParentClassLoader();
public void setParentClassLoader(ClassLoader parent);
public String getDomain();
// --------------------------------------------------------- Public Methods
public void addConnector(Connector connector);
public Connector[] findConnectors();
public void removeConnector(Connector connector);
public void addExecutor(Executor ex);
public Executor[] findExecutors();
public Executor getExecutor(String name);
public void removeExecutor(Executor ex);
Mapper getMapper();
}
容器和连接器
一个Service 实例包括两种组件:一个容器和多个连接器。
多个连接器可以使得Tomcat 能服务于多个协议,一个协议用来处理Http 请求,另一个用来处理Https 请求。