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>)

<mstyle mathcolor="&#35;f01"> T o m c a t </mstyle> \color{#f01}{配置Tomcat环境变量,变量名必须为:} TomcatCATALINA_HOM

如何配置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 <mstyle mathcolor="&#35;f01"> t o m c a t </mstyle> \color{#f01}{** tomcat目录结构 **} 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目录:( <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{重要} )是 <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 <mstyle mathcolor="&#35;f01"> W e b </mstyle> \color{#f01}{**Web 应用的目录结构**} Web - WEB-INF

Web应用本身就是一个目录,该目录下可以包含其他的目录和文件

基本的目录结构:

news(Web应用/目录)
 |
 |-- 其他目录: 放在其他目录中的资源文件, 可以被浏览器直接访问。
 |-- WEB-INF目录:这是一个受保护的目录,放在这个目录下的资源文件,不可以被浏览器直接访问(不是不能,是不能直接访问)。
		|-- classes目录:存放编译后的class文件
		|-- lib目录:存放web应用所依赖的 jar 包
		|-- web.xml文件:web应用的核心配置文件。
			(如:配置主页/配置Servlet/配置Session超时时间/配置过滤器/配置***等)
  • 例子:WEB-INF 内文件无法找到

<mstyle mathcolor="&#35;f01"> w e b . x m l </mstyle> \color{#f01}{**web.xml**} 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 <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{**扩展内容**}

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应用??

<mstyle mathcolor="&#35;f01"> W e b R O O T ! ! </mstyle> \color{#f01}{将Web应用的名字改为一个大写的ROOT即可!!} WebROOT!!

6.6.3打war包

为什么?

warjar都是java中的一种压缩包。
类似于windows的zip、rar包

可以将Web应用中的所有内容打成一个war包。
这样做的好处是:

  • 将web应用中的所有目录和文件打成一个war包,<mark>便于传输</mark>
  • 将web应用打成一个war包,体积会减少,可以<mark>节省带宽</mark>
  • war包发布到服务器后, 会<mark>自动解压</mark>发布。( <mstyle mathcolor="&#35;f01"> </mstyle> \color{#f01}{最重要}

怎么做?

<mark>如何打一个war包</mark>:

  • 进入web应用的目录,
  • 将web应用下的所有目录和文件全部选中,
  • 添加到一个xxx.zip压缩包中
    (注意不能是rar包,只能是zip),
  • 再将文件的后缀名改为war即可!!

注意事项:

  1. 打成的war包的名字<mark>不能是中文</mark>的,且不能和已发布的应用名重名!
  2. war包中<mark>不能包含中文</mark>的目录或文件。
  3. xxx。war 包的名字不能和已发布的 web 应用的目录名重复。

如果出现以上问题,war包将不会自动解压!

<mark>.war格式,在虚拟主机根目录下,会被自动解压</mark>
所以说:“ war包发布到服务器后, 会<mark>自动解压</mark>发布”