TomcatHttp协议
说明:以下内容如有侵权,请联系删除
第一章 WEB开发概述
1.1 软件架构
C/S架构
C/S架构:即客户端/服务器(Client/Server),例如QQ、LOL
必须在客户端下载一个软件,安装,服务器端的程序一旦更新,客户端也必须同步更新。所有涉及财产信息都存在服务器端,安全性比较高的、画质、音效等等用户体验要好很多的。
优点:
用户体验效果好
对信息的安全控制较强
应用服务器运行数据负荷较轻,部分计算在客户端完成
缺点:
维护麻烦(服务器更新,客户端也必须更新)
安装使用依赖其它条件
占用空间
B/S架构
B/S架构:即浏览器/服务器(Browser/Server);
客户端只需要有一个浏览器就可以访问服务器端数据了,所有的数据更新操作都在服务器端完成
优点:
维护方便
占用空间少
缺点:
动画效果受限
对信息的安全控制较低(网银需要使用U盾,在浏览器端加密)
应用服务器运行数据负荷较重,大部分计算都在服务器端完成,可以使用Ajax改善!
结论:Java开发注重的是B/S架构!
1.2 WEB交互过程
WEB采用B/S通信模式,通过超文本传送协议(HTTP, Hypertext transport protocol)进行通信。通过浏览器地址栏编写URL,向服务器发送一个请求,服务器端根据请求进行相应的处理,处理完成之后,会向浏览器作出一个响应,及将服务器端资源发送给浏览器。
结论:永远都是从客户端向服务器端发起请求,然后服务器端响应结果数据到客户端(周而复始),请求和响应式成对出现,先有请求,后有响应。
1.3 WEB资源
在WEB通信中,我们都是通过浏览器去访问服务器端的一些资源数据(或页面或图片等等!)在这些资源数据中它分为静态资源和动态资源!
静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。
动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP
注意:
如果用户访问的是一个静态资源,那么服务器端是直接响应的!
如果用户访问的是一个动态资源,那么服务器会先将动态资源转成静态资源,然后再将这个静态资源响应到客户端浏览器!
结论:
客户端永远得到的是静态资源!
1.4 WEB服务器
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,[1] 也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。(服务器指的是某款软件!!!!) ===>>>>它是一个容器(可以存放资源文件),然后通过互联网,让其它的用户来访问这个服务器里面的资源文件!
Web服务器的作用是接收客户端的请求,给客户端做出响应。
对于JavaWeb程序而言,还需要有JSP/Servlet容器,JSP/Servlet容器的基本功能是把动态资源转换成静态资源,当然JSP/Servlet容器(服务器!)不只这些功能,我们会在后面一点一点学习。
我们需要使用的是Web服务器和JSP/Servlet容器,通常这两者会集于一身。下面是对JavaWeb服务器:
Tomcat(Apache):当前应用最广的JavaWeb服务器;(免费,不是支持所有的JavaEE规范)【中小型的】
JBoss(Redhat红帽):支持JavaEE,应用比较广;EJB容器(银行)
Resin(Caucho):支持JavaEE,应用越来越广;
Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
Websphere(IBM):要钱的!支持JavaEE,适合大型项目;
Glass Fish:最早是Sun公司的产品,后来被Oracle收购,开源,中型服务器。
补充:规范
J2EE 企业级开发Java规范。标准规范包括:servlet、jsp、jdbc、xml、jta、javamail等。在java中规范就是接口。J2EE又称为JavaEE。
WEB服务器对JavaEE规范部分或全部支持(实现),也就是WEB服务器实现部分或全部接口。
第二章 WEB服务器Tomcat
2.1 Tomcat概述
Tomcat 服务器是一个免费的开放源代码的Web应用服务器软件,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。【大型项目和并发访问用户很多的场合下依旧可以胜任!服务器集群】
支持Servlet和JSP 规范,且最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。(Tomcat服务器是在不断更新的!)
Tomcat版本问题(了解)
2.2 Tomcat安装
Tomcat分为安装版和解压版(绿色版):
安装版:一台电脑上只能安装一个Tomcat;(需要配置环境变量!!!)
解压版:无需安装,解压即可用,解压多少份都可以,所以我们选择解压版。
我们主要使用解压版的Tomcat!(可以进行集群操作)
说明:
tar.gz 文件 是linux操作系统下的安装版本
exe文件是window操作系统下的安装版本
zip文件是window操作系统下压缩版本(我们选择zip文件)
2.3 Tomcat目录结构
bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
(1) server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;下面会详细介绍这个文件;
(2) tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
(3) web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
(4) context.xml:对所有应用的统一配置,通常我们不会去配置它。
lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;
logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
LICENSE:许可证。
NOTICE:说明文件。
2.4 Tomcat启动停止和访问
准备工作
在启动Tomcat之前,我们必须要配置环境变量(Tomcat本身也是使用Java语言编写的):
JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK;
CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:D:\Develop\Tomcat\apache-tomcat-8.5.27
启动和停止
访问
URL请求路径
URL(Uniform Resource Locator),统一资源定位符是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。
完整格式 协议://域名(ip地址):端口号/资源位置?参数=值
协议:http、https、ftp等
域名:域名或IP地址,都可以访问WEB资源
端口号:程序必须使用端口号,才可以让另一个计算机访问。http协议的默认端:80
资源位置:用于描述WEB资源再服务器上的位置。
参数=值:浏览器和服务器交互传递的数据
例如:
常见路径
http://www.itcast.cn:80/subject/javaeezly/index.shtml
百度搜索“传智播客”
https://www.baidu.com/s?wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2&rsv_spt=1&rsv_iqid=0xf504606300003bdd&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=99669880_hao_pg&rsv_enter=1&rsv_sug3=18&rsv_sug1=14&rsv_sug7=101&rsv_t=7f8cIV2VNr%2FgqROJl21aOvqclyXrBlfjfN2SpvKmAxyU9b7y1aijHlMemkz8XwApcrvn64yf&rsv_sug2=0&inputT=4187&rsv_sug4=5015
2.5 Tomcat启动常见问题
无法启动(闪退)
端口号冲突问题
当同一台计算机启动两个tomcat时,第二个tomcat将会在控制台抛异常,摘要信息如下:
你可以可以去D:\Develop\Tomcat\apache-tomcat-8.5.27_teach\logs查看catalina对应的log日志文件!
上面截图中,控制台将出现大量异常信息,描述的是8080端口被占用!
查看本地端口使用情况,关闭占用端口的程序,在dos窗口中输入 netstat –nao 就可以查看当前端口的占用情况:
2.6 Tomcat发布WEB项目
在webapps文件夹下面直接发布
使用虚拟路径的方式发布项目(了解)
2.7 IDE集成Tomcat
IDE集成Tomcat
IDE创建WEB项目
部署
测试
第三章 Http协议
3.1 Http协议概述
Http协议引入
Http协议的概念
HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。(用于定义WEB浏览器与WEB服务器之间交换数据的过程)(规定了请求与响应的数据的格式!)
互联网的数据传输底层依赖tcp协议,http协议架构在tcp协议之上,它规范了传输数据的内容和格式。
HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式(请求),也规定了服务器发送给客户端的内容格式(响应)。其实我们要学习的就是这个两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。今天我们主要学习请求协议,明天学习响应协议!
Http协议的组成
HTTP请求协议、HTTP响应协议。
HTTP请求包括:请求首行、请求头、请求体(get请求没有请求体、post请求有)
HTTP响应包括:响应首行、响应头、响应体
Http协议的作用和特点
Http协议的版本
3.2 如何获取Http协议里的数据
谷歌浏览器获取Http协议里的数据
火狐浏览器获取Http协议里面的数据
3.3 Http请求协议
【在表单中没有明确指定method为post,其余全部为get方式!】
学习http请求信息的组成,我们的目的是,了解浏览器将那些数据,按照什么样的格式发送给服务器。http请求一共分为三个部分:请求行,请求头,请求体。其格式如下:
请求首行;(请求方式 请求的地址 协议与版本)
请求头信息;(请求头名称:请求头值)
空行;
请求体。(POST请求有请求体、GET请求没有请求体)
浏览器发送给服务器的内容就是这个格式的,如果不是这个格式服务器将无法解读!在HTTP协议中,请求有很多请求方法,其中最为常用的就是GET和POST。
接下来我们要看看具体的内容。演示的时候,我们以IE浏览器为例,后面切换为谷歌浏览器!
GET请求
请求首行
GET /day31_Http_306/username=jack&password=123 HTTP/1.1:
请求方式GET,
请求服务器路径(/day31_Http_36/a.html?username=jack&password=123),
协议和版本:HTTP/1.1;
请求头
(重要的两个请求头:User-Agent Cookie)
Host:localhost:请求的主机名为localhost;
User-Agent:Mozilla/5.0(Windows NT 5.1; rv:5.0)Gecko/20100101 Firefox/5.0:
与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8:
告诉服务器,当前客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收;
Accept-Language: zh-cn,zh;q=0.5:
当前客户端支持的语言,可以在浏览器的工具选项中找到语言相关信息;
Accept-Encoding: gzip, deflate:
支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:
客户端支持的编码;
Connection: keep-alive:
客户端支持的链接方式,保持一段时间链接,默认为3000ms;
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:
因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID,然后在讲会话是讲究它!
Http协议规定有7种方式,常用的有GET和POST,GET请求没有请求体!
POST请求
Referer请求头
Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。
统计工作:我公司网站在百度上做了广告,但不知道在百度上做广告对我们网站的访问量是否有影响,那么可以对每个请求中的Referer进行分析,如果Referer为百度的很多,那么说明用户都是通过百度找到我们公司网站的。
防盗链:我公司网站上有一个下载链接,而其他网站盗链了这个地址,例如在我网站上的index.html页面中有一个链接,点击即可下载JDK7.0,但有某个人的微博中盗链了这个资源,它也有一个链接指向我们网站的JDK7.0,也就是说登录它的微博,点击链接就可以从我网站上下载JDK7.0,这导致我们网站的广告没有看,但下载的却是我网站的资源。这时可以使用Referer进行防盗链,在资源被下载之前,我们对Referer进行判断,如果请求来自本网站,那么允许下载,如果非本网站,先跳转到本网站看广告,然后再允许下载。
常见请求头(了解)
3.4 Http响应协议
Http响应协议的格式
响应协议的格式如下:
响应首行;
响应头信息;
空行;
响应体。
响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。
响应首行
响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。
200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
405:服务器端的方法出现错误(你需要调用的方法被修改了)
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。
响应头
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="Refresh" content="3;http://www.itcast.cn"><title>Refresh定时刷新</title><script>window.onload=function(){//定义一个计数遍历time = 3;//定时操作(周期1秒)setInterval("changeTime()",1000);}//书写改变时间的函数function changeTime(){if(time>1){//修改span中的数字document.getElementsByTagName("span")[0].innerText=--time;}}</script></head><body><span>3</span>秒后跳转到传智首页!</body>
</html>
响应体
响应体:就是服务器发送给浏览器的正文