Tomcat详解阅读摘要

Tomcat和apache结合的非常完美。

首先从目录上了解

bin目录:存放启用和关闭的脚本

conf目录:放不同的配置文件

doc目录:存放文档

lib目录:存放Tomcat运行的库文件

temp目录:Tomcat源码

webapps目录:wbe发布目录

work目录:存放jsp编译后的class文件


我们来通过,apache和tomcat的区别来理解,tomcat的特性。

 Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器
Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序,只能支持静态网页
由于两者相互独立,所以经常看到2者集成起来一起使用。
引用别人的例子:
Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。
Apache只支持静态网页,但像asp,php,cgi,jsp等动态网页就需要Tomcat来处理



组成:

1.server

2.service :由一个或多个connector组成,和一个engine,来处理所有Connector获得的客户请求

3.connector:一个connector会在某个端口上监听客户请求。并将请求交给engine来处理。

   (比如:Http/1.1 Connector,在8080端口监听来自brower浏览器的请求。JK2 Connector,在8009端口监听来自其他web服务器(Apache)的servlet/jsp请求)

4.Engine:可配置多个虚拟主机,每个虚拟主机(Host)都有一个域名。当Engine获得一个请求,会匹配到相应的虚拟主机。由相应的主机处理。还有一个默认的主机。都没有匹配到,由默认处理。

5.Host:代表一个虚拟主机。每个都有网络域名Domain Name。每个主机下面都可以部署一个或多个webApp。每个webApp都对应一个Context。当Host获得一个请求的时候,会把请求匹配到某个Context,由Context来处理。(匹配方式“名字最长匹配”)

6.Context:相当于一个webApplication。它是由多个servlet组成。Context在创建的时候,根据$CATALINA_HOME下的web.xml和$WEBAPP下面的web.xml载入Servlet类。当context获得请求的时候,将在自己映射表(mappingtable)找相应的Servlet去处理。


介绍一下,catalina下的server.xml。

首先有一个默认的servlet,匹配不到之后找改servlet。

invokerServlet,没有在web.xml定义的servlet,自动映射成,/servlet/className。

JSPservlet,当请求是一个JSP页面的时候。它是一个编译器,编译成servlet再执行。

ServiceName,StandloneService,由一组connector的集合组成。他们共用一个engine

ConnectorclassName,Coyote http/1.1 Connector,监听客户的请求。

enginename,用来处理Connector收到Http请求,将匹配到自己的虚拟主机。默认localhost

hostname,虚拟主机,它的属性,appBase,根目录是webapps/

contextpatch,本虚拟主机用的context,如果为""空,则是默认的context,属性,docBase,该context的根目录是webapps下的什么文档。(可以配多个)


webapp载入servlet的顺序

一个context对应一个webapp,每个webapp由多个servlet。先载入catalina下的servlet,之后载入web-inf/web.xml的servlet。


从浏览器到tomcat处理请求的过程:

首先发送一个请求http://localhost:8080/pos-web/index.jsp

1.请求被本机的8080端口的Coyote HTTP/1.1 Connector获得

2.Connector把请求交给所在的Engine处理,并等待engine响应。

3.engine获得请求的localhost/pos-web/index.jsp,匹配它拥有的虚拟主机(此处是localhost主机)

4.找到localhost的主机(由于该主机是默认主机,及时匹配不到也是由该主机处理)

5.主机Host获得请求 /pos-web/index.jsp,匹配它拥有的context

6.Host匹配到/pos-web的Context,匹配不到就用默认的""context

7.contextpatch="/pos-web"的context获得请求/index.jsp,它根据映射,找到对应的servlet

8.context匹配到url pattern为*.jsp的Servlet(根据后缀来区分)

9.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用,相应的servlet(此处是JspServlet)的doGet()或doPost()

10.Context把执行完之后的HttpServletResponse对象返回给Host

11.Host把HttpServletResponse对象返回给engine

12.engine把HttpServletResponse对象返回给Connector

13.Connector把HttpServletResponse对象返回给browser


Tomcat启动脚本分析

一般我们都是在dos下执行tomcat的bin下的startup.bat

该脚本,首先设置了CATALINA_HOME的环境变量,让该变量指向tomcat安装目录

在安装目录下找catalina.bat,找到则执行,找不到则报错。 在执行之前会找参数,dos下第一个参数调用“%1”第二个使用“%2”,脚本参数未知的情况下,使用goto调用shift命令得到所有参数。


这里为什么通过startup脚本来调catalina的脚本。为何不写在一起?默认情况下,startup只能放在两个位置,一个tomcat安装目录。另一个tomcat安装目录bin的子目录。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值