JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器

news2024/12/28 18:37:39

Servlet入门 MVC实战项目 仓储管理系统

  • JavaWeb入门介绍
  • Http协议
  • Http请求数据格式
  • Http响应数据格式
  • Web实战Demo:自定义服务器
  • 对比Https协议
  • 总结

Redis章节复习已经过去,新的章节JavaWeb开始了,这个章节中将会回顾JavaWeb实战项目 仓储管理
代码会同步在我的gitee中去,觉得不错的同学记得一键三连求关注,感谢:
JavaWeb优化-链接: JavaWebProject

JavaWeb入门介绍

Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
对我们而言:JavaWeb就是用Java技术来解决相关web互联网领域的技术。

  • 我们平时都是通过浏览器向服务器发起请求,比如:登录,购买,注册等请求
  • 获取服务器给我们的响应数据和资源展示;
    1. 静态web资源(如html 页面、css):指web页面中供人们浏览的数据始终是不变。
    2. 动态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的握手过程。

  1. 客户端发起请求:首先client(客户端)会发送其支持的加密算法,并生成一个随机数C1给server(服务端);
  2. 服务器回应:server收到请求后,会确定加密协议算法,也会生成自己的一个随机数S1,然后随同证书一起发送给client;
  3. 客户端验证证书:此时客户端对证书的有效期、合法性、证书的公钥(RSA加密)等进行校验;验证完毕后会再次产生一个随机数C2,此随机数使用证书中的公钥加密(RSA加密);消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名,并通知服务端;
  4. 生成密钥:server收到加密后的随机数后,使用私钥(申请证书时,server生成的)将其解密并保存;得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。此时双方已经持有安全通信的必要信息(对称加密算法、随机数密钥),可以进行安全通信了。

总结

javaweb有三大组件:Servlet、Filter、Listener

我们后面将会围绕这三大组件进行学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

417. 太平洋大西洋水流问题 难度中等558 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数…

[附源码]计算机毕业设计Python的文成考研培训管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

详细复习云开发~小程序【云存储、列表的下拉刷新、列表的分页加载】

文章目录一,云开发~云存储1-1,云开发控制台管理文件1-2,上传图片到云存储1-3,给商品列表加商品图片1-4,上传视频到云存储1-5,上传word,excel文件到云存储1-5-1,上传之前先选择文件1-…

我国数据库现状与未来发展趋势

作者:IT圈黎俊杰 一、数据库现状 (一)国际数据库市场现状 在看国内数据库市场现状前,先看一组国际市场数据库的应用情况。 以2021年4月份数据国际市场数据库热度排名为例,稳居前三的Oracle、MySQL 和 Microsoft SQL …

朗坤环境递交注册:拟募资11亿 陈建湘家族色彩浓厚

雷递网 雷建平 12月19日深圳市朗坤环境集团股份有限公司(简称:“朗坤环境”)日前更新招股书,并提交注册,准备在深交所创业板上市。朗坤环境计划募资11.22亿元,其中,6.57亿元用于中山市南部组团垃…

目标检测论文解读复现【NO.22】多尺度下遥感小目标多头注意力检测

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

JavaWeb框架(四):JavaWeb项目基于三大组件实现的公司管理系统

MVC实战项目 Web 三大组件实现 公司管理系统需求:项目实战基于会话跟踪技术实现登录功能基于Filter过滤器实现登录验证功能基于Listener监听器监听ServletCntext对象的创建和销毁会话跟踪技术cookiesession对比Filter过滤器入门入门DemoFilter执行流程Filter拦截路径…

基于SSM+Maven+Shiro+Layui+Websocket在线论坛交流聊天bbs系统设计

开发软件:Idea Mysql Redis 开发技术: SSM Maven Shiro Websocket Bootstrap Layui 前台部分 1.用户注册登录模块 用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的…

(附源码)ssm巢湖学院校园报修系统 毕业设计 021813

SSM巢湖学院校园报修系统 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达&…

行业认可|墨菲安全登信息通信软件供应链安全社区优秀榜单

11月以来信息通信软件供应链安全社区开展了“软件供应链优秀成果案例”征集评审活动,在 12 月 16 日的结果公示中,墨菲安全软件供应链安全管理平台本次成功入选自主研发创新成果。这是对墨菲安全长期专注在软件供应链安全领域的成果认可,我们…

堆叠自动编码器(Stacked AutoEncoder)

Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别、语音识别、无人驾驶等技术上都已经落地。而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶、智能助手、图像识别等许多层面。苹果业已开始全面拥抱机器学习&#xf…

Python解题 - CSDN周赛第16期 - 流水还是积水?

问哥在最后30分钟才有空进入比赛,发现满分选手只有两位,就知道大家又遇到坑了。。。其中两道题的数据都多少有点问题。不得不佩服那两位在这种情况下还能拿满分的选手,等到他们分享解题报告后,问哥再来更新代码吧。 第一题&#x…

java Lambda概念 通过实现线程简单体验一下Lambda表达式

首先 我们先对函数式编程 做一个简单的描述 在数学中 函数是 有输入量和输出量的一套计算方案 也就对应程序中的 拿数据 做操作 java 是一个面向对象编程的语言 他强调的做什么都要通过对象完成 而在函数式中就要尽可能摆脱这种思维模式 函数式只在乎做什么 并不强调用什么形…

程序员能纯靠技术渡过中年危机吗?

首先说答案,能!程序员可以靠技术渡过中年危机,但是要转变线性思维。 先说说个人情况,80后,从事电机控制软件开发十余年,属于制造业,算嵌入式的一个小分支,相关的细分行业包括电动汽…

元学习和机器学习的对比

目录引言机器学习元学习什么是元学习元学习的流程学习学习函数评价学习函数好坏迭代优化整体框架元学习和机器学习的对比定义的区别数据集划分的区别损失函数的区别两者之间的共通之处总结引言 本篇博客是李宏毅老师元学习课程的笔记。 深度学习大部分时间在调参数。在业界通…

71. SAP ABAP 报表屏幕输入字段如何实现联动效果

有朋友向我咨询,SAP ABAP 报表输入字段,如何实现联动效果? 所谓联动效果,如下图所示,我们有三个输入框,类型都是 Checkbox: 激活缓存使用共享内存使用二级缓存默认情况下,使用共享内存和使用二级缓存这两个 Checkbox 处于禁用状态。只有当我们选中 激活缓存 时,这两个…

【lssvm回归预测】基于灰狼算法优化最小支持向量机GWO-LSSVM数据预测模型含Matlab源码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

[备战蓝桥杯系列]蓝桥杯总结部分经典题题解分享

文章目录题目1:空间题目2:数字三角形题目3:刷题统计题目4:阶乘约数题目5:回路计数本篇文章中的题解是我所写的代码且都是可以运行通过的, 总结出的一篇相对来说比较清晰的个人题解, 希望要备战蓝桥杯的小伙伴能够看到最后(由于本人要参加的是Java组, 所以后面的题解基本都是使用…

Vant 4 - 新版本发布!有赞出品的 Vue3 移动端 UI 组件库,轻量好用,免费开源

主流的 Vue 移动端组件库 Vant 迎来了第四个大版本的更新,用来开发手机端项目非常好用,强烈推荐给各位开发者使用。 关于 Vant 4 Vant 是一个轻量、可靠的移动端组件库,基于 Vue3,由有赞开发并且维护。有赞作为早期以 H5 商城、…

Mysql Yum安装

步骤一:首先下载mysql的yum源配置 1 | wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 步骤二:安装mysql的yum源 1 | yum -y install mysql57-community-release-el7-11.noarch.rpm 步骤三:yum方式安装mysql …