Java学习打卡:第93天
javaWeb — Web基础
内容导航- 如何不写端口号访问?
- 只写域名就可以访问 ROOT
- 资源应用很多时路径如何提示
- HTTP协议
- 请求request和响应response
- 浏览器自动的请求
- HTTP的协议
- HTTP协议的组成
- 请求协议
- 响应协议
- 状态码
- 默认的错误界面 配置404
- GET请求和POST请求
JavaWeb
Web基础、HTTP
前面已经分享了对于Servlet的基本认识和使用Eclipse编写Web程序的准备
昨天分享了关于虚拟主机的问题,一个引擎中可以有多个主机,除了localhost,还有虚拟主机;每一个主机对应一个域名。这里产生一个新的问题: 当直接输入127.0.0.1,访问的是谁?
- 答案是localhost,而不是cfeng.com;为什么呢?
答案是因为Engine的默认主机是localhost;在server.xml中;Engine的defaultHost = “localhost”
如何不写端口号访问?想要修改就直接改变默认主机就可以,但是修改之后一定要记得重启服务器
之前访问的时候都要写localhost:8080访问,那可不可以不写就可以访问呢?
- 浏览器的特性: 如果不写端口号,默认访问端口号80;所以这里在server.xml中将Connecter的post改为80就可以了
只写域名就可以访问 ROOT
我们上面的访问方式虽然优化了,不用写端口号,并且有了虚拟主机,但是必须在虚拟主机后面加上项目名称;【不用写具体资源,配置文件中web.xml中默认的欢迎页面时index.html】;那么如何实现不写项目名称也可以访问呢?
- 首先为什么我们写localhost:8080会出现Tomcat页面呢?
这是因为Tomcat服务器输入域名的时候默认加载的界面时ROOT应用,ROOT中就是Tomcat页面;要实现只输入域名就可以访问,将项目名称改为ROOT就可以
比如将www.cfeng.com的默认引用名称改为ROOT
资源应用很多时路径如何提示有的时候路径过于多的时候,这个时候输入Tomcat提供了一个功能App Manager;
点击登录即可,也许你没有设置密码最开始的时候,那么如何设置;直接在conf的tomcat-user.xml中设置即可
登录后的界面如下
上面会显示服务器上面所有的应用; 想访问谁,直接单击即可
HTTP协议hyper text transfer protocol 超文本传输协议,是一个基于请求和响应模式的,无状态的网络协议,是浏览器和服务器最常用的通讯协议。HTTP协议是浏览器和服务器数据传输格式的一种约定,遵循这个约定就可以进行数据的传输【这个在计网中介绍过】
请求request和响应response浏览器向服务器发送数据,称为请求request;服务器向浏览器发送数据,则称为响应response
- 请求: 浏览器地址栏中通过地址访问是最常见的请求,两外,表单的提交,点击超链接,发送AJAX请求都是request; 可以通过抓包工具来拦截HTTP请求于响应,可以查看请求和响应,比如HTTPWatch
安装之后就可以进行页面的调试
这里就是当开启HttpWatch之后输入地址,软件检测到的请求【这里的破解版不要随意下载,因为有的中写入了恶意程序;博主花了一顿操作才将恶意代码给删除】
HttpWatch要注意版本的配置
浏览器自动的请求可以看到上面的图片,本来只是输入了一个请求,但是可以看到请求有很多,这就是浏览器的自动的请求;
我们输入的地址只是手动的请求;比如css,jpg等资源也会页面也会提供协议
比如 这里我们使用HTTPWatch来观察,当再地址栏输入的www.cfeng.com:8080/的时候,弹出的请求由很多
通过观察类型,发现除了最上面的html,还包括后面页面自动提交的请求包括css,png,js等文件
HTTP的协议客户端向服务端发送请求,它们之间必须首先创建一个TCP协议,连接关闭后TCP连接关闭,这两个连接就是基于的HTTP协议
从计算机网络的角度来说,TCP建立需要三次握手,TCP连接的关闭需要四次通信,这里不深入,计网部分会深入;在通信中真正使用的协议共有2种,HTTP1.0 和HTTP1.1
- HTTP1.0 客户端要向服务端发送请求,必须先在它们之间建立TCP连接。客户端接收到响应后,服务端关闭TCP连接。只有上次的请求的响应接收到后,客户端才会发送第二次请求。HTTP1.0的连接输入非持久连接。服务器不跟踪和记录任何一次请求和响应【请求和响应成对出现】 也就是一次请求和响应就会关闭一次TCP连接 ---- 但是TCP的建立关闭效率低,所以请求过多的时候,效率过低;不支持虚拟主机
- HTTP1.1 是一种持久连接。在一个TCP连接上可以建立多个HTTP请求和响应。减少了连接建立和关闭的消耗。允许客户不用等待上一次请求的响应返回就可以发送下一次请求 当所有的浏览器的请求发送完后,会发送一个TCP关闭的请求。 为防止服务器主动关闭连接,每一个请求携带参数Connection,值为close的时候关闭,支持虚拟主机【充分增加了利用率】
但是它们都是一个请求对应一个响应
HTTP协议的组成HTTP协议由两部分组成,分别是请求协议和响应协议。分别用于指定请求和响应信息的格式
请求协议URL和URI ;
-
URL:uniform resource locator 是统一资源定位符,互联网标准资源地址,可以确定一个唯一的资源
-
URI : uniform resource identifier 统一资源标识符 标识一个资源的名称,通过这种名称命名的资源可以通过互联网定位和访问
这里使用的抓包工具是微软的monitor
设置颜色变化后观察到了HTTP的请求和响应,这里可以看到使用的协议是HTTP1.1,并且下方显示了HTTP请求和响应的二进制文件和解析的文件
GET /baike-icon.png HTTP/1.1..Host: baikebcs.bdimg.com..User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0..Accept: image/avif,image/webp,**;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive
上面是请求头,后面的都是请求的报头,最后是空白行,这里是我们的手动的请求网址,没有请求的正文
当提交表单的时候,如果选择的是get方式,那么请求的PDU还是一样的,没有正文,因为name和value直接作为URI显示在请求行
当提交表单的方式是POST的时候,URI处没有name,这些内容到了请求正文
POST /index.html HTTP/1.1 Host: www.cfeng.com:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://www.cfeng.com:8080/login.html Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 25 //空白行 username=zhang&pwd=123456 //请求正文
这里的请求方式是POST,所以这里就有正文,因为name和value要在请求正文中出现,而不是在URI中
响应协议请求协议由4部分组成,响应协议也是由四部分组成,包括响应行,响应报头,空白行和响应正文
HTTP/1.1 200 响应行 //协议 状态码 200代表成功 Accept-Ranges: bytes 响应报头 ETag: W/"7334-1638868098582" Last-Modified: Tue, 07 Dec 2021 09:08:18 GMT Content-Type: text/html Content-Length: 7334 Date: Sat, 11 Dec 2021 12:04:40 GMT Keep-Alive: timeout=20 Connection: keep-alive 空白行 响应正文Cfeng.com IT鍔╁姏瀛︿範 ……
请求的是页面,所以返回的是页面
状态码当进行Web应用访问的时候,经常看到4开头的提示界面,这些就是HTTP指定的,服务器传递给浏览器的状态码,标识服务器对当前请求的处理状态
常用的状态码
- 2XX : 表示请求计算机响应成功 常用的是200、
- 4XX : 表示请求错误,常见的状态码是404,表示找不到,一般都是请求的路径有问题
- 5XX: 表示服务端错误,常见的是500,表示服务器内的错误,一般都是服务端的java代码发生错误
当发生错误的时候,一般就显示一个404,这个界面不友好,用户体验不好,如何让自定义界面称为默认界面呢?
- 需要在web.xml中进行配置
之前配置默认界面也是welcome-file-list welcome-page
这里的配置错误的默认界面
GET请求和POST请求404 error.html //自定义页面的位置
之前分析表单的时候就提到过,
get是得到,获取资源, 设计成缓存 没有请求正文,第二次提交和第一次提交是否相同就很好比较【如果相同就直接从缓存中取出】就做一个字符串的比较就可
post是上传,上传文件使用缓存没有意义,对于客户端没有意义 数据量太大,不好比较【并且对于音频和视频等文件,数据丢失一部分只要不影响都是可以的;允许存在差异,所以根本就没法比较】
-
GET请求方式会直接将属性放在地址栏中,组成URL中 — 但是比较敏感的数据和地址栏长度的限制,并且属性值不能为对象; 但是其好处就是使用浏览器的缓存,减少服务器的压力,发送的请求就少了;提升用户的体验
-
POST请求方式则会将属性和属性值放在请求正文中;可以提交对象数据;安全性高,数据类型可以为任意类型,包括图片,声音等文件; 但是不支持浏览器的缓存,所以再次请求还是会响应,这样服务器的效率和负担就重
一般默认的请求都是POST请求,只有表单和AJAXA请求可以选择为POST
那什么时候选择POST?
- 提交所携带的数据不只有字符串时
- 提交所携带的数据量比较大
- 提交所携带的数据有敏感性,安全性要求高 pwd



