所写博客的相关资料来自本网站和其他,只属于加上了个人理解的笔记整理,仅用于个人学习,如有侵权行为可联系删除。
文章目录
一、介绍
1. Web 服务器
- 服务器上的资源分类
-
静态资源:指web页面中供人们浏览的数据始终是不变,例如html、css、js、图片等
-
动态资源:指web页面中提供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同,例如JSP/Servlet、php、asp
-
2. Tomcat 服务器
-
介绍:是一个免费的开放源代码的Web应用服务器,支持jsp和servlets,属于轻量级应用服务器
- servlet其实就是java程序,只是在服务器端的java程序
- 用来处理网络传输过来的一些请求,比如http请求并处理请求、返回数据
- 比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,而tomcat就是帮助你创建servlet的东西,所以也称web容器,是jsp和servlets的容器
-
Tomcat与Apache:前者是后者的扩展,处理动态网页部分
- Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet
- Tomcat处理静态HTML的能力不如Apache服务器
-
虽然是Apache的扩展,但运行时Tomcat是独立的,它实际上作为一个与Apache 独立的进程单独运行的
3. 访问Tomcat服务器的方法
- 使⽤localhost域名访问:localhost代表本机
- 使⽤ip地址127.0.0.1访问:该ip地址也是本机
- 使⽤机器名称访问:只限⽤于本机上或者局域⽹
- 使⽤本机IP地址访问
- 为机器配置临时域名
二、Tomcat目录结构
1. 目录层次结构
- work:⼯作⽬录,⽤于存放jsp被访问后⽣成对应的server⽂件和.class⽂件
2. 配置文件
-
server.xml:配置与server相关的信息
- ⽐如tomcat启动的端⼝号,配置主机(Host)
-
web.xml:用于配置servlet 和 web应⽤(web应⽤相当于⼀个web站点)
-
tomcat-user.xml:配置⽤户名密码和相关权限
3. webapps目录
-
如何建立对web应用的管理
- 在webapps中建⽴了web1⽬录,下⾯放置我们的html、jsp、图⽚等等,则web1就被当做web应⽤管理起来
-
web站点的目录规范
-
目录结构
-
示例
-
-
如何设置web站点的⾸⻚:在WEB-INF/web.xml中配置
<welcome-file-list> <welcome-file>helloword2.html</welcome-file> </welcome-file-list>
三、Tomcat的配置
1. 配置虚拟目录
-
为什么需要配置虚拟目录:如果把所有的web站点的目录都放在webapps下,可能导致磁盘空间不足,也不利于对web站点⽬录的管理
-
意义:可以把web站点的⽬录分散到其他磁盘管理
-
方法:虚拟⽬录的映射——把web应⽤所在⽬录交给web服务器tomcat管理
-
配置方法1:在conf/server.xml⽂件中的节点下添加web站点⽬录的相关代码
<Context path="/web" docBase="D:\web1"/> # path:web项⽬名 # docBase:站点⽬录的绝对路径
-
配置方法2:在conf\Catalina\localhost文件下,创建⼀个xml⽂件,该⽂件的名字就是站点的名字,xml文件里的代码如下
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="D:\web1" reloadable="true"> </Context>
-
2. 配置临时域名
- 在C:\Windows\System32\drivers\etc\hosts文件里配置
3. 配置虚拟主机
-
虚拟主机:把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器
-
为什么需要⽤到虚拟主机:可以把多个不同域名的⽹站共存于⼀个Tomcat中
- 例如:我现在开发了4个⽹站,有4个域名。如果我不配置虚拟主机,⼀个Tomcat服务器运⾏⼀个⽹站,我就需要4台电脑才能把4个⽹站运⾏起来
-
配置方法:在server.xml⽂件中添加主机名
<Host name="zhongfucheng" appBase="D:\web1"> <Context path="/web1" docBase="D:\web1"/> </Host>
-
注意:在工作环境中,我们一般不会为Tomcat创建虚拟主机的
- 因为我们只会用Nginx或Apache来处理静态请求,Tomcat负责处理动态请求,所以创建虚拟主机的工作是由Nginx完成的
- 因为tomcat处理并发的能力不强,所以一般不会让Tomcat做web服务的,Tomcat可以创建多实例来配合Nginx虚拟主机完成多业务
四、Tomcat体系结构
1. 核心组件
- Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来完成 Tomcat 的两大核心功能
-
Connector:负责对外交流——处理Socket连接,负责⽹络字节流与Request和Response对象的转化
-
Container:负责内部处理——加载和管理Servlet,以及具体处理Request请求
-
2. 组件介绍
-
Server(服务器):是Tomcat构成的顶级构成元素,所有一切均包含在Server中
-
Service(服务):一个Server包含多个Service,它将若干个Connector组件绑定到一个Container
-
Container(容器):Container组件下有几种具体的组件,分别是Engine、Host、Context和Wrapper,这4种组件(容器)是父子关系
- Tomcat通过一种分层的架构,使得Servlet容器具有很好的灵活性
-
Engine:用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可包含多个Host
-
Host:代表一个虚拟主机,或者说一个站点,而一个虚拟主机下可包含多个 Context
-
Context:表示一个Web应用程序, 一个Web应⽤可包含多个Wrapper
-
Wrapper:表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器
ps:上述组件的配置其实就体现在conf/server.xml中
五、Tomcat请求过程
① 用户点击网页内容,请求被发送到服务器所在机器的端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得
② 连接服务器:Connector把该请求交给它所在的Service的Engine来处理,并等到Engine的回应
③ 解析主机名:Engine请求localhost/test/index.jsp,匹配所有的虚拟主机Host
④ 解析Web应用:Engine匹配到名为localhost的Host,其获得请求/test/index.jsp,匹配它所拥有的所有的Context
- 如果找不到,默认交给名为localhost的Host处理,因为该Host被定义为该Engine的默认主机
⑤ 解析资源名:path=“/test”的Context获得请求/index.jsp,并在其mapping table中寻找出对应的Servlet
⑥ 获取资源:构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet() 或 doPost(),并执行业务逻辑、数据存储等程序
⑦~⑩ 返回资源:一层层地将HttpServletResponse对象返回给上一级,最后返回给客户端
六、浏览器如何访问Web资源
七、参考资料
- 《三歪教你学Servlet》(源自:公众号Java3y)
- https://www.cnblogs.com/hggen/p/6264475.html
- https://blog.csdn.net/qq_23830637/article/details/104497094