web——14.web开发

目录

1.我们如何构建发送

1.GET/data/stundets.json请求 

2.POST/data/students.json请求

2.如何使用Servlet技术开发动态资源

1.定义

2.大体的开发流程:整个过程都需要遵守标准,否则Tomcat不认

1.通过继承HttpServlet抽象类,完成我们自己的类(每个都是一个独立的web资源)  HelloServlet

2.需要重写其中的方法(get、post...),输出资源内容的过程

3.把动态资源和路径绑定关系          /hello <-> HelloServlet

3.浏览器中输入url回车之后,直到看到了网页,期间发生了什么?(很重要的面试题)

4.Servlet的使用

1. HTTP请求中有哪些信息?

 2.GET方法“不携带”请求体,所以需要准备POST方法

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.响应体

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值