Tomcat接受用户访问的过程
在学习Servelt之前,我们首先要下载和安装Tomcat,这相当于一个容器,来完成对于客户的请求进行的一些相应的回应
用户访问一个接口URL在Tomcat当中的表现
Tomcat完成一个请求的完整步骤
1,客户发出要求访问特定Servlet的请求
2,Tomcat接收到客户的请求,对其进行解析
3,Tomcat创建一个ServletRequest对象,在这个对象中包含了客户请求信息以及关于客户相关的信息,比如请求头,请求正文,以及客户的ip地址等等。
4,Tomcat还要创建一个ServletResponse对象,表示响应的对象。
5,Tomcat调用客户请求的Servlet的service()服务器方法,并且把ServletRequest和ServletResponse作为参数传递给service方法。
6,Servlet从ServletRequest对象中获取客户信息或者其他一些有用信息
7,Servlet获取数据并且利用ServletResponse生成响应结果。
8,Tomcat解析ServletResponse之后把响应结果返回给客户。
Tomcat安装之后的目录结构
1,bin:存放可执行文件
2,conf:存放配置文件
3,lib:对应依赖的jar包
4,logs:存放tomcat日志文件的
5,temp:存放零食文件的目录
6,webapps:存放我们自己编写的web项目的目录
7,work:存放运行时候的一些数据
Tomcat的组成结构
Tomcat由一系列可配置的组件构成,其中核心组件是Servlet容器组件,他是所有其他Tomcat组件的顶层容器。Tomcat的各个组件可以在Tomcat安装目录下的conf目录下的server.xml中配置。都是以XML的方式做配置的。Tomcat的元素可以分为如下四大类:
1,顶层类元素
包括<Server>
和<Service>
元素,它们位于整个配置文件的顶层。
2,连接器元素
为<Connector>
元素,代表介于客户与服务器之间的通信接口,负责将客户请求发送给服务器,并将返回结果发送给客户端。
3,容器类元素
代表处理客户请求,并生成响应结果的组件,有四种容器元素,分别是<Engine>,<Host>,<Context>和<Cluster>元素。
4,嵌套类元素:
代表可以嵌入到容器中的组件,比如<value>元素和<Realm>
元素。
下面我们一一对各个元素进行解释:
1,<Server>
元素:
<Server>
元素代表整个Servlet容器组件,他是Tomcat的顶层元素。用大白话来说,你可以理解成为这个元素代表着我们的Tomcat服务器。<Server>
元素中可以包含一个或者多个<Service>
元素。
2,<Service>
元素:
service元素包含一个<Engine>
元素,以及一个或者多个<Connector>
元素,这些<Connector>
都共享一个<Engine>
3,<Connector>
元素:
代表和客户程序实际交互的组件,他负责接收客户请求,以及向客户返回响应结果。
4,<Engine>
元素:
每个<Service>
元素只能包含一个<Engine>
元素。<Engine>
元素处理在同一个<Service>
中所有<Connector>
元素接收到的客户请求。
5,<Host>
元素:
一个<Engine>
元素可以包含多个<Host>
元素。每个<Host>
元素定义了一个虚拟主机,它可以包含一个或者多个Web应用。
6,<Context>
元素:
<Context>元素是使用最频繁的元素。每个<Context>元素代表了运行在虚拟机上的单个web应用,一个<Host>元素中可以包含多个<Context>元素。
Tomcat部署Web项目
1,直接部署
1,比如我们在本地创建一个目录,名字叫做hellotomcat,然后我们再在这个目录下编写一个index.html文件
2,把这个目录赋值到tomcat下面的webapps目录下面面就好了
3,启动Tomcat,然后访问对应页面:
2,war包部署
有可能我们的项目中有大量的文件,如果我们直接赋值目录到webapps下,可能速度很慢。我们就可以使用war包部署。
1,删除我们刚刚赋值的webapps目录下面的hellotomcat。
2,对我们编写的hellotomcat目录压缩,压缩成zip格式,然后修改问你件的后缀名为war。
3,复制这个war包到tomcat安装目录下的webapps下面。
4,如果tomcat服务器启动着,那么会自动解压这个war包,并生成对应的hellotomcat文件。
3,外部目录部署
用上面的两种方式,我们还需要拷贝项目到tomcat,并且我们的项目的路径和访问的路径必须一模一样。其实是挺麻烦的。如果我们希望访问路径和项目路径不一样怎么办?
1,首先关闭tomcat。
2,进入conf目录下,编辑server.xml。
3,把滚动条拉动server.xml的最下面,然后再Host标签中配置我们的项目:
4,重启tomcat,然后访问:
这种方式部署非常的灵活,可以通过配置server.xml文件就达到目的,可以自定义访问的路径,可以不用拷贝。但是server.xml是tomcat的核心配置文件,我们一般情况下对于这种核心的配置文件,我们最好是不要修改它。稍不注意可能就会导致tomcat无法启动。非常的不安全。并且server.xml修改之后,还需要重启tomcat才会生效,非常麻烦。
4,Catalina配置部署
1,在config\Catalina\localhost目录下创建一个任意名字的xml,比如hehe.xml。
2,在hehe.xml中添加如下配置:
3,重启tomcat服务器,访问http://localhost:8080/hehe。然后重新访问。我们这里访问具体的web应用的路径和我们配置文件的名字是一样的。
4,在这种方式下,如果我们修改了hehe.xml,不用重启tomcat服务器,非常方便。
idea集成tomcat
1,配置tomcat
1,点击idea的run菜单,点击Edit Configurations菜单项
2,点击左上角的加号:
然后点击more items:
选择Tomcat Server,然后选择Local,然后,然后我们配置好tomcat的安装目录
3, 创建一个javaweb项目:
新建一个模块,选择javaweb类型项目
4,我们编辑我们项目中的index.jsp:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/3/22
Time: 14:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Vge Hello jee</title>
</head>
<body>
<h1>Vge Hello jee</h1>
</body>
</html>
5,然后直接启动tomcat就好了,这个时候可能启动不成功,是因为我们tomcat的server.xml中配置的shutdown端口号是-1:
<Server port="-1" shutdown="SHUTDOWN">
这个时候我们随便填写一个1到65535之间的端口号就醒了
6,如果发现控制台输出乱码,修改conf/logging.properties:
java.util.logging.ConsoleHandler.encoding = GBK