广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java基于IDEA实现http编程的示例代码
  • 877
分享到

Java基于IDEA实现http编程的示例代码

2024-04-02 19:04:59 877人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Http开发前言之为什么要有应用层 我们已经学过tcp/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程 [ IP+Port ],可是,仅仅把数据从A点传

Http开发前言之为什么要有应用层

我们已经学过tcp/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程 [ IP+Port ],可是,仅仅把数据从A点传送到B点就完了吗?这就好比,在淘宝上买了一部手机,卖家[ 客户端 ]把手机通过顺丰[ 传送+路径选择 ] 送到买家 [ 服务器 ] 手里就完了吗?当然不是,买家还要使用这款产品,还要在使用之后,给卖家打分评论。所以,我们把数据从A端传送到B端, TCP/IP 解决的是顺丰的功能,而两端还要对数据进行加工处理或者使用,所以我们还需要一层协议,不关心通信细节,关 心应用细节! 这层协议叫做应用层协议。而应用是有不同的场景的,所以应用层协议是有不同种类的,其中经典协议 之一的HTTP就是其中的佼佼者。那么, Http 是解决什么应用场景呢? 早期用户,上网使用浏览器来进行上网,而用浏览器上网阅读信息,最常见的是查看各种网页【其实也 是文件数据,不过是一系列的html 文档,当然还有其他资源如图片, CSSjs 等】,而要把网页文件信息通过网络传送到客户端,或者把用户数据上传到服务器,就需要Http 协议【当然,http作用不限于此】

1.2再谈 "协议"

那如何理解应用层协议呢?再回到我们刚刚说的买手机的例子,顺丰相当于TCP/IP 的功能,那么买回来的手机都附带了说明书【产品介绍,使用介绍,注意事项等】,而该说明书指导用户该如何使用手机 【虽然我们都不看,但是父母辈有部分是有看说明书的习惯的:)】,此时的说明书可以理解为用户层 协议

1.3HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的.

但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一.

1.4认识URL

平时我们俗称的 “网址” 其实就是说的 URL

在这里插入图片描述

一、HTTP格式- 编程前最需要掌握的知识点

在这里插入图片描述

HTTP请求

在这里插入图片描述

首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
HTTP响应

在这里插入图片描述

首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

HTTP常见Header
Content-Type: 数据类型(text/html等) Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
好了,准备知识已经就绪,可以开始编程了

二、idea实现HTTP服务端的开发

1.创建java项目

代码如下(示例):

在这里插入图片描述

在这里插入图片描述

2. 设置端口号

代码如下(示例):


private static final int port = 9004;

3. 创建一个 TCP 服务器


   // 1.创建一个 TCP 服务器
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("服务器已启动~");

4. 等待客户端连接


  // 2.等待客户端连接
            Socket socket = serverSocket.accept();

5. 构建读、写对象


