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!(可以进行集群操作)

说明:

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=传智播客\&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。

响应头


xml 复制代码
<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>

响应体

响应体:就是服务器发送给浏览器的正文

相关推荐
每天一个java小知识3 小时前
Spring-AI 接入(本地大模型 deepseek + 阿里云百炼 + 硅基流动)
java·人工智能·spring
代码匠心3 小时前
从零开始学Flink:数据输出的终极指南
java·大数据·后端·flink
掘根3 小时前
【Qt】多线程
java·开发语言·qt
深思慎考4 小时前
【新版】Elasticsearch 8.15.2 完整安装流程(Linux国内镜像提速版)
java·linux·c++·elasticsearch·jenkins·框架
今天头发还在吗4 小时前
【Docker】在项目中如何实现Dockerfile 文件编写
java·docker·容器
1710orange5 小时前
java设计模式:动态代理
java·开发语言·设计模式
聪明的笨猪猪5 小时前
Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
whltaoin6 小时前
Spring Boot 常用注解分类整理(含用法示例)
java·spring boot·后端·注解·开发技巧
卷Java6 小时前
用户权限控制功能实现说明
java·服务器·开发语言·数据库·servlet·微信小程序·uni-app