概要
1.什么是tomcat?
Tomcat是Servlet的运行环境,可以称之为容器,Tomcat是运行在JVM上的应用服务器
2.tomcat作用
- 接受请求并解析请求
- 处理请求
- 返回响应
3.Servlet由来?做什么的?
Servlet是SUN为了让Java能实现动态的可交互的网页,从而进入web编程的领域而定义的一套标准.
这套标准是这么说的: 你想用Java开发动态网页, 可以定义一个自己的”Servlet”,但一定要实现HTTPServlet接口,然后重载doGet(),doPost()方法.用户从流浪器GET的时候,调用doGet方法,从流浪器向服务器发送表单数据的时候,调用doPost方法,如果你想访问用户从浏览器传递过来的参数,用HttpServletRequest对象就好了,里面有getParameter,getQueryString方法,如果你处理完了,想向浏览器返回数据,用HttpServletResponse对象调用getPrintWriter方法就可以输出数据了. 如果你想实现一个购物车,需要session,很简单,从HttpServletRequest调用getSession方法就可以了.
4.Servlet是如何工作的?
- 由servlet容器创建一个实现ServletRequest或HttpServletRequest的实例,该request中包含请求类型,URL,协议,参数,Cookies等
- 由servlet容器创建一个实现ServletReponse或HttpServletReponse的实例,用来向Web客户端发送响应。
- 调用Servlet的service方法,将request对象和response对象作为参数传入。Servlet从request对象中读取信息,并通过response对象发送响应信息.
5.Tomcat的组成
- Server(服务器)和Service(服务)
- Connector(连接器)
- HTTP
- Nio
- Apr
- AJP(apache私有协议,用于tomcat和apache静态服务器通信)
- HTTP
- Container(容器)
- Engine
- Host
- Context
- Wrapper
- Component(组件)
- Manager(管理器)
- logger(日志管理)
- loader(载入器)
- pipeline(管道)
- valve(管道中的阀)

tomca组件功能
1.Server
Server为定义的接口,默认实现是StandardServer,主要作用有
- 定义了 Servlet 容器的相关配置,即
server.xml中的配置 - 启动
Server将启动所有的Tomcat组件,关闭Server将关闭所有组件
Server接口中重要的方法如下:
public interface Server extends Lifecycle {public int getPort();public void setPort(int port);public String getAddress();public void setAddress(String address);public String getShutdown();public void setShutdown(String shutdown);public void addService(Service service);public Service findService(String name);public Service[] findServices();public void removeService(Service service);}
2.Service
Service为定义的接口,默认实现是StandardService,主要作用有
- 逻辑上包含Connector和Container
- Mapper:它封装了请求资源URI与每个相对应的处理wrapper容器的映射关系
Service接口中重要的方法如下:
public interface Service extends Lifecycle {public Engine getContainer();public void setContainer(Engine engine);public String getName();public void setName(String name);public Server getServer();public void setServer(Server server);public void addConnector(Connector connector);public Connector[] findConnectors();public void removeConnector(Connector connector);Mapper getMapper();}
3.Connector
Connector为定义的连接器类,默认实现的协议有http、https、AJP,主要作用有
- 根据不同的协议解析客户端的请求
- 将解析完的请求转发给Connector关联的Engine容器处理
Connector默认支持的协议如下:
/*** Defaults to using HTTP/1.1 NIO implementation.*/public Connector() {this("org.apache.coyote.http11.Http11NioProtocol");}public Connector(String protocol) {boolean aprConnector = AprLifecycleListener.isAprAvailable() &&AprLifecycleListener.getUseAprConnector();if ("HTTP/1.1".equals(protocol) || protocol == null) {if (aprConnector) {protocolHandlerClassName = "org.apache.coyote.http11.Http11AprProtocol";} else {protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol";}} else if ("AJP/1.3".equals(protocol)) {if (aprConnector) {protocolHandlerClassName = "org.apache.coyote.ajp.AjpAprProtocol";} else {protocolHandlerClassName = "org.apache.coyote.ajp.AjpNioProtocol";}} else {protocolHandlerClassName = protocol;}// Instantiate protocol handlerProtocolHandler p = null;try {Class<?> clazz = Class.forName(protocolHandlerClassName);p = (ProtocolHandler) clazz.getConstructor().newInstance();} catch (Exception e) {log.error(sm.getString("coyoteConnector.protocolHandlerInstantiationFailed"), e);} finally {this.protocolHandler = p;}}
4.Engine

Engine为定义的接口,默认实现是StandardEngine,主要有以下模块:
- Cluster:实现tomcat管理
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式。只是简单的将Connector传过来的变量传给Host容器
5.Host

Host为定义的接口,默认实现是StandardHost,主要有以下模块:
- Cluster:实现tomcat管理
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
6.Context

Context为定义的接口,默认实现是StandardContext,主要有以下模块:
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
- Manager: 它主要是应用的session管理模块
- Resources: 它是每个web app对应的部署结构的封装
- Loader:它是对每个web app的自有的classloader的封装
- Mapper:它封装了请求资源URI与每个相对应的处理wrapper容器的映射关系
7.Wrapper

Wrapper为定义的接口,默认实现是StandardWrapper,主要有以下模块:
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
- Servlet和Servlet Stack:保存Wrapper包装的Servlet