try (BufferedReader reader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
                 BufferedWriter writer = new BufferedWriter(
                         new OutputStreamWriter(socket.getOutputStream()))
            ) {
                // 得到客户端信息
                // 得到首行信息
                String firstLine = reader.readLine();
                String[] firstLineArr = firstLine.split(" ");
                // 方法类型
                String method = firstLineArr[0];
                // uri
                String uri = firstLineArr[1];
                // http 版本号
                String httpVersion = firstLineArr[2];
                System.out.println(String.fORMat("首行信息 -> 方法类型:%s,URI:%s,HTTP版本号:%s",
                        method, uri, httpVersion));
                // 5.构建返回内容
                String content = "";
                if (uri.contains("404")) {
                    content = "<h1>没有找到此页面</h1>"; //此处可以编写HTML
                } else if (uri.contains("200")) {
                    content = "<h1>你好,世界</h1>";
                }

6.内容输出


 while (true) {
                    // 6.内容输出
                    // 输出首行信息
                    if(httpVersion!=null) {
                        writer.write(String.format("%s 200 ok", httpVersion) + "\n");
                        // 输出 head
                        writer.write("Content-Type: text/html;charset=utf-8\n");
                        writer.write("Content-Length: " + content.getBytes().length + "\n");
                        // 输出空行
                        writer.write("\n");
                        writer.write(content);
                        writer.flush();
                    }

完整代码:


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Http {


    
        // 端口号
        private static final int port = 9004;

        public static void main(String[] args) throws IOException {
            // 1.创建一个 TCP 服务器
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("服务器已启动~");

            // 2.等待客户端连接
            Socket socket = serverSocket.accept();

            // 3.构建读、写对象
            try (BufferedReader reader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
                 BufferedWriter writer = new BufferedWriter(
                         new OutputStreamWriter(socket.getOutputStream()))
            ) {
                // 4.得到客户端信息
                // 得到首行信息
                String firstLine = reader.readLine();
                String[] firstLineArr = firstLine.split(" ");
                // 方法类型
                String method = firstLineArr[0];
                // uri
                String uri = firstLineArr[1];
                // http 版本号
                String httpVersion = firstLineArr[2];
                System.out.println(String.format("首行信息 -> 方法类型:%s,URI:%s,HTTP版本号:%s",
                        method, uri, httpVersion));
                // 5.构建返回内容
                String content = "";
                if (uri.contains("404")) {
                    content = "<h1>没有找到此页面</h1>";
                } else if (uri.contains("200")) {
                    content = "<h1>你好,世界</h1>";
                }
                while (true) {
                    // 6.内容输出
                    // 输出首行信息
                    if(httpVersion!=null) {
                        writer.write(String.format("%s 200 ok", httpVersion) + "\n");
                        // 输出 head
                        writer.write("Content-Type: text/html;charset=utf-8\n");
                        writer.write("Content-Length: " + content.getBytes().length + "\n");
                        // 输出空行
                        writer.write("\n");
                        writer.write(content);
                        writer.flush();
                    }
                }
            }
        }
    }



三、程序运行测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、总结

到此这篇关于Java基于IDEA实现http编程的示例代码的文章就介绍到这了,更多相关Java实现http编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java基于IDEA实现http编程的示例代码

本文链接: https://www.lsjlt.com/news/124288.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java基于IDEA实现http编程的示例代码
    http开发前言之为什么要有应用层 我们已经学过TCP/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程 [ IP+Port ],可是,仅仅把数据从A点传...
    99+
    2022-11-12
  • Java基于IDEA如何实现http编程
    这篇文章主要介绍了Java基于IDEA如何实现http编程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用...
    99+
    2023-06-14
  • 基于Java实现扫码登录的示例代码
    目录基本介绍原理解析1. 身份认证机制2. 流程概述代码实现1. 环境准备2. 主要依赖3. 生成二维码4. 扫描二维码5. 确认登录6. PC 端轮询7. 拦截器配置效果演示1. ...
    99+
    2022-11-13
  • java基于mongodb实现分布式锁的示例代码
    目录原理 实现 使用  原理 通过线程安全findAndModify 实现锁 实现 定义锁存储对象: @Data @NoArgsConstruc...
    99+
    2022-11-12
  • 基于Java实现连连看游戏的示例代码
    目录前言主要需求主要设计功能截图代码实现总结前言 连连看游戏顾名思义就是找出具有关联关系的事物并进行相应处理,经历了从桌面游戏、在线游戏再到社交游戏三个过程,形式多种多样。游戏的核心...
    99+
    2022-11-13
  • Java基于JNDI实现读写分离的示例代码
    目录一、JNDI数据源配置二、JNDI数据源使用三、web.xml配置四、spring-servlet.xml配置五、spring-db.xml配置六、log4j.propertie...
    99+
    2022-11-12
  • Java基于LoadingCache实现本地缓存的示例代码
    目录一、 添加 maven 依赖二、CacheBuilder 方法说明三、创建 CacheLoader四、工具类五、guava Cache数据移除一、 添加 maven 依赖 <...
    99+
    2022-11-12
  • 基于Java实现中文分词系统的示例代码
    目录1.问题描述2.相关工作3.系统框架和算法设计3.1系统整体框架1.问题描述 中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个...
    99+
    2022-11-13
  • java基于jedisLock—redis分布式锁实现示例代码
    分布式锁是啥?单机锁的概念:我们正常跑的单机项目(也就是在tomcat下跑一个项目不配置集群)想要在高并发的时候加锁很容易就可以搞定,java提供了很多的机制例如:synchronized、volatile、ReentrantLock等锁的...
    99+
    2023-05-30
    jedislock redis 分布式锁
  • 基于Springboot实现JWT认证的示例代码
    目录一、了解JWT概念作用1.1 为什么授权要使用jwt二、JWT结构2.1 header2.2 payload2.3 signature三、使用JWT3.1 上手3.2 封装工具类...
    99+
    2022-11-12
  • 基于Java实现QQ登录注册功能的示例代码
    目录前言实现代码登录页面注册页面效果展示前言 本文主要应用的技术有:GUI、JDBC、多线程 实现的功能具体如下: 1、登录功能 2、注册功能 3、是否隐藏密码的选择以及实现功能 4...
    99+
    2022-11-13
  • 基于Java实现图片相似度对比的示例代码
    目录前言依赖基本算法相关代码前言 很多时候我们需要将两个图片进行对比,确定两个图片的相似度。一般常用的就是openCv库,这里就是使用openCv进行图片相似度对比。 依赖 <...
    99+
    2022-11-13
  • 基于Java实现进制转换工具类的示例代码
    目录背景原理十进制A转换为N进制RN进制R转换为十进制A应用延伸背景 最近有个发送短信的功能,需要在短信中带有详情链接,链接中带有对应信息且要有校验功能,然而短信是按字数收费的,所以...
    99+
    2023-02-19
    Java进制转换工具类 Java进制转换
  • 基于Java实现修改图片分辨率示例代码
    目录前言环境依赖代码验证一下前言 本文提供可以修改图片分辨率的java工具类,实用主义的狂欢。 环境依赖 添加必要的一些maven依赖。 <dependen...
    99+
    2022-11-12
  • 基于Python实现烟花效果的示例代码
    python烟花代码 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tki...
    99+
    2022-11-13
  • 基于Vue3实现日历组件的示例代码
    以下是一个基于 Vue 3 实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份等功能。 <template>...
    99+
    2023-05-17
    Vue3实现日历组件 Vue3日历组件 Vue3日历 Vue 日历
  • 基于Python实现围棋游戏的示例代码
    目录1.导入模块2.初始化棋盘3. 开始游戏4.放弃当前回合落子5.悔棋判断6.重新开始7.右侧太极图的设置8.落子设置9.吃子规则判定设置10.其他11.程序入口12.效果图文件自...
    99+
    2022-11-11
  • 基于Matlab实现中国象棋的示例代码
    目录设置变量绘图绘制棋盘绘制棋子棋子移动规则判断是否可以移动移动棋子吃子设置变量 nRowNum = 8; % 画布行数 nColNum = 9; % 画布列数 offset_x =...
    99+
    2022-11-13
  • 基于JS实现Flappy Bird游戏的示例代码
    前言 Flappy Bird 是一款无尽的游戏,玩家可以控制一只鸟。玩家必须保护小鸟免于与管道等障碍物相撞。每次小鸟通过管道时,分数都会增加一。当小鸟与管道碰撞或因重力而坠落时,游戏...
    99+
    2022-11-13
  • 基于Flutter实现转场动效的示例代码
    目录前言CupertinoFullscreenDialogTransitionCupertinoPageTransitionDecoratedBoxTransitionFadeTra...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作