尚硅谷全新JavaWeb教程,企业主流javaweb技术栈【学习笔记】上-CSDN博客
第五章 XML_Tomcat10_HTTP
一 XML
XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标i记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基
本语法都是标签。
- 可扩展三个字表面上的意思是XML允许自定义格式。但这不代表你可以随便写。
- 在XML基本语法规范的基础上,你使用的那些第三方应用程序、框架会通过XL约束的方式强制规定配置文件中可以写什么和怎么写
- XML基本语法这个知识点的定位是:我们不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决XML基本语法和具体的XML约束。
1.1常见配置文件类型
1.properties.文件,例如druidi连接池就是使用properties.文件作为配置文件
2.XML文件,例如Tomcati就是使用XML文件作为配置文件\
XML 树结构 | 菜鸟教程
3.YAML文件,例如SpringBoot就是使用YAML作为配置文件
1.2 DoM4J进行XML解析
1.2.1 DoM4J的使用步骤
- 1.导入jar包dom4jjar
- 2.创建解析器对象(SAXReader
- 3.解析xml获得Document对象
- 4.获取根节点RootElement
- 5.获取根节点下的子节点
1.2.2 D0M4J的API介绍
1.创建SAXReader对象
SAXReader saxReader = new SAXReader();
2.解析XML获取Document对象:需要传入要解析的XML文件的字节输入流
Document document = reader.read(inputStream);
3.获取文档的根标签
Element rootElement = documen.getRootElement()
4.获取标签的子标签
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element>sonElementList = rootElement.elements("标签名");
二 TomCat10
2.1 WEB服务器
Wb服务器通常由硬件和软件共同构成。
- ·硬件:电脑,提供服务供其它客户电脑访问
- ·软件:电脑上安装的服务器软件,安装后能提供服务给网络中的其他计算机,将本地文件映射成一个虚拟的u地址供网络中的其他人访问。
常见的JavaWeb服务器:
- Tomcat(Apache):当前应用最广的JavaWeb服务器
- Jetty:更轻量级、更灵活的servlet容器
- JBoss(Redhat红帽):支持JavaEE,应用比较广EJB容器->SSH轻量级的框架代替
- GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广
- Resin(Caucho):支持JavaEE,应用越来越广
- Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目
- Websphere(IBM):要钱的!支持JavaEE,适合大型项目
2.2 Tomcat安装
选择版本10下载并解压
找到bin目录下,
shutdown.bat 关闭
statup.bat Windows下打开tomcat
statup.sh Linux下打开tomcat
浏览器输入 localhost:8080 验证打开成功
记事本打开 conf 目录下文件,将对应位置的UTF-8改为GBK
2.3 Tomcat目录及测试
apache-tomcat-l0.1.7这个目录下直接包含Tomcat的bin目录,conf目录等,我们称之为Tomcat的安装目录或根目录。
- bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat10.exe、tomcat10w,exe,前者是在控制台下启动Tomcat,后者是弹出GU川窗口启动Tomcat;,如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
- conf : 配置文件
- lib : jar包
- logs : 日志文件,可删除
- temp :临时文件,可删除
- webapps : 存放web项目
- work : jsp相关,现在不常用了
配置环境变量,使其可以在dos中直接打开
在环境变量中新建环境变量,在Path中添加%CATALINA_HOME%\bin
默认端口号可更改
访问appwebs文件夹内文件
2.4 WEB项目的标准结构
一个标准的可以用于发布的WEB领目标准结构如下
- app本应用根目录
- static非必要目录,约定俗成的名字,一般在此处放静态资源(css js img)
- WEB-NF必要目录,必须叫WEB-NF,受保护的资源目录,浏览器通过u不可以直接访问的目录
- classes必要目录,src下源代码,配置文件,编译后会在该目录下,web项目中如果没有源码,则该目录不会出现
- lib 必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是设有依赖任何jar,则该目录不会出现
- web.xml必要文件,web项目的基本配置文件,较新的版本中可以没有该文件,但是学习过程中还是需要该文件
2.5 WEB项目部署的方式
- 方式1直接将编译好的项目放在webapifs目录下(已经演示)
- 方式2将编译好的项目打成war包,放在webapps目录下,tomcat启动后会自动解压war包(其实和第一种一样)
- 方式3可以将项目放在非webapps的其他目录下,在tomcat中通过配置文件指向app的实际磁盘路径
方式3
webapps文件夹中 文件夹
ROOT文件夹访问不需要加ROOT目录
manager、host-manager 打开需要账号和密码
需要在conf文件夹下tomcat-user.xml 中加入下述信息
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin"
password="admin"
roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"
/>
2.6 IDEA中开发并部署运行WEB项目
2.6.1 IDEA关联本地Tomcat
可以在创建项目前设置本地tomcat,,也可以在打开某个项目的状态下找到settings
1 建立tomcat和idea的关联
2 使用idea创建一个javaWEB工程在WEB工程中开发代码
3 使用idea将工程构建成一个可以发布的app
4 使用idea将构建好的app部署到tomcat中,启动运行
2.6.2 IDEA创建web工程
推荐先创建一个空项目,这样可以在一个空项目下同时存在多个modules,不用后续来回切换之前的项目,当然也可以忽略此步直接创建wb项目
打开空项目
配置项目相关设置
在空项目下新建第一个模块,即第一个项目
为第一个项目添加组件
发现版本号太低了,换另一种方法
找到Project Structure
添加tomcat
接着再找到 Add Frameworks Support 选择6.0版本 Web Application
成功后项目下会有web文件夹
项目下文件夹,结构
resources 下放配置文件,此文件夹需要自己新建并配置属性才能和src文件夹下文件一起编译
src 文件夹下放java代码
resources 、src 编译后文件放入web 下WEB-INF中
web 下 lib文件夹需自己新建,放入 jar包 ,再右键选择Add as Library
将项目构建为可以发布的app并部署到tomcat中步骤如下(也可以直接点击运行idea会自动构建并在tomcat上部署)
将项目构建为可以发布的app
构建后生成out 文件夹,其中 demo01_web01_war_exploded 文件夹就是可发布的app
其中classes文件夹下即 src 、resources 文件夹下文件编译后的文件
将项目部署到tomcat上
选择本地
此处Application context 内容为网页访问地址名,可自定义,此处我改为web01,点击应用即可
此处open browser 表示默认打开的浏览器,HTTP port 表示端口号。
接着直接运行即可实现在tomcat上运行
其中运行后窗口乱码
找到conf文件夹下logging.properties 修改对应行的utf -8 改为GBK
2.6.3 Tomcat_IDEA使用Tomcat运行JavaWeb 原理
IDEA部署并运行项目的原理
- idea并没有直接进将编译好的项目放入tomcat的webapps中
- idea根据关联的tomcat,创建了一个tomcat副本将项目部暑到了这个副本中
- idea的tomcat副本在C:用户\当前用户\AppData\Local JetBrains\IntelliJIdea2022.2\ tomcat\中
- idea的tomcat副本并不是一个完整的tomcat,副本里只是准备了和当前项目相关的配置文件而已
- idea启动tomcat时,是让本地tomcati程序按照tomcat副本里的配置文件运行
- idea的tomcat副本部暑项目的模式是通过conf/Catalina/localhost/*.xml配置文件的形式实现项目部署的
三 HTTP 协议
3.1 HTTP简介
HTTP超文本传输协议(HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。HTTP协议就是规定报文的格式。HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为"请求报文”,服务器发送给客户端的称为"响应报文"。
3.1.1发展历程
HTTP/0.9
- 蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在1989年创建了单行HTTP协议。它只是返回一个网页。这个协议在1991任被合名为HTTP/0.9
HTTP/1.0
- 1996年,HTTP/1.0发布。该规范是显署扩头,并且支持三种请求方法:GET,Head,和POST。
- HTTP/1.0相对于HTTP/0.9的改进如下:
- 每个请求都附加了HTTP版本。
- 在响应开始时发送状态代码。
- 请求和响应都包含HTTP报文头。
- 内容类型能够传输HTML文件以外的文档。
- 但是,HTTP/1.0不是官方标准。
HTTP/1.1 (目前大多数使用。tomcat默认使用http/1.1)
- HTTP的第一个标准化版本HTTP/1.1(RFC2068)于1997年初发布,支持七种请求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE
- HTTP/1.1是HTTP1.0的增强:
- 虚拟主机允许从单个P地址提供多个域。
- 持久连接和流水线连接允许Wb浏览器通过单个持久连接发送多个请求。
- 缓存支持节省了带宽并使响应速度更快。
- HTTP/1.1在接下来的15年左右将非常稳定。
- 在此期间,出现了HTTPS(安全超文本传输协议)。它是使用SSL/TLS进行安全加密通信的HTTP的安全版本。
HTTP/2
- 由1ETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使web应用更加快速、高效和可靠。
- 多路复用:HTTP/2允许同时发送多个请求和响应,而不是像HTTP/1.1一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量
- 二进制传输:HTTP2使用二进制协议,与HTTP/1.1使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。
- 头部压缩:HTTP/2使用HPACK算法对HTTP头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
- 服务器推送:HTTP/2支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。
- 改进的安全性:HTTP/2默认使用TLS(Transport Layer Security)加密传输数据,提高了安全性。
- 兼容HTTP/1.1:HTTP/2可以与HTTP/1.1共存,服务器可以同时支持HTTP/1.1和HTTP/2。如果客户端不支持HTTP/2,服务器可以回退到HTTP/1.1。
HTTP/3
- 于2021年5月27日发布,HTTP/3是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。HTTP/3没有使用TCP,而是使用谷歌在2012年开发的新协议QU1C
- HTTP/3是继HTTP/1.1和HTTP/2之后的第三次重大修订。
- HTTP/3带来了革命性的变化,以提高Web性能和安全性。设置HTTP/3网站需要服务器和浏览器支持。
- 目前,谷歌云、Cloudflare和Fastly支持HTTP/3。Chrome、Firefox、Edge、Opera和一些移动浏览器支持HTTP/3。
3.1.2 HTTP协议的会话方式
浏览器与服务器之间的通信过程要经历四个步骤
- 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
3.1.3 HTTP1.0和HTTP1.1的区别
在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。并且http1.1支持缓存,节省了带宽并使响应速度更快。。
3.2 请求和响应报文
3.2.1 报文的格式
主体上分为报文首部和报文主体,中间空行隔开
报文部首可以继续细分为"行"和"头"
3.2.2 请求报文
客户端发给服务端的报文
- 请求报文格式
- 请求首行(请求行);GET/POST 资源路径?参数HTTP/1.1
- 请求头信息(请求头):
- 空行;
- 请求体;POST请求才有请求体
浏览器f12网络下查看请求数据包
form表单发送GET请求特点
- 由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行
- 请求参数拼接在ur地址中,地址栏可见[url?namel=value1&name2=value2],不安全
- 由于参数在地址栏中携带,所以由大小限制地址栏数据大小一般限制为4k],只能携带纯文本
- get请求参数只能上传文本数据
- 没有请求体。所以封装和解析都快,效率高,浏览器默认提交的请求都是gt请求比如:地址栏输入回车,超链接,表单默认的提交方式
查看GET请求行,请求头,请求体
- 请求行组成部分
- 请求方式GET
- 访问服务器的资源路径?参数1=值1&参数2=值2……
- 协议及版本HTTP/1.1
GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
- 请求头
-主机虚拟地址
Host:localhost:8080
-长连接
Connection:keep-alive
-请求协议的自动升级[http的请求,服务器却是httpsl的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests:1
-用户系统信息
User-Agent:Mozilla/5.0 (Windows NT 6.1;WOW64)AppleWebKit/537.36 (KHTML,like Gecko)Chrome/68.0.3440.75 Safari/537.36
-浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
-当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:可以通过此路径跳转回上一个页面,广告计费,防止盗链
Referer:http://localhost:8080/05_web_tomcat/login.html
-浏览器支持的压缩格式
Accept-Encoding:gzip,deflate,br
-浏览器支持的语言
Accept-Language:zh-CN,zh;q=0.9,en-US q=0.8,en;q=0.7
- 请求空行
- 请求体
- GET请求数据不放在请求体
form表单发送post请求特点
- POST请求有请求体,而GET请求没有请求体。
- POST请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容文件、文本]
- 只能使用post请求上传文件
- POST请求报文多了和请求体相关的配置请求头]
- 地址栏参数不可见,相对安全
- post效率比get低
- POST请求要求将form标签的method的属性设置为post
查看post的请求行请求头请求体
- 请求行组成部分
- 请求方式P0ST
- 访问服务器的资源路径?参数1=值1&参数2=值2…
- 协议及版本HTTP/1.1
POST /05_web_tomcat/login_success.html HTTP/1.1
- 请求头
Host:localhost:8080
Connection: keep-alive
Content-Length: 31 -请求体内容的长度
Cache-Control: max-age=g-无缓存
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1- 协议的自动升级
Content-Type: application/x-www-form-urlencoded -请求体内容类型[服务器根据类型解析请求体参数]
User-Agent: Mozilla/5.0 (Windows NT 6.1:WOW64) AppleWebKit/537.36 (KHTML,like Gecko)Chrome/68.0.3440.75 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*q=0.8
Referer: http://localhost:8080/05_web_tomcat/login.html
Accept-Encoding: gzip,deflate,br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: JSESSIONID-
- 请求空行
- 请求体:浏览器提交给服务器的数据
username=admin&password=1232131
3.2.3 响应报文
响应报文格式
- 响应首行(响应行);协议/版本状态码状态码描述
- 响应头信息(响应头);
- 空行:
- 响应体;
- 响应行组成部分
- 协议及版本 HTTP/1.1
- 响应状态码 200
- 状态描述 OK(缺省)
HTTP/1.1 200 OK
说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功:
- 响应头
Server:Apache-Coyote/1.1 服务器的版本信息
Accept-Ranges: bytes
ETag: W/°157-1534126125811"
Last-Modified: Mon,13 Aug 2018 02:08:45 GMT
Content-Type: text/html 响应体数据的类型[浏览器根据类型解析响应体数据]
Content-Length: 157 响应体内容的字节数
Date: Mon,13Aug2018g2:47:57GNT 响应的时间,这可能会有8小时的时区差
- 响应体
<!-需要浏览器解析使用的内容[如果响应的是htm1页面,最终响应体内容会被浏览器显示到页面中]->
<DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
恭喜你,登录成功了
</body>
</html>
响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:
- 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
- 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Locatior指定新请求的UL地址;
- 304:使用了本地缓存
- 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
- 405:请求的方式不允许
- 500:请求资源找到了,但服务器内部出现了错误;
更多的响应状态码
第五章 Servlet
一 Servlet简介
1.1动态资源和静态资源
静态资源
- 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img,音频文件和视频文件
动态资源
- 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servlet,Thymeleaf..…
- 动态资源指的不是视图上的动画效果或者是简单的人机交互效果
生活举例
- 去蛋糕店买蛋糕
- 直接买柜台上已经做好的:静态资源
- 和柜员说要求后现场制作:动态资源
1.2 Servlet简介
Servlet(server applet)是运行在服务端tomcat的,ava小程序,是sun公司提供一套定义动态资源规范:从代码层面上来讲Servlet就是一个接口
- 用来接收、处理客户端请求、响应给浏览器的动态资源,在整个wb应用中,Servlet主要负责接收处理请求、协同调度功能以及响应数据。我们可以把Servleti称为web应用中的控制器
- 不是所有的JAVA类都能用于处理客户端请求,能处理客户端请求并做出响应的一套技术标准就是Servlet
- Servlet是运行在服务端的,所以Servlet必须在WEB项目中开发且在Tomcati这样的服务容器中运行
请求响应与HttpServletRequest和HttpServletResponse之间的对应关系
...............更新中........................
标签:教程,HTTP,请求,tomcat,响应,1.1,浏览器,javaweb,JavaWeb From: https://blog.csdn.net/qq_43668996/article/details/136906083