赞
踩
有了坚持不一定成功;但没有坚持,就注定失败。对于成功,坚持的塑造必不可少!
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
Tomcat结构图:
Tomcat主要组件:服务器Server,服务Service,连接器Connector、容器Container, 连接器Connector和容器Container是Tomcat的核心。
一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了,但是Service服务的生存需要一个环境,这个环境便是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件可以同时管理一个或多个Service服务。
1、Connector组件
Connector组件是Tomcat中的两个核心组件之一,他的主要任务是负责接收浏览器发过来的TCP连接请求,创建一个Request和Response对象分别用于和请求端交换数据。然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给处理这个请求的线程,处理这个请求的线程就是Container组件要做的事了。
2、Container组件
Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。
Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。
小贴士:war 程序就是一个web应用程序,具体可看: war文件—Web项目部署
Engine 容器 | Engine 容器比较简单,它只定义了一些基本的关联关系 |
---|---|
Host 容器 | Host 是 Engine 的子容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。 |
Context 容器 | Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat 5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的。 |
Wrapper 容器 | Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。 Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。 |
其他组件: 安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。
具体两大组件介绍请移步:
|—bin Tomcat:存放启动和关闭tomcat脚本;
|—conf Tomcat:存放不同的配置文件(server.xml和web.xml);
|—doc:存放Tomcat文档;
|—lib/japser/common:存放Tomcat运行需要的库文件(JARS);
|—logs:存放Tomcat执行时的LOG文件;
|—src:存放Tomcat的源代码;
|—webapps:Tomcat的主要Web发布目录(包括应用程序示例);
|—work:存放jsp编译后产生的class文件;
Bootstrap($ JAVA_HOME/jre/lib/ext/.jar)
System($ CLASSPATH/.class和指定的jar)
Common($ CATALINA_HOME/common 下的classes,lib,endores三个子目录)
Catalina ($ CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见)
&Shared($ CATALINA_HOME/shared/下的classes和lib目录以及$ CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见WebApp($ WEBAPP/Web-INF/仅对该WEB应用可见classes/.classlib/*.jar)
加载类和资源的顺序为:
1、/Web-INF/classes
2、/Web-INF/lib/.jar
3、Bootstrap
4、System
5、$ CATALINA_HOME/common/classes
6、$ CATALINA_HOME/common/endores/.jar
7、$ CATALINA_HOME/common/lib/.jar
8、$ CATALINA_HOME/shared/classes
9、$ CATALINA_HOME/shared/lib/.jar
Tomcat Server处理一个HTTP请求的过程
1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的 HTTP/1.1 Connector 获得。
2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3、Engine获得请求 localhost/test/index.jsp,匹配所有的虚拟主机Host。
4、Engine匹配到名为 localhost 的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的 doGet()或doPost().执行业务逻辑、数据存储等程序。
7、Context把执行完之后的HttpServletResponse对象返回给Host。
8、Host把HttpServletResponse对象返回给Engine。
9、Engine把HttpServletResponse对象返回Connector。
10、Connector把HttpServletResponse对象返回给客户Browser。
此处借鉴: Tomcat(一):简介
6.1、 启动Tomcat
6.2、在浏览器地址栏中输入:http://localhost:8080 或者 http://本地ip:8080,如果看到如下页面,证明启动成功
6.3、关于 Tomcat 无法正常启动几种常见原因:
问题一:环境变量
1、检查jdk
验证jdk的配置,在运行-cmd中输入 java -version
即表示安装成功。
如果jdk没有问题,还需要配置两个环境变量。找到 jdk 和 jre 的路径,配置JAVA_HOME 和 JRE_HOME,变量值为jdk的安装路径。
如果不清楚是否配置成功,可使用命令来检查。如下图,提示JRE_HOME变量没有配置成功。
在tomcat bin目录下运行 cmd 输入 startup
进行检测
2、配置Tomcat环境变量
需要新建的变量名为:CATALINA_BASE和CATALINA_HOME。
1)若Tomcat为需要安装的版本,假定安装路径为 C:\tomcat.
CATALINA_BASE:C:\tomcat
CATALINA_HOME:C:\tomcat
修改Path,在其变量值中添加 %CATALINA_HOME%\lib;%CATALINA_HOME%\bin。
2)若为免安装的版本,直接写解压后的路径即可。
CATALINA_BASE:E:\apache-tomcat-8.5.31-windows-64位
CATALINA_HOME:E:\apache-tomcat-8.5.31-windows-64位
问题一:端口占用
修改端口即可
6.4、 配置Tomcat的端口
tomcat默认的端口是8080(访问端口)
http 的默认端口是80,如果访问的时候输入http://www.baidu.com相当于http://www.baidu.com:80。当真正在项目上线之后,通常采用80,修改方法如下:
1)找到tomcat目录/conf/server.xml
2)修改port的值,将port端口的值修改为80
3)然后在浏览器中输入 http://localhost:80 或 http://本地ip 访问测试
配置没问题,访问成功。
小技巧: 使用
catalina run
命令来 启动 Tomcat(在Tomcat 的 bin 目录 中打开 cmd 输入命令)
好处: 当Tomcat启动失败的时候,会有一闪而过的情况,当我们使用 catalina run
这个命令启动Tomcat的时候,出现错误,我们可以清楚的看到tomcat失败的原因,不会一闪而过,更方便找出错误。
6.5、 Tomcat服务关闭:
第一种:Ctrl+C键 关闭 Tomcat服务器
第二种:点击Tomcat窗口的右上角关闭按钮 (暴力停止服务器,常用声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/217096
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。