目录
2.大体的开发流程:整个过程都需要遵守标准,否则Tomcat不认
1.通过继承HttpServlet抽象类,完成我们自己的类(每个都是一个独立的web资源) HelloServlet
2.需要重写其中的方法(get、post...),输出资源内容的过程
3.把动态资源和路径绑定关系 /hello <-> HelloServlet
3.浏览器中输入url回车之后,直到看到了网页,期间发生了什么?(很重要的面试题)
1.Ajax的使用:提供JS可以发起HTTP请求的能力(同一个域名下才有权限)
XMLHttpRequest()对象的使用
open(methord,url) send() onload = function(){...}
responseText:响应体
2.JSON格式:JS对象的子集(1.key必须是引号引起 2.数据类型中不能有函数)
JS中如何系欸小JSON字符串:JSON.parse(jsonString)
ajax.html包含一个<script src="js/script.js"></script>
js/scripts写了ajax代码,请求data/students.json资源
行为主体: 用户 浏览器(进程) Tomcat(进程)
(1)用户在浏览器中输入.../ajax.html回车
(2)浏览器分析用户的输入,构建HTTP请求(GET)请求
(3)Tomcat收到请求,根据资源路径,找到对应的文件webapp/ajax.html
读取内容,准备响应并发送(200 text/html)
(4)读取响应体,根据content-type决定按照html方式对待内容,解析HTML中标签
(5)在解析过程中,看到<script src="..."></script>,构建一个新的HTTP请求(GET/js/script.js)
(6)Tomcat根据资源路径,找到对应的文件,读取内容,准备HTTP响应(200application/javascript...)
(7)浏览器读取响应体,根据contend-type,执行js代码,实例化xhr对象,send()
(8)Tomcat根据资源...bala(application/json)
(9)浏览器读取响应,执行JS代码中写的xhr.onload函数。调用JSON.parse(this.responseText)
遍历对象+修改DOM树
(10)浏览器得到最终的DOM结构,显示内容
(11)用户看到最终的页面显示
由于有三次请求响应,所以在开发者工具的网络面板中可以看到3行
1.我们如何构建发送
1.GET/data/stundets.json请求
1.在地址栏输入url然后回车 2.通过一些标签<img>、<script>、<link>
3.还有一些标签<a>、<form>
4.ajax 5.重定向(redirecet)
2.POST/data/students.json请求
1.<form method="post">
2.Ajax 3.重定向redirect
2.如何使用Servlet技术开发动态资源
1.定义
1.为什么需要动态资源?
在某些资源路径固定的情况下,我们需要对应不同的环境/条件,产生不同的内容
例如:各个网站的个人中心页面
2.Servlet: Server Let(服务器 小物件)——官方提供的标准,输入JavaEE标准(一组抽象类、接口)
3.Servlet当下环境如何?基本不用了,SpringMVC为主(也是基于Servlet而诞生)
2.大体的开发流程:整个过程都需要遵守标准,否则Tomcat不认
1.通过继承HttpServlet抽象类,完成我们自己的类(每个都是一个独立的web资源) HelloServlet
2.需要重写其中的方法(get、post...),输出资源内容的过程
3.把动态资源和路径绑定关系 /hello <-> HelloServlet
1.通过web.xml(一般不会使用)
2.使用java注解语法完成@WebServlet @Override
以下讲解这个方法的具体步骤:
1.WebServlet把动态资源和路径绑定,如果要通过浏览器访问,就必须添加third
当前学习到web部分,每次修改代码,以防万一,我们都重启Tomcat
2.通过继承HttpServlet表示我们这个类是一个有效的Web资源(动态)了
3.重写doGet方法,这个资源支持HTTP GET方法访问。隐含着其他HTTP方法,我们是不支持的,如果非要用不是get方法访问这个资源,会405(方法不支持)
根据请求or其他条件构造响应的过程,就是动态资源的例子
4.Tomcat内部的大概过程:
(1)Tomcat收到了一个HTTP请求
(2)Tomcat根据HTTP协议的规定,解析请求,得到诸如:请求方法、资源路径、请求头们、请求体
(3)Tomcat根据资源路径(Path = Context Path +Servlet Path)
3.1现根据Context Path,决定这个资源是交给哪个Webapp处理(隐含:Tomcat支持多个webapp同时存在)
3.2当确定是哪个webapp后,在根据Servlet Path,去找到对应的资源进行处理
3.2.1如果是动态资源,根据路径得到一个类名
如果这个类还没有实例化对象,则实例化其对象,否则直接获取其对象(单例模式)
根据请求方法,调用该对象的doGet或者doPost或者其他方法
3.2.2 doGet方法执行结束之后,resp对象被填充信息(203,text/css,你好西安)
Tomcat根据这个对象,构造Http响应,发送给浏览器
3.2.3如果是静态资源,就根据对应的路径去查找对应的文件,并响应文件内容
3.2.4如果动态or静态资源都没找到,就会404
3.浏览器中输入url回车之后,直到看到了网页,期间发生了什么?(很重要的面试题)
只站在应用层角度:
1.浏览器:解析URL,(如果是域名,通过DNS服务器将域名换成ip的过程)构件HTTP请求(GET请求)
2.Tomcat收到了请求,根据路径,确定对应的Servlet哪个对象进行处理根据请求方法,调用对象的对应方法
3.执行Servlet业务代码(我们写的),得到填充好的响应对象
4.Tomcat根据响应对象,构件HTTP协议,发送给浏览器
5.浏览器读取响应,展示:
如果是html/JS,可能还会触发新的HTTP请求
6.浏览器得到显示页面的所有的资源,构件DOM树(包含JS处理过的情况)+进行CSS渲染
产生最终的页面
7.用户看到最终的页面效果
DNS的请求过程:
1.浏览器中可能有本地DNS缓存
2.如果缓存中没有,去调用OS系统系统调用,去要DNS换ip
(1)OS读取本地host文件(俗称固定host)
(2)OS会发送DNS请求,给本地DNS服务器
如果本地DNS有记录,直接返回,如果没有,再去它的上一级要记录结果
最终这个过程走到了DNS(根DNS:全球一共13台)
3.业务根据请求,填充响应的过程
(1)直接填充
(2)配合数据库中的数据进行填充(比如验证登陆)
(3)还有其他的存储/接口服务(比如Redis、ES、MongDB等)
结合网络知识:
(1)纯TCP的角度也可以讲述:要发送HTTP请求,收到HTTP响应,首先得有TCP连接
可以展开TCP三次握手、四次挥手
(2)站在发送端主机的角度:应用层->传输层->网络层->数据链路层->物理层(网卡),按照各种协议封装起来的。
站在接收端主机的角度:物理层(网卡)->数据链路层 ->网络层->传输层->应用层,按照协议解包+分用
(3)只针对网络层的路由(路由表的作用(把长期目标->短期目标)、ARP表(把局域网IP换成MAC地址) )
(4)NAT服务器怎么做IP和port替换映射
4.Servlet的使用
1. HTTP请求中有哪些信息?
1.请求方法 2.资源路径url 3.请求版本 4.请求头们 5.请求体(如果存在)
这些信息都可以通过req获取
2.GET方法“不携带”请求体,所以需要准备POST方法
准备:携带请求体的POST请求
准备:一个html,里面有form表单,通过form表单来发送HTTP POST请求
准备:一个动态资源,仅支持POST方法,打印读取到的请求体(PS:这个动态资源不能用GET方法访问)
URL和URI中支持的字符是有限的,所以一些特殊字符(比如&、空格、加号等)和中文需要经过URL编码。
3.URL编码的大体过程:
(1)将字符经过一定的字符集(通常是UTF-8)编码
比如: & ->0x26 我 ->0xE68891
(2)将每个字节都用%做前缀
比如: &-> %26 我->%E68891
HTTP请求<->HttpServletRequest对象 这里方法以getXX()为主
HttpServletResponse <-> HTTP响应 这里方法以Ser()为主
1.状态(状态码和状态描述)
2.响应头
3.响应体