06-tomcat、HTTP
unit06-tomcat、HTTP
服务器概述
什么是服务器?
服务器:分为服务器硬件 和 服务器软件。在硬件服务器(计算机)上安装了服务器软件,才可以对外提供服务。
比如:让其他的计算机来访问当前服务器,为其他的计算机提供服务。
(1) 服务器硬件:是指在互联网上具有独立IP地址的计算机,比如我们自己用的计算机也可以作为服务器使用。
(2) 服务器软件:就是一个计算机程序,比如MySQL服务器软件,tomcat服务器软件。服务器软件分为很多类型,比如:ftp服务器,数据库服务器,web服务器软件,邮件服务器等。
什么是Web服务器?
(1) web服务器是指驻留在互联网上的某种类型的计算机程序。当浏览器访问服务器,请求服务器上的文件时,服务器将会处理该请求,并将请求的文件响应给浏览器,并会附带一些信息告诉浏览器如何查看该文件(即文件的类型)
(2) web服务器是可以向 “发出请求的浏览器提供文档” 的程序,比如在访问百度时,其实就是在访问百度的服务器。
14bcab6ec3d58f3fea59d35a1c618a16
tomcat就是一个web服务器软件,是由apache组织提供的一款服务器软件,特点:小巧灵活,免费开源,简单易用。
tomcat下载、安装、启动、配置
下载tomcat服务器
下载地址:http://tomcat.apache.org/
tomcat有很多版本,有解压版 和 安装版,还分windows (还分为32位和64位版)和
linux版,根据自己的需求,选择对应的版本下载。
tomcat服务器运行需要jdk的支持,版本对应为:
1 | tomcat5 需要jdk4以上支持 |
安装、启动tomcat服务器
1、安装tomcat服务器
绿色版解压之后就可以使用(原则:安装的路径中不要包含中文和空格)
609168f9983f96449b7c33f3ebe1890a
解压后还需要配置JAVA_HOME环境变量,该变量指向jdk的根目录,指定tomcat启动时使用哪一个位置的jdk。
2、启动tomcat服务器
如何配置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根目录]\bin\startup.bat 可以启动tomcat服务器;
通过 [tomcat根目录]\bin\shutdown.bat 可以关闭tomcat服务器;
访问测试服务器:
在tomcat服务器启动后,服务器会默认监听8080端口,可以通过如下地址访问tomcat服务器的主页:
1 | http://localhost:8080 |
修改tomcat默认端口
tomcat服务器在启动时,默认监听的端口是8080,这意味着,我们在访问tomcat服务器时,就需要在主机名(localhost)或者IP地址(127.0.0.1)等后面加上端口。这样非常不方便。
可以将8080
端口改为80
端口,因为80端口非常特殊,可以省略不写(只有80端口可以省略,其他端口可在访问时必须得加上)
修改方法:找到 [tomcat安装目录]\conf\server.xml 文件并打开该文件,将文件中的 69 行的 标签上的 port 属性的值改为 80即可。
1 | <Connector port="80" protocol="HTTP/1.1" |
改完后,保存文件,重新启动服务器(只有在服务器启动时,才会重新加载server.xml文件)再次启动的服务器就会监听新的端口。
** 扩展问题:FAQ端口占用问题 **:
在启动tomcat服务器时,可能会遇到端口占用问题,如下图:
c6008ed65c694512f4b81a2d9fe1877f
原因分析:
**情况一:**可能是之前的tomcat服务器没有完全关闭,仍然在占用80端口,导致服务器再次启动时,启动失败。
解决方式:运行shutdown.bat文件,将tomcat按照正常流程再关闭一次即可。如果再次启动服务器成功,说明问题已解决,否则看情况二。
**情况二:**可能是其他程序占用了80端口,导致服务器启动失败。
解决方式:打开一个cmd窗口,通过 netstat -ano 命令查看当前系统中活动的进程,找到80端口对应的进程编号(PID),根据进程编号将进程结束即可!
1 | netstat -ano |
1 | 协议 本地地址 外部地址 状态 PID |
1 | taskkill /f /pid 进程编号 |
tomcat目录结构
tomcat目录结构介绍
af86c51c1b50075b001b791487750003
tomcat服务器安装根目录下有很多子目录,这些目录的作用是:
1 | bin:用于存放tomcat服务器中批处理文件的目录(xx.bat/xx.sh) |
虚拟主机和Web应用
总结:
(1)虚拟主机就是tomcat服务器中配置的一个站点,在tomcat服务器中默认提供了一个localhost虚拟主机,这个主机的发布目录是webapps目录,这样意味着,将Web应用放在webapps目录下,就表示发不到了localhost虚拟主机中。
(2)Web应用就是一个存放了很多Web资源(html、css、js、jsp、servlet、图片等)的目录,将Web应用发布到虚拟主机中,就可以通过浏览器来访问Web资源中的资源文件了。
web应用
web应用的目录结构
1 | news(目录,web应用) |
其中news就是一个目录, 同时也是一个web应用程序, 其中可以包含很多的资源文件。
部署web应用到虚拟主机中
直接将Web应用的目录拷贝到虚拟主机所管理的目录下,就发布到了虚拟主机中
例如:将news目录拷贝webapps目录下,由于webapps目录是localhost主机默认管理的目录,所以就相当于将news应用发布到 了localhost主机中。
通过如下路径规则就可以访问localhost主机下的news应用下的资源文件:
1 | http://localhost:端口/news/xxx |
扩展内容(了解)
访问tomcat服务器主页:http://localhost
访问news/hello.html:http://localhost/news/hello.html
能否将访问 news/hello.html 的路径缩短一些(比如只通过主机名就可以访问news/hello.html这个网页)
配置WEB应用的主页
如果没有将 hello.html 配置为当前Web应用的主页,在访问 hello.html 时的路径为:
1 | http://localhost/news/hello.html |
如果将 hello.html 配置为当前Web应用的主页,再次访问 hello.html 时的路径为:
1 | http://localhost/news |
在上的路径中,/hello.html 这个路径可以加,也可以省略。
将 hello.html 配置为当前应用的主页,方式为:找到 [当前Web应用]/WEB-INF/web.xml文件并打开,在web.xml文件的根标签内部添加如下配置:
1 |
|
配置完后,需要重启服务器,配置才会生效。
配置缺省的(默认的)WEB应用
上面已经将news/hello.html配置为news应用的主页,访问hello.html时路径为:http://localhost/news/
如果不将 news 应用配置为默认的Web应用,在访问 news 下的 hello.html(主页)时的访问路径为:
1 | http://localhost/news/ |
如果将 news 应用配置为缺省的(默认的)Web应用,在访问 hello.html(主页)时的路径就变成了:
1 | http://localhost/ |
如何将 news 配置为缺省的(默认的)Web应用(缺省Web应用只能有一个)?:
将Web应用的名字改为一个大写的ROOT,当前Web应用就是一个默认的Web应用,再访问这个Web应用下的资源文件时,访问的路径中就可以不用写Web应用的名称了。
打war包
war包和jar包都是java程序中的一种压缩包格式,如果开发一个Java基础工程,可以将其中编译后的class文件和相关的配置文件打成一个jar包。
可以将一个Web应用打成一个war包,这样做的好处有:
1 | (1) 将web应用打成一个war包,传输起来更加方便,而且文件体积会变小。 |
打war包的方法是:
进入到web应用的目录下,将Web应用目录下的所有子目录和文件全部选中,右键压缩成一个 xxx.zip 包,再把 xxx.zip 改为 xxx.war即可!!
需要注意的是,如果有以下问题,可能会导致war不会自动解压:
1 | (1) 在将Web应用打成一个压缩包时,没有打成一个 xxx.zip,而是使用 rar格式或者其他格式,会导致自动解压失败! |
HTTP协议概述
什么是HTTP协议?
14bcab6ec3d58f3fea59d35a1c618a16
HTTP协议是用于规定浏览器和服务器之间的通信方式/规则
主要规定了浏览器给服务器发送的请求信息的格式
以及规定了服务器给浏览器发送响应信息的格式
HTTP协议在工作时所遵循的基本原则:
1 | (1)一次请求,只对应一次响应 |
HTTP协议详解
IE浏览器的插件:HttpWatch,可以监听浏览器和服务器通信的内容。
HTTP请求
169364c50b950ea4df4647e274a7298d
1、请求行
1 | GET /news/hello.html HTTP/1.1 |
(1)GET:表示请求方式,在HTTP协议中一共定义了7种提交方式,但是我们只用GET和POST。
(2)/news/hello.html:请求资源路径,表示浏览器请求的是哪一个Web应用以及哪一个web资源文件。
(3)HTTP/1.1:请求所遵循的协议和版本。
2、若干请求头
请求头都是Key-Value结构,例如:
1 | Host:localhost -- 通知服务器,浏览器要请求的是哪一台虚拟主机。 |
(空白行,用于分隔请求头和请求实体)
3、请求实体内容
如果请求方式为 GET 提交,请求实体是没有内容的!
如果请求方式为 POST 提交,并且请求中携带了数据,请求实体中才会有内容!
HTTP响应
08e49b1b985988b040fe437d4aab7e62
1、状态行
1 | HTTP/1.1 200 OK |
(1)HTTP/1.1:表示响应所遵循的协议和版本
(2)200:状态码,三位的数字,表示服务器对请求处理的结果。
1 | 200: 表示请求处理成功 |
(3)OK:描述短语(可以忽略),也表示服务器对请求处理的结果,和状态码表示的结果一致。
1 | 200:OK |
2、若干响应头:也是key-value格式
1 | Content-Type: 表示服务器响应的数据类型,text/html, image/*... |
3、响应实体内容
响应实体就是浏览器所请求文件的内容。例如:浏览器向服务器请求一个hello.html文件,服务器会找到hello.html文件,将文件的内容作为响应实体发送给浏览器。
内容补充
1、问题1:请求方式什么时候是GET提交?什么时候是POST提交?
只有当使用表单(form),并且在表单上明确的通过method指定提交方式为POST时,请求方式才是POST提交,其他方式都是GET提交(AJAX除外)
思考:判断以下请求方式是GET还是POST?
1 | (1)<form action="#"></form> --- GET提交 |
2、问题2:GET提交和POST提交有什么区别?
主要体现在请求参数传输过程的不相同
GET提交:
- 将数据通过问号拼接在地址栏URL地址的后面,相对非常不安全。
- 将数据拼接在地址栏URL地址的后面,数据量是有限制的,通常不能超过1KB或者4KB。
POST提交:(form)
- POST提交是通过请求实体将数据提交给服务器,不会显示在地址栏上,因此相对更加安全。
- POST提交通过请求实体提交数据,数据量理论上是没有限制的。
3、总结:
- 如果只是单纯做一个跳转,请求中没有数据,尽量使用GET提交。
- 如果在请求中有数据,但数据量不大,并且数据没有隐私性,也尽量使用GET提交。
- 如果在请求中有数据,数据量比较大或者数据较为隐私,此时推荐使用POST提交。
将Tomcat整合到Eclipse中
将Tomcat服务器整合到Eclipse工具中,可以通过Eclipse启动、关闭tomcat服务器,更重要的是,可以非常方便的将在Eclipse中创建的Web项目发布到Tomcat服务器中运行。
方式一:在window偏好设置中配置Tomcat
1、点击Window –> Preferences(偏好设置):
2、在偏好设置窗口中点击 Server –> Runtime Environments –> add:
3、在弹出的窗口中选择 –> Apache –> Apache Tomcat v8.5,需要注意的是,这里得根据自己安装的tomcat版本进行选择,比如我安装是8.5版本的tomcat,所以这里选择Apache Tomcat v8.5。
4、在下面的窗口中配置tomcat服务器的安装根目录,可以直接把路径复制到第二个输入框中;也可以点击后面的 Browse按钮在文件管理器中选择tomcat服务器安装根目录。
最后点击finish即可完成将Tomcat整合到Eclipse中的配置。
方式二:在创建Web项目时配置Tomcat
1、如果在创建Web项目时,Target runtime选项中没有配置可选的服务器,可以点击右面的选项进行配置
点击后进入下一步操作。
2、在弹出的窗口中选择 –> Apache –> Apache Tomcat v8.5,需要注意的是,这里得根据自己安装的tomcat版本进行选择,比如我安装是8.5版本的tomcat,所以这里选择Apache Tomcat v8.5。
3、在下面的窗口中配置tomcat服务器的安装根目录,可以直接把路径复制到第二个输入框中;也可以点击后面的 Browse按钮在文件管理器中选择tomcat服务器安装根目录。
最后点击finish即可完成将Tomcat整合到Eclipse中的配置。
4、上一步完成后,回到Web项目创建的视图窗口,再查看”Target runtime”选项,如下:
将整合到Eclipse中的tomcat从Eclipse中删除
如果要将整合到Eclipse中的tomcat从Eclipse删除:点击Windows –> Preferences –> Server –> Runtime Environments,选中要删除的服务器,点击右侧的删除按钮即可删除,最后点击Apply and Close保存设置即可!
在Eclipse中创建Server及移除Server
上面讲解了如何将Tomcat整合到Eclipse中,整合之后,需要在Eclipse中创建一个Server才可以进行启动tomcat、关闭tomcat等操作。
1、Eclipse中找到Servers窗口:
53ee068642a0174e038b8d61fe0791e8
2、如果没有可以到Window –> Show View –> Other中搜索”servers”,如下图:
4c3f46765ddae7d3cac4287efe14fa6e
cf2948fcf3af5900fc2b70f8769e9b05
3、在Server窗口中点击“No servers are available…”链接:
ba09d4090bccbc59c3d1057bcab8d07d
4、在弹出的窗口中,保持默认配置,直接点击完成
如果弹出的窗口中默认的服务器不是tomcat,则说明在此之前没有将Tomcat整合到Eclipse中。
08e1747f402c1be68ae9cf62ee7719e0
5、在上一步点完成后,Eclipses左侧会多出一个Servers项目,Servers窗口中会出现创建的Server,也就是tomcat服务器。
注意:①处的Servers项目不能关闭(close),更不能删除(delete)
dfd52724dc14ed43f7c48ca16ac85da4
6、在创建完Server后,双击tomcat,可以修改Tomcat服务器配置
(1)将Server Locations中的选项切换为第二个选项
(2)将Deploy Path右侧的输入框中的内容改为webapps。ctrl+s保存配置即可
以上配置是为了保证在Eclipse中发布Web应用到tomcat服务器中时,可以将项目发布到tomcat服务器的webapps目录下。
如果不配置,会导致tomcat服务器中webapps下的Web应用无法访问。
28b8712f4f5114a24acde35017275a93
7、如果要移除添加的Server,需要同时删除①处的Servers项目(右键delete,要彻底从硬盘上删除),以及删除②处的tomcat服务器(右键delete)
tomcat右键选项介绍
1eec7770246693752b0eaa984ca7e92c-1584273824888
a) Start:用于启动tomcat服务器,如果已启动,则显示 ReStart,作用是重启服务器
b) Stop:用于停止服务器
c) Add and Remove:将Web应用部署到tomcat服务器中,或者移除服务器中部署的Web应用
d) Clean:作用是将发布到Eclipse自己的webapps目录中的项目删除再重新部署
e) Clean Tomcat Work Directory:作用是将在tomcat运行过程中存入work目录的文件删除
tomcat启动失败常见原因
问题1:tomcat服务器启动失败-1
如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
25c037cb7399daf7127195a451115c07-1584273824889
根据上面的描述信息,可以看出是8005、8080、8009端口被同时占用了,此时只有一种可能,就是之前已经启动了tomcat或者之前开启的tomcat没有完全关闭导致的。
解决方式:到tomcat安装目录找到bin目录中的shutdown.bat文件,双击运行将服务器关闭,再到Eclipse中启动服务器即可!
问题2:tomcat服务器启动失败-2
如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
d4e3c02075eb7f39ac1ea72e31aab137-1584273824889
解决方法:
(1) 可以先将服务器中所有的Web应用移除(在服务器上右键,Add and Remove-->Remove All-->Finish)
(2) 再分别执行服务器右键选项中的clean和Clean Tomcat Work Directory
(3)再次启动服务器,如果启动没有报错,则说明tomcat服务器本身没有问题,再将要运行的项目发布到tomcat中,再次启动服务器,观察是否有错误。如果有则说明是项目本身的问题。
(4)如果移除了所有的Web应用,启动tomcat服务器报错,则说明tomcat本身就有问题,可以将tomcat服务器重新配置一次到Eclipse中(将tomcat和Server项目删除,再点击链接重新创建Server)