6 Day08 tomcat、HTTP
6.1 服务器概述
6.1.1 什么是服务器?
服务器:分为 服务器硬件 和 服务器软件。在硬件服务器(一台计算机)安装了服务器软件,就可以对外界提供服务,比如:让其他计算机上的浏览器来进行访问。
- 服务器硬件: 是一台在互联网上具有独立IP地址的计算机,比如我们面前的计算机也可以作为服务器使用。
- 服务器软件: 就是一个计算机程序(软件), 比如在mysql服务器软件、tomcat服务器软件。
###6.1.2 什么是Web服务器?
- Web服务器是可以向“发出请求的浏览器提供文档”的程序。 比如在访问百度时,其实就是在访问百度的服务器。
- Web服务器是指驻留于因特网上某种类型计算机的程序。当浏览器(客户端)连接到服务器,请求服务器上的文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。
<mark>tomcat就是一个web服务器,是由apache组织提供的一款服务器软件,特点是小巧灵活,免费开源,简单易用。</mark>
6.2 tomcat下载、安装、启动、配置
6.2.1下载tomcat服务器
下载地址:http://tomcat.apache.org/
tomcat有很多版本,有解压版 和 安装版,还分windows (还分为32位和64位版)和 linux版,根据自己的需求,选择对应的版本下载。
tomcat服务器运行需要jdk的支持,版本对应为:
- tomcat5 需要jdk4以上支持
- tomcat6 需要jdk5以上支持
- tomcat7 需要jdk6以上支持
- tomcat8 需要jdk7以上支持
6.2.2 安装、启动tomcat服务器
1、安装tomcat服务器
绿色版解压之后就可以使用(<mark>原则:安装的路径中不要包含中文和空格</mark>)
解压后还需要配置JAVA_HOME环境变量,指向jdk的根目录,指定tomcat启动时使用哪个jdk。
2、启动tomcat服务器
<mark>启动tomcat服务器时,tomcat服务器程序会去寻找一个JAVA_HOME环境变量,该变量配置JDK所在位置</mark>。
(<mark>tomcat服务器是Java语言开发的,需要JDK支持才能运行</mark>)
配置Tomcat环境变量,变量名必须为:CATALINA_HOM
- 《Tomcat安装配置及CATALINA_HOME environment variable is not defined correctly问题的解决》https://blog.csdn.net/u013393958/article/details/78272242
如何配置JAVA_HOME环境变量:
变量名: JAVA_HOME
变量值: C:\Program Files\Java\jdk1.8.0_45
配置Path变量的两种方式:
方式一:
Path=C:\Program Files\Java\jdk1.8.0_45\bin;xxx;xxx;xxx;
方式二:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_45
Path=%JAVA_HOME%\bin;xxx;xxx;xxx;
启动、关闭tomcat服务器:
通过 [tomcat_home]/bin/startup.bat 文件可以启动tomcat服务器
(linux 的话 .sh后缀)
通过 [tomcat_home]/bin/shutdown.bat 文件可以关闭tomcat服务器
在tomcat启动之后,默认会监听8080端口(没有修改的前提下),如图:
可以通过在浏览器中输入以下地址,访问tomcat服务器的主页:
http://localhost:8080
如果访问成功,则说明已经成功的安装了tomcat,并且tomcat启动也成功了。
6.2.3 修改tomcat默认端口
tomcat服务器在启动后默认监听8080端口,而8080
端口在访问时是不能省略的。
如果想省略端口,只能将8080改为80端口才可以省略。
<mark>修改访问端口!</mark>:
找到[tomcat_home]/conf/server.xml
文件的69行的Connector标签,将上面的port属性的值改为80,保存文件,重启服务器即可!
FAQ端口占用问题:
在启动tomcat服务器时,可能会遇到端口占用问题,如下图:
原因分析:
情况一:可能是之前的tomcat服务器没有完全关闭,仍然在占用80端口,导致服务器再次启动时,启动失败。
解决方式:运行shutdown.bat文件,将tomcat按照正常流程再关闭一次即可。如果再次启动服务器成功,说明问题已解决,否则看情况二。
情况二:可能是其他程序占用了80端口,导致服务器启动失败。
解决方式:打开一个cmd窗口,通过netstat -ano
命令查看当前系统中活动的进程,找到80端口对应的进程编号(PID),根据进程编号将进程结束即可!
taskkill /f /pid 进程编号
6.3 ∗∗tomcat目录结构∗∗
6.3.1 tomcat目录结构介绍
tomcat 服务器安装根目录下有很多子目录,这些目录的作用是:
- bin:存放了tomcat服务器中的可执行的<mark>批处理</mark>文件
(<mark>startup.bat、shutdown.bat</mark>) - conf:存放了tomcat相关的<mark>配置文件</mark>
(<mark>server.xml</mark>是tomcat服务器核心配置文件) - lib:是tomcat服务器<mark>运行时</mark>所<mark>依赖</mark>的jar包的存放目录
(servlet的jar包、JSP的jar包) - logs:是tomcat服务器运行时产生的<mark>日志</mark>文件的存放目录
(在启动、运行 tomcat 服务器时,会输出很多日志信息,这些日志信息会以文件形式保存在 logs 目录下) - temp:<mark>临时文件</mark>的存放目录,tomcat服务器会自己管理
- work:tomcat服务器在<mark>运行时产生</mark>的工作文件
(JSP翻译后的<mark>Servlet文件</mark>、Session的<mark>序列化文件</mark>等) - webapps目录:( 重要)是 <mark>localhost 虚拟主机默认管理的目录</mark>,可以将 <mark>web 应用发布(存放)到该目录</mark>下,就可以通过localhost主机访问该web应用中的资源了。
- 解释:webapps 就是一个资源(html、css、js、图片、servlet、jsp。。)的发布目录,放在其中的资源文件就可以通过浏览器访问。
6.4 虚拟主机和Web应用
什么是虚拟主机? - Host
虚拟主机就是tomcat服务器中配置的一个站点
tomcat 服务器中默认提供了一个虚拟主机。<mark>就是 localhost 主机</mark>
虚拟主机的配置 - (默认)
conf\server.xml 下
配置虚拟主机 - (自定义)
- 在 serve.xml 中<mark>添加</mark>一个 Host 标签,配置主机名和默认管理目录
- 在硬盘上<mark>创建</mark>主机所管理的目录 - (可以忽略:因为,如果没有目录,会自动创建)
- <mark>启动</mark>服务器,服务器检测到虚拟主机以及对应的目录。
- 在
C:\Windows\System32\drivers\etc
文件中,<mark>添加</mark>主机名和 ip 地址的映射。
开心的话,刷新下缓存ipconfig /flushdns
放一个文件
三个值分别对应三个虚拟主机,分配到同一 “本地ip地址” 127.0.0.1
浏览成功!
什么是 web 应用?
web 引用时发布到虚拟主机中的一个目录,该目录中可能会包含很多的 web 资源文件(比如 html、css、js、图片、servlet、jsp 等) ,这些资源文件按照功能和一定的目录结构组成的目录就是一个 web 应用。
虚拟主机中可以发布很多个 web 应用(但是不能讲资源文件直接放在 虚拟主机目录下)
web资源可以放在 web 应用的目录下,将 web 应用方在 虚拟主机中,才可以访问虚拟主机中的某一个web应用下的某一个资源
访问路径:http://主机名/包名.../资源名
6.5 web应用
6.5.1 ∗∗Web应用的目录结构∗∗ - WEB-INF
Web应用本身就是一个目录,该目录下可以包含其他的目录和文件
基本的目录结构:
news(Web应用/目录)
|
|-- 其他目录: 放在其他目录中的资源文件, 可以被浏览器直接访问。
|-- WEB-INF目录:这是一个受保护的目录,放在这个目录下的资源文件,不可以被浏览器直接访问(不是不能,是不能直接访问)。
|-- classes目录:存放编译后的class文件
|-- lib目录:存放web应用所依赖的 jar 包
|-- web.xml文件:web应用的核心配置文件。
(如:配置主页/配置Servlet/配置Session超时时间/配置过滤器/配置***等)
- 例子:WEB-INF 内文件无法找到
∗∗web.xml∗∗
参考:
apache-tomcat-8.5.49\conf\web.xml
<mark>xml必要内容</mark>
- 文档声明
- 根标签
<?xml version="1.0" encoding="UTF-8"?> <!-- 必要1:文档声明-->
<!-- 必要2:根标签 根标签 - 包含文档全部内容(一个xml只有一个) -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<!-- 根标签内,编写配置内容.... -->
</web-app>
6.5.2 部署(发布)web应用到虚拟主机中
<mark>将Web应用的目录拷贝到虚拟主机所管理的目录(webapps)下即可</mark>。
例如:
将news应用的目录,拷贝到webapps目录下,就相当于将news发布到了localhost主机中
这种发布方式不用重启服务器就可以直接访问。
查看程序,会有一条信息,显示发布的记录。(在日志中回看)
- 如果打不开,看看
WEB-INF/web.xml
有没有配置对
6.6 ∗∗扩展内容∗∗
6.6.1 配置WEB应用的主页
-
在没有将hello.html配置为主页之前,访问hello.html的路径为:
http://localhost/hello.html
-
如果将hello.html配置为主页,访问hello.html的路径为:
http://localhost
在访问一个主页时,主页的路径是可以省略的
如何将hello.html配置当前应用的主页???
在web.xml文件中的跟标签内部添加如下内容:
<welcome-file-list>
<welcome-file>hello.html</welcome-file>
</welcome-file-list>
6.6.3 配置缺省的(默认的)WEB应用
-
在将news配置为缺省的Web应用之前,访问news下的hello.html的路径为:
http://localhost/news/hello.html
-
如果将news配置为缺省的Web应用,再去访问news下的hello.html的路径为:
http://localhost/hello.html
因为在访问缺省Web应用下的资源时,在访问路径中不用写缺省的Web应用名字。
如何将Web应用配置为缺省的web应用??
将Web应用的名字改为一个大写的ROOT即可!!
6.6.3打war包
为什么?
war
、jar
都是java
中的一种压缩包。
类似于windows的zip、rar包
可以将Web应用中的所有内容打成一个war包。
这样做的好处是:
- 将web应用中的所有目录和文件打成一个war包,<mark>便于传输</mark>
- 将web应用打成一个war包,体积会减少,可以<mark>节省带宽</mark>
- war包发布到服务器后, 会<mark>自动解压</mark>发布。( 最重要)
怎么做?
<mark>如何打一个war
包</mark>:
- 进入web应用的目录,
- 将web应用下的所有目录和文件全部选中,
- 添加到一个xxx.zip压缩包中
(注意不能是rar包,只能是zip), - 再将文件的后缀名改为war即可!!
注意事项:
- 打成的war包的名字<mark>不能是中文</mark>的,且不能和已发布的应用名重名!
- war包中<mark>不能包含中文</mark>的目录或文件。
- xxx。war 包的名字不能和已发布的 web 应用的目录名重复。
如果出现以上问题,war包将不会自动解压!
<mark>.war格式,在虚拟主机根目录下,会被自动解压</mark>
所以说:“ war包发布到服务器后, 会<mark>自动解压</mark>发布”