Tomcat架构笔记

Tomcat架构笔记,第1张

Tomcat架构笔记

目录

1.Tomcat架构图

 2. Tomact组件

1.Server组件

2.Service组件

3.Connector组件

4.Engine组件

5.Host组件

6.Context组件

3.Tomcat处理请求过程

最后 创建一个Servlet案例

创建servlet

编译

创建 web.xml(项目的部署描述文件)

创建Web工程目录结构

访问Servlet

总结:


1.Tomcat架构图


 2. Tomact组件

 

1.Server组件 启动一个 server 实例(即一个 JVM ),它监听在 8005 端口以接收 shutdown 命令。 Server 的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个 Server 实例,必 须配置它们使用不同的端口。 port: 接收 shutdown 指令的端口,默认为 8005 ; shutdown :发往此 Server 用于实现关闭 tomcat 实例的命令字符串,默认为 SHUTDOWN ; 2.Service组件 Service 主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的 端口和协议接收请求并将其转发至关联的引擎进行处理。困此, Service 要包含一个引擎、一个或多个连接器。 3.Connector组件 支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。 默认只开启了处理 Http 协议的连接器。如果需要使用其他协议,需要在 Tomcat 中配置该协 议的连接器。                              port :监听的端口 protocol :连接器使用的协议,默认为 HTTP/1.1; connectionTimeout :等待客户端发送请求的超时时间,单位为毫秒 ; redirectPort :如果某连接器支持的协议是 HTTP ,当接收客户端发来的 HTTPS 请求时, 则转发至此属性定义的端口 ; maxThreads :支持的最大并发连接数,默认为 200 个 ; 4.Engine组件 Engine 是 Servlet 处理器的一个实例,即 servlet 引擎,定义在 server.xml 中的 Service 标 记中。 Engine 需要 defaultHost 属性来为其定义一个接收所有发往非明确定义虚拟主机的请 求的 host 组件。 name : Engine 组件的名称 ; defaultHost : Tomcat 支持基于 FQDN(Fully Qualified Domain Name 全限定域名 ) 的虚拟主 机,这些虚拟主机可以通过在 Engine 容器中定义多个不同的 Host 组件来实现;但如果此引 擎的连接器收到一个发往非非明确定义虚拟主机的请求时则需要将此请求发往一个默认的 虚拟主机进行处理,因此,在 Engine 中定义的多个虚拟主机的主机名称中至少要有一个跟 defaultHost 定义的主机名称同名; 5.Host组件 位于 Engine 容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行 Servlet 或者 JSP 来处理请求。 name :虚拟主机的名称, Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于 查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处 理; appbase :此 Host 的 webapps 目录,即指定存放 web 应用程序的目录的路径; autoDeploy :在 Tomcat 处于运行状态时放置于 appbase 目录中的应用程序文件是否自 动进行 deploy ;默认为 true ; unpackWARs :在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true ; 6.Context组件 Context 是 Host 的子标签,代表指定一个 Web 应用,它运行在某个指定的虚拟主机( Host ) 上;每个 Web 应用都是一个 WAR 文件,或文件的目录; path :context path 既浏览器访问项目的访问路径。 docbase :相应的 Web 应用程序的存放位置;也可以使用相对路径,起始路径为此 Context 所属 Host 中 appbase 定义的路径; 3.Tomcat处理请求过程 1 、用户访问 localhost:8080/test/index.jsp ,请求被发送到 Tomcat ,被监听 8080 端口并 处理 HTTP/1.1 协议的 Connector 获得。 2 、 Connector 把该请求交给它所在的 Service 的 Engine 来处理,并等待 Engine 的回应。 3 、 Engine 获得请求 localhost/test/index.jsp ,匹配所有的虚拟主机 Host 。 4 、 Engine 匹配到名为 localhost 的 Host 虚拟主机来处理 /test/index.jsp 请求(即使匹配 不到会请求交给默认 Host 处理), Host 会根据 /test 匹配它所拥有的所有的 Context 。 5 、匹配到的 Context 获得请求 /index.jsp 。 6 、构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用 JspServlet 的 doGet ()或 doPost () . 执行业务逻辑、数据存储等程序。 7 、 Context 把执行完之后的结果通过 HttpServletResponse 对象返回给 Host 。 8 、 Host 把 HttpServletResponse 返回给 Engine 。 9 、 Engine 把 HttpServletResponse 对象返回 Connector 。 10 、 Connector 把 HttpServletResponse 对象返回给客户 Browser。


最后 创建一个Servlet案例 创建servlet
package tomcat.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println(" ITBZ ");
        out.println("");
        out.println("Hello World");
        out.println("");
        out.println("");
        out.flush();
        out.close();
    }
}
编译 D:>javac -classpath "D:apache-tomcat-9.0.34libservlet-api.jar" HelloWorld.java 创建 web.xml(项目的部署描述文件)


        
            helloworld
            com.bjsxt.servlet.HelloWorld
        
        
            helloworld
            /hello
        
创建Web工程目录结构

 固定结构(文件名字和文件顺序,servlet文件写的包,对应到文件夹创建好,比如图中的文件本来是写在com.*****.servlet下的,所以创建了三个对应的文件夹)

访问Servlet

http://localhost:8080/servletdemo/hello

这样就算成功了

总结:

这个实例花的时间比较久,一开始做完的时候发现tomcat并不能顺利解析反馈,出现了404错误,然后我就开始找错误,不知道问题出在哪里,做了很多没有必要的工作

然后总结一下出问题的地方,希望下次注意点:

1.Webapps里面的固定格式不能错。

2.注意tomcat的版本对应的要求,之前没注意,使用javac的时候出现了警告,以为没事,

后来修改了(我用的是Tomcat9 我的JDK是7 所以出现警告并且出现问题(可能是这个引起的))。

3.就是单词拼写吧,在后面找错误的时候发现了好多单词拼写错误的。


 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5481271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存