概要

  • 什么是tomcat?
  • tomcat作用
  • Servlet由来?做什么的?
  • Servlet是如何工作的?
  • Tomcat的组成
  • tomcat组件功能介绍

    tomcat介绍

1.什么是tomcat?

Tomcat是Servlet的运行环境,可以称之为容器,Tomcat是运行在JVM上的应用服务器

2.tomcat作用

  1. 接受请求并解析请求
  2. 处理请求
  3. 返回响应

3.Servlet由来?做什么的?

Servlet是SUN为了让Java能实现动态的可交互的网页,从而进入web编程的领域而定义的一套标准.

这套标准是这么说的: 你想用Java开发动态网页, 可以定义一个自己的”Servlet”,但一定要实现HTTPServlet接口,然后重载doGet(),doPost()方法.用户从流浪器GET的时候,调用doGet方法,从流浪器向服务器发送表单数据的时候,调用doPost方法,如果你想访问用户从浏览器传递过来的参数,用HttpServletRequest对象就好了,里面有getParameter,getQueryString方法,如果你处理完了,想向浏览器返回数据,用HttpServletResponse对象调用getPrintWriter方法就可以输出数据了. 如果你想实现一个购物车,需要session,很简单,从HttpServletRequest调用getSession方法就可以了.

4.Servlet是如何工作的?

  1. 由servlet容器创建一个实现ServletRequest或HttpServletRequest的实例,该request中包含请求类型,URL,协议,参数,Cookies等
  2. 由servlet容器创建一个实现ServletReponse或HttpServletReponse的实例,用来向Web客户端发送响应。
  3. 调用Servlet的service方法,将request对象和response对象作为参数传入。Servlet从request对象中读取信息,并通过response对象发送响应信息.

5.Tomcat的组成

  1. Server(服务器)和Service(服务)
  2. Connector(连接器)
    • HTTP
      • Nio
      • Apr
    • AJP(apache私有协议,用于tomcat和apache静态服务器通信)
  3. Container(容器)
    • Engine
    • Host
    • Context
    • Wrapper
  4. Component(组件)
    • Manager(管理器)
    • logger(日志管理)
    • loader(载入器)
    • pipeline(管道)
    • valve(管道中的阀)

Tomcat简介 - 图1

tomca组件功能

1.Server

Server为定义的接口,默认实现是StandardServer,主要作用有

  • 定义了 Servlet 容器的相关配置,即server.xml中的配置
  • 启动Server将启动所有的Tomcat组件,关闭Server将关闭所有组件

Server接口中重要的方法如下:

  1. public interface Server extends Lifecycle {
  2. public int getPort();
  3. public void setPort(int port);
  4. public String getAddress();
  5. public void setAddress(String address);
  6. public String getShutdown();
  7. public void setShutdown(String shutdown);
  8. public void addService(Service service);
  9. public Service findService(String name);
  10. public Service[] findServices();
  11. public void removeService(Service service);
  12. }

2.Service

Service为定义的接口,默认实现是StandardService,主要作用有

  • 逻辑上包含Connector和Container
  • Mapper:它封装了请求资源URI与每个相对应的处理wrapper容器的映射关系

Service接口中重要的方法如下:

  1. public interface Service extends Lifecycle {
  2. public Engine getContainer();
  3. public void setContainer(Engine engine);
  4. public String getName();
  5. public void setName(String name);
  6. public Server getServer();
  7. public void setServer(Server server);
  8. public void addConnector(Connector connector);
  9. public Connector[] findConnectors();
  10. public void removeConnector(Connector connector);
  11. Mapper getMapper();
  12. }

3.Connector

Connector为定义的连接器类,默认实现的协议有http、https、AJP,主要作用有

  • 根据不同的协议解析客户端的请求
  • 将解析完的请求转发给Connector关联的Engine容器处理

Connector默认支持的协议如下:

  1. /**
  2. * Defaults to using HTTP/1.1 NIO implementation.
  3. */
  4. public Connector() {
  5. this("org.apache.coyote.http11.Http11NioProtocol");
  6. }
  7. public Connector(String protocol) {
  8. boolean aprConnector = AprLifecycleListener.isAprAvailable() &&
  9. AprLifecycleListener.getUseAprConnector();
  10. if ("HTTP/1.1".equals(protocol) || protocol == null) {
  11. if (aprConnector) {
  12. protocolHandlerClassName = "org.apache.coyote.http11.Http11AprProtocol";
  13. } else {
  14. protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol";
  15. }
  16. } else if ("AJP/1.3".equals(protocol)) {
  17. if (aprConnector) {
  18. protocolHandlerClassName = "org.apache.coyote.ajp.AjpAprProtocol";
  19. } else {
  20. protocolHandlerClassName = "org.apache.coyote.ajp.AjpNioProtocol";
  21. }
  22. } else {
  23. protocolHandlerClassName = protocol;
  24. }
  25. // Instantiate protocol handler
  26. ProtocolHandler p = null;
  27. try {
  28. Class<?> clazz = Class.forName(protocolHandlerClassName);
  29. p = (ProtocolHandler) clazz.getConstructor().newInstance();
  30. } catch (Exception e) {
  31. log.error(sm.getString(
  32. "coyoteConnector.protocolHandlerInstantiationFailed"), e);
  33. } finally {
  34. this.protocolHandler = p;
  35. }
  36. }

4.Engine

Tomcat简介 - 图2

Engine为定义的接口,默认实现是StandardEngine,主要有以下模块:

  • Cluster:实现tomcat管理
  • Realm:实现用户权限管理模块
  • Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式。只是简单的将Connector传过来的变量传给Host容器

5.Host

Tomcat简介 - 图3

Host为定义的接口,默认实现是StandardHost,主要有以下模块:

  • Cluster:实现tomcat管理
  • Realm:实现用户权限管理模块
  • Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式

6.Context

Tomcat简介 - 图4

Context为定义的接口,默认实现是StandardContext,主要有以下模块:

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

7.Wrapper

Tomcat简介 - 图5

Wrapper为定义的接口,默认实现是StandardWrapper,主要有以下模块:

  • Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
  • Servlet和Servlet Stack:保存Wrapper包装的Servlet