Tomcat&Http协议 - 指南
说明:以下内容如有侵权,请联系删除
第一章 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!(可以进行集群操作)

说明:
linux操作系统下的安装版本就是tar.gz 文件 
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:对所有应用的统一配置,通常我们不会去配置它。
一大堆jar记录。假如需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar资料放到这个目录中,这个目录中的jar所有项目都可能共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;就是 lib:Tomcat的类库,里面
 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启动停止和访问
准备工作
使用Java语言编写的):就是在启动Tomcat之前,我们必须要配置环境变量(Tomcat本身也
 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:
利用获取User-Agent头信息而来的;就是与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都
 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表示重定向,这说明浏览器需要再发一个新的请求。
html)显示在浏览器中;就是 200:请求成功,浏览器会把响应体内容(通常
 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>响应体
服务器发送给浏览器的正文就是响应体:就
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号