Tomcat 服务器基础
Web 相关概念
Web 资源
Web资源一般来说可以分为静态资源和动态资源:
静态资源:供人浏览内容不变的资源,比如 html 页面。
动态资源:供人浏览内容会根据不同的情况变化的资源,这些是由应用程序产生的。
静态 Web 开发技术:html
动态 Web 开发技术:JSP/Serv let ASP PHP
Web 应用程序
将一系列的 Web 资源整合在一起,对外提供服务,这就是 Web 应用程序。一个 Web 应用程序由静态资源和动态资源组成:HTML、CSS、JavaScript、JSP、Java、Jar 等等。
这些 Web 资源开发好之后,如果想要给其他人使用,则需要交给 Web 服务器管理资源的访问。
静态/动态
对于静态资源,客户端请求之后,Web 服务器会直接从存储有静态页面的磁盘里面读取文件内容,然后在发送给客户端。客户端的浏览器经过渲染分析,得到了最终的显示效果。
对于动态资源,客户端请求之后,Web 服务器回将请求交给 Web Container 容器处理,Web Container 经过分析请求之后,会根据请求和数据库里面的记录信息动态的拼接出来页面,然后把内容交给 Web 服务器,Web 服务器再将内容给客户端。
Web 服务器 / 容器
Web 服务器:Web Server, Web 服务器是指能为发出请求的浏览器提供文档的程序。服务器是一种被动程序,只有浏览器发出请求的时候才会响应。应用层使用的是 HTTP 协议。目前最主流的三个 Web 服务器是 Apache、Nginx 和 IIS。
Web 容器:Web Container,Web 容器是一种服务程序,是可以部署多个 Web 应用程序的环境,负责调用管理这些 Web 应用程序。
而我们使用的 Tomcat 既是一个 Web 服务器,也是一个 Web 容器。
Tomcat 基础
文件结构
Tomcat 的启动
方法一:运行 bin 目录下的 start.bat
方法二:CMD 在 bin 目录运行 catalina run
端口修改
在 config 的 server.xml 配置文件中修改 Connector。当 xml 文件修改之后,就必须重启 Tomcat 服务器,来重新获得配置信息。
虚拟目录映射和部署
将 Web 应用程序放到 Tomcat 里面的 webapps 文件夹里面,这样启动 Tomcat 之后就可以访问了 Web 应用程序的资源了。
在
.\conf\server.xml
中的<host></host>
之间插入路径和文件名之间的映射,但是因为修改了服务器的配置信息,所以需要重启 Tomcat 才可以生效:
1 | <Context path="/浏览器路径名" docBase="Web 应用实际计算机地址"/> |
- 在
.\conf\Catalina\localhost
目录下面添加一个 XML 配置文件,文件名任意,里面加入路径和文件位置之间的映射,这种方式可以不用重启服务器:
1 | <Context path="/浏览器路径名" docBase="Web 应用实际计算机地址"/> |
虚拟主机
在 server.xml 配置文件中,可以看到一条默认的 host 配置:
1 | <Host name="localhost" appBase="webapps" |
这就是我们在访问服务器 http://localhost:8080/
的时候,表示我们访问的主机的名字叫作 localhost ,它的页面服务放在 webapps 文件夹下面。
又因为 Tomcat 可以设置多个主机,比如 Xorex 主机,Yukino 主机等,来供人们去根据名字访问它们。所以这里的 Host 主机又被称为虚拟主机(因为一台服务器可以设置多个不同名字的主机,这些主机并不是真正的多个服务器构成的,而是由一台主机模拟出来的。)
那么就可以自己设置一台主机了,在配置信息里加入一条 Host,表示设置主机名称 Xorex。
1 | <Host name="Xorex" appBase="XorexWebSite" |
然后将主机名称和主机的地址绑定起来,也就是域名绑定 IP,这里我们肯定没办法改 DNS 服务器的 域名-IP 绑定,就只能改自己电脑记录的 域名-IP 绑定信息了(浏览器查询域名对应 IP 是优先查看本地保存的,没有再去询问 DNS 根域名服务器),在 C:\Windows\System32\drivers\etc
这里面的 hosts 文件增加 域名-IP 绑定信息:
1 | # localhost name resolution is handled within DNS itself. |
这样就可以通过 http://Xorex:8080/
这个网址解析到 http://127.0.0.1:8080
服务器(也就是本机)的 Xorex 虚拟主机里面(因为 http://Xorex:8080/
指定访问主机名为 Xorex, http://localhost:8080
指定访问主机名为 localhost。)
Java Web 应用文件结构
1 | JavaWeb文件夹 |
对于用户来说,除了 WEB-INF 以外的目录的资源都可以随意访问获取,但是对于 WEB-INF 里面的,只有服务器自己才能访问调用。
打包 Web 应用程序
当我们按照上面的文件结构开发好了一个 Web 应用程序之后,我们就可以把这个 Web 应用程序打包了。使用 jar -cf WebPackageName.war WebDirName
就可以将 WebDirName 文件夹里面的 Web 应用程序打包为 WebPackageName.war 了。
其中 -c 表示 create 创建 war 包,-f 表示 file 命名 war 文件名字。
拿到 war 包之后可以直接放到对应主机的 appBase 文件夹下面,当 Tomcat 服务器启动的时候,会自动解压 war 包,并运行其服务。
Tomcat 工作原理
先看看 Tomcat 的结构图:
当 Tomcat 的服务器启动以后,会首先读取 server.xml 文件来启动一个 Server 服务器,Server 又会启动一个 Service 服务,里面有多个 Connector 来等待和客户端进行连接,不同的 Connector 会连接不同的请求协议。Connector 接收到客户端发送过来的请求之后,会转移给 Engine,由 Engine 分析此请求所访问的 Host 虚拟主机,并将请求转发给对应的 Host 虚拟主机,然后经过解析返回所请求的 Web 应用 Context。
比如 server.xml 里面就有各种的配置信息:
1 |
|
Https 连接
Https 连接是加密连接,首先服务器会发送给客户端一份公钥,然后客户端自己持有私钥。通过非对称加密进行密钥交换(交换过程即使被监听也无法被截获:交换密钥),使用非对称加密 + 证书是为了防止有人伪造服务器。然后客户端就能从服务器手里安全的拿到数据的加密密钥,从而保证整个传输过程中的数据安全。
那么如何给自己的服务器添加证书呢,使用命令:keytool -genkey -alias tomcat -keyalg RSA
然后设置一个密码,就会在 User 文件夹下面生成一个 .keystore
文件,这个就是证书了,复制到 Tomcat 的 conf/.keystore
里面,然后在 server.xml 里面添加一个使用 Https 连接的 Connector :
注意 KeystorePass 属性这里填写你生成证书的时候设置的密码。
1 | <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" |
然后访问的时候就可以用 https://localhost:8443
进行访问了因为浏览器没有我们的 CA 证书,所以会显示不安全。