JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器
Servlet入门 MVC实战项目 仓储管理系统
- JavaWeb入门介绍
- Http协议
- Http请求数据格式
- Http响应数据格式
- Web实战Demo:自定义服务器
- 对比Https协议
- 总结
Redis章节复习已经过去,新的章节JavaWeb开始了,这个章节中将会回顾JavaWeb实战项目 仓储管理
代码会同步在我的gitee中去,觉得不错的同学记得一键三连求关注,感谢:
JavaWeb优化-链接: JavaWebProject
JavaWeb入门介绍
Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
对我们而言:JavaWeb就是用Java技术来解决相关web互联网领域的技术。
- 我们平时都是通过浏览器向服务器发起请求,比如:登录,购买,注册等请求
- 获取服务器给我们的响应数据和资源展示;
- 静态web资源(如html 页面、css):指web页面中供人们浏览的数据始终是不变。
- 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。常用动态web资源开发技术:JSP/Servlet、ASP、PHP等,在Java中,动态web资源开发技术统称为Javaweb。
我们对Web的操作都是基于HTTP协议来进行传输数据的。
HTTP(超文本传送协议)是在客户程序(如浏览器)与服务器程序之间进行交互所使用的协议。
HTTP是面向事务的应用层协议,它使用TCP连接进行可靠传输,服务器默认监听在80端口。
简单来说,HTTP协议就是客户端和服务器交互的一种通迅的协议(格式)。HTTP的诞生主要是为了能够让文档之间相互关联,形成超文本可以互相传阅。
Http就是Web通信的基础。
引进一个新的概念:
B/S 架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。
Http协议
- HTTP协议:主要定义通信规则
- HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
- 浏览器发送请求给服务器,服务器响应数据给浏览器,这整个过程都需要遵守一定的规则,之前大家学习过TCP、UDP,这些都属于规则,这里我们需要使用的是HTTP协议,这也是一种规则。
- 需要注意的是:在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉及到其他的协议的。比如:DNS、FTP等等;
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1)建立TCP连接、2)Web浏览器向Web服务器发送请求行、3)发送请求头、4)(服务器)发送状态行、5)发送响应头、6)发送响应数据->7)断TCP连接
web服务器解析协议,得到请求数据,发送响应;我们最常用的web服务器就是tomcat;
我们给出一个基本的请求与响应展示(F12快捷键):
HTTP主要就是学习请求和响应数据的具体格式内容
HTTP协议有它自己的一些特点,分别是:
基于TCP协议: 面向连接,安全
TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。
基于请求-响应模型的:一次请求对应一次响应
请求和响应是一一对应关系
HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的
无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,
- 缺点:多次请求间不能共享数据
- 优点:速度快
请求之间无法共享数据会引发的问题,如:
- 京东购物,
加入购物车
和去购物车结算
是两次请求, - HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品
- 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据
具体使用的时候,我们发现京东是可以正常展示数据的,原因是Java早已考虑到这个问题,并提出了使用
会话技术(Cookie、Session)
来解决这个问题。具体如何来做,我们后面会详细讲到。刚才提到HTTP协议是规定了请求和响应数据的格式,那具体的格式是什么呢?
Http请求数据格式
请求数据总共分为三部分内容,分别是请求行、请求头、请求体
Http响应数据格式
响应数据总共分为三部分内容,分别是响应行、响应头、响应体
Web实战Demo:自定义服务器
package com.itheima;import sun.misc.IOUtils;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
/*自定义服务器*/
public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(8080); // 监听指定端口System.out.println("server is running...");while (true){//ServerSocket的accept()方法从连接请求队列中取出一个客户的连接请求,然后创建与客户连接的Socket对象,并将它返回。如果队列中没有连接请求,accept()方法就会一直等待,直到接收到了连接请求才返回。Socket sock = ss.accept();System.out.println("connected from " + sock.getRemoteSocketAddress());Thread t = new Handler(sock);t.start();}}
}
在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求,并生成与客户端连接的Socket。
我们通过ServerSocket创建服务器服务,监听指定端口,线程Handler请求过来,进行处理;
class Handler extends Thread {Socket sock;public Handler(Socket sock) {this.sock = sock;}public void run() {try (InputStream input = this.sock.getInputStream()) {try (OutputStream output = this.sock.getOutputStream()) {handle(input, output);}} catch (Exception e) {try {this.sock.close();} catch (IOException ioe) {}System.out.println("client disconnected.");}}
定义 基本线程Handler,处理请求
handle方法中,请求拿到一个静态资源网页,解析并返回,这里是通过输入输出流的方式实现的
private void handle(InputStream input, OutputStream output) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));// 读取HTTP请求:boolean requestOk = false;String first = reader.readLine();if (first.startsWith("GET / HTTP/1.")) {requestOk = true;}for (;;) {String header = reader.readLine();if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕break;}System.out.println(header);}System.out.println(requestOk ? "Response OK" : "Response Error");if (!requestOk) {// 发送错误响应:writer.write("HTTP/1.0 404 Not Found\r\n");writer.write("Content-Length: 0\r\n");writer.write("\r\n");writer.flush();} else {// 发送成功响应:
BufferedReader 读取资源
//读取html文件,转换为字符串BufferedReader br = new BufferedReader(new FileReader("D:/Java-Sum/JavaWebHM/hmBook/day08-HTTP&Tomcat&Servlet/代码/http/html/a.html"));StringBuilder data = new StringBuilder();String line = null;while ((line = br.readLine()) != null){data.append(line);}br.close();int length = data.toString().getBytes(StandardCharsets.UTF_8).length;
资源获取,最后返回给响应
writer.write("HTTP/1.1 200 OK\r\n");writer.write("Connection: keep-alive\r\n");writer.write("Content-Type: text/html\r\n");writer.write("Content-Length: " + length + "\r\n");writer.write("\r\n"); // 空行标识Header和Body的分隔writer.write(data.toString());writer.flush();}}
}
对比Https协议
HTTP在安全上是不足的:
- 通信使用明文【没有加密过内容的】
- 不验证通信方身份,无论是客户端和服务器,都是随意通信的
- 无法证明报文的完整性【别人监听后,可以篡改】
其实HTTPS就是披着SSL的HTTP。HTTPS 需要CA机构的颁发的SSL证书,HTTPS 的标准端口是443,而HTTP 标准端口是80。
https流程介绍
在tcp建立之后,在正式http请求(发送url)之前,会有一个ssl的握手过程。
- 客户端发起请求:首先client(客户端)会发送其支持的加密算法,并生成一个随机数C1给server(服务端);
- 服务器回应:server收到请求后,会确定加密协议算法,也会生成自己的一个随机数S1,然后随同证书一起发送给client;
- 客户端验证证书:此时客户端对证书的有效期、合法性、证书的公钥(RSA加密)等进行校验;验证完毕后会再次产生一个随机数C2,此随机数使用证书中的公钥加密(RSA加密);消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名,并通知服务端;
- 生成密钥:server收到加密后的随机数后,使用私钥(申请证书时,server生成的)将其解密并保存;得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。此时双方已经持有安全通信的必要信息(对称加密算法、随机数密钥),可以进行安全通信了。
总结
javaweb有三大组件:Servlet、Filter、Listener
我们后面将会围绕这三大组件进行学习
JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器相关推荐
- Java Web(day05) —— 请求和响应
一.Java web之请求和响应 Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequ ...
- Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
先看下效果图: 我通过 127.0.0.1:10010 访问我启用服务的效果图. 后台接收到的前台请求如下: GET / HTTP/1.1 Host: 127.0.0.1:10010 Connecti ...
- post入门篇:请求头/响应头、cookie、URL结构/编码、数据编码、winHttpRequest、post分析技巧、伪装IP
目录 http URL URL编码 协议头 get请求头 post请求头.响应头 提交数据的类型(Content-Type) 编码 Base64编码 易语言处理302的包 cookie 浏览器是如何设 ...
- HTTP请求和响应格式介绍
1.HTTP请求 HTTP请求由请求行.消息报头.及请求正文组成: 2.请求行格式 Method Request-URI HTTP-Version CRLF 其中Method为请求方法,Request ...
- php 追查框架生命周期,ThinkPHP5框架的生命周期:从发出请求到响应完成
URL请求的生命周期 客户端通过URL发送访问请求 服务器端返回请求数据 TP5的生命周期 入口文件-->引导文件-->注册自动加载-->注册错误和异常机制-->应用初始化-- ...
- WEB入门实践-张晨光-专题视频课程
WEB入门实践-256人已学习 课程介绍 WEB开发入门编程,从各种开发工具的讲解到html标签,css元素讲解,js课程系列. 课程收益 培养web开发技术人才 讲师介绍 ...
- Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门
Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...
- sts java配置tomcat_Java Web入门学习(一) STS与Tomcat配置
Java Web学习(一) STS与Tomcat配置 一.IDE的选择 使用基于Eclipse的STS Ide ,个人感觉挺好用的. 根据以上两张图片,将STS 下载下来.然后解压缩. 用编辑器打开S ...
- 【N1BOOK】[第一章 web入门] wp
第一章 web入门]常见的搜集 wp [N1BOOK][第一章 web入门]常见的搜集 wp [N1BOOK][第一章 web入门]粗心的小李 wp [N1BOOK][第一章 web入门]afr_1 ...
最新文章
- 如何用windows系统访问Linux系统的web网站
- 关卡设计快速入门_6. 执行构建过程
- python浅拷贝 深拷贝
- MSM8974 fastboot烧写软件
- Eratosthenes筛选法(C++版)
- 转发技术风雨三十年,你经历过……
- 自动跑程序vbs脚本
- PHP仿金蝶云ERP进销存网络多仓版源码
- 基于opencv 的OCR小票识别(1)
- 扫描仪 无线 打印服务器,树莓派搭建网络打印机 扫描仪服务器
- 计算机论文外文翻译,计算机专业毕业论文外文翻译2篇
- 电力物联网大数据平台架构及应用
- 局部线性嵌入 (Locally linear embedding-LLE)原理总结
- 行人重识别综述学习笔记
- [弹幕词云姬]硬核b站up主一周撸出来的小工具,根据b站弹幕生成词云(一)
- 自考本科计算机安全,计算机网络系统安全搭建与防护-自考本科毕业论文.doc
- oracle查询视图时慢,oracle视图查询速度慢
- java straem 过滤_Java Stream 过滤器
- liunx下如何使用unzip 如何压缩文件
- 中国区域地图叠加绘制