Birdboot第二天

news2025/1/12 20:37:46

目录

V4 HttpServletRequest保存请求内容

1.此类专门处理请求 把获取请求的readline()和拆分代码移动过来

2.ClientHandler客户端处理器实例化HttpServletRequest

3. 拆分的信息从局部变量 变成属性

4.建方法 解析请求行 消息头  消息正文

 V5 发送响应

1.在客户端处理器 测试处理请求 发送index页面

 2.发送响应

3. 根据浏览器地址栏中抽象路径定位static下对应的文件

 V6 处理请求 判断页面发送404

 V7 HttpServletResponse类保存响应

 1定义socket,构造器传参  移动println()方法  写方法respoonse()放发送响应

2. 把response里的变量定义为属性

3.在客户端处理器 解析请求时创建response

       发送响应 调response


V4 HttpServletRequest保存请求内容

创建包 放http协议

新建类 此类的实例保存浏览器发过来的请求

 

1.此类专门处理请求 把获取请求的readline()和拆分代码移动过来

把readline()移动过来 

此时socket报错 私有方法不能传参  所以定义一个socket属性 通过构造器传给readline方法

把ClientHandler的解析请求行请求头  移动到构造方法里面  readline方法抛异常

2.ClientHandler客户端处理器实例化HttpServletRequest

   此时ClientHandler客户端处理器里面 用来解析请求 处理请求 发送响应

   实例化HttpServletRequest

 

3. 拆分的信息从局部变量 变成属性

 Request里面的解析的请求部分现在是构造方法里的局部变量 要把它变成属性

初始化属性 不再是初始化变量 把String变量类型删掉  map定义删掉

ALT+INSERT对外提供Get方法 便于外界提取

给handers消息头的get方法添加map的get方法 传参String name

在客户端处理器 获取uri 检查是否输出

 

4.建方法 解析请求行 消息头  消息正文

  •  优雅代码 把构造方法里的解析请求行 请求头的代码块 放到方法里面
  • 请求头方法里面 line data因为在请求行方法里面 重新声明 加String
  • 构造方法里只需要调用方法 方法名(参)

 

 V5 发送响应

请求行(uri) 消息头 消息正文

状态行(状态代码) 响应头 响应正文

HTTP/1.1 404 NotFound(CRLF) Content-Type: text/html(CRLF)

Content-Length: 2546(CRLF)(CRLF) 1011101010101010101......

状态代码

 1xx::保留,将来使用。

 2xx:成功 - 操作被接收、理解、接受(received, understood, accepted)。

 3xx:重定向(Redirection)- 要完成请求必须进行进一步操作。

 4xx:客户端出错 - 请求有语法错误或无法实现。

 5xx:服务器端出错 - 服务器无法实现合法的请求。

	HTTP/1.0的状态代码、原因解释在下面给出。下面的原因解释只是建议采用,可任意
更改,必须是中文,而不会对协议造成影响。完整的代码定义在第9节。
       Status-Code    = "200"   ; OK
                      | "201"   ; Created
                      | "202"   ; Accepted
                      | "204"   ; No Content
                      | "301"   ; Moved Permanently 永久移动
                      | "302"   ; Moved Temporarily 临时移动
                      | "304"   ; Not Modified      未修改的
                      | "400"   ; Bad Request       错误请求
                      | "401"   ; Unauthorized
                      | "403"   ; Forbidden
                      | "404"   ; Not Found
                      | "500"   ; Internal Server Error
                      | "501"   ; Not Implemented
                      | "502"   ; Bad Gateway
                      | "503"   ; Service Unavailable
                      | extension-code

新建static页面 首页 课程表页面 rebuild

1.在客户端处理器 测试处理请求 发送index页面

类加载路径

类加载路径 开发中常用的相对路径:
写法:类名.class.getClassLoader().getResource(".")
类加载路径是那里?
当前类所在最外层包的上一级目录
例如:
当前类ClientHandler的包定义:package com.webserver.core;
意思是ClientHandler所在最外层包是com,类加载路径就是com包的上级目录
如果从源代码的角度看,这个目录是src/main/java目录

而实际JVM执行程序时,真正的类加载路径是编译后的com包所在的上级目录
在MAVEN项目中,代码编译后会放在target/classes目录下,因此这个classes目录就是真实的类加载路径

toURI() 文件转换成链接

那么为什么要使用toURI()而不是toURL()呢?因为toURL()存在bug。
在File转化成URI的时候,会将链接中的特殊字符如#或!等编码,而toURL()确不会。
如将“C:Documents and Settingstest.xsl”进行转化
toURI()得到的是:file:/C:/Documents and Settings/test.xsl
toURL()得到的是:file:/C:/Documents and Settings/test.xsl
也就是说toURI()将空格都转译成了 ,而toURL()什么都没管。sun也有人提到了这个bug(4273532,6179468)。
虽说在浏览器中没有转译不会有问题,因为有的浏览器已经自动转译了。但很多程序或者组件对于这样的路径都会抛出异常,认为是有错误的,这个bug中就有实实在在的例子。
所以要将File转换成URL的话,请使用file.toURI().toURL(),而不是file.toURL()
 

类加载路径

 

 2.发送响应

  • 3.1状态行 将字符串转成一组字节 line.getByte() write 方法写出去 回车换行13 10
  • 3.2 响应头 同理
  • 3.3响应正文 复制文件
  • 建立一个println方法 发送字符串 发送状态行响应头里面直接调用

3. 根据浏览器地址栏中抽象路径定位static下对应的文件

 V6 处理请求 判断页面发送404

 1.使用is,file() 不仅文件存在 也要不是目录

2.if判断两条路径没有必要重复写代码 学会加变量

 

 V7 HttpServletResponse类保存响应

 1定义socket,构造器传参  移动println()方法  写方法respoonse()放发送响应

注意发送响应不能放在构造方法里面 这样实例化直接发送响应

因为先解析处理请求后 才能发送响应 单独写方法respoonse()

2. 把response里的变量定义为属性

3.在客户端处理器 解析请求时创建response

       发送响应 调response

   

4.getset方法 set属性传入file.状态码,状态原因

    在response给处理请求提供改变途径 getset方法   有set方法因为需要向里面改

    在客户端处理器里面 处理请求的判断里面 set属性传入file.状态码,状态原因

 

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

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

相关文章

非洲秃鹫优化算法:求解全局优化问题的一种新的自然启发元启发式算法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 元启发式在解决优化问题中起着至关重要的作用。大多数此类算法的灵感来自于自然界中生物的集体智能和觅食。本文以非洲秃鹫的生…

YOLOv4:目标检测的最佳速度和精度

来源:投稿 作者:王同学 编辑:学姐 《YOLOv4:Optimal Speed and Accuracy of Object Detection》 发表时间及作者:2020 CVPR 目录 1.YOLOv4介绍 2.YOLOv4网络结构 2.1 Backbone改进 2.2 Neck改进 3.YOLOv4训练策…

java多线程基础

java多线程基础1. 线程是什么2. 线程的创建和运行方式1:继承Thread类示例:方式2:实现Runnable接口(推荐)示例:3. Thread类的常用方法4. 线程插队(1)yield 当前线程把时间片让给其它线程,不一定成功示例:(2&…

数据库基础-Mongodb数据库复制操作

Mongodb数据库复制操作 关闭mongodb的服务,如下图 创建以下文件夹 现在我们开启三个服务,端口号为9927做为主节点,9928做为从节点,9929做为仲裁节点 仲裁节点的作用是协调leader选举,监测系统运行状态,提供节点互相通讯的数据信息。 开启主服务: m…

【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)

说明 【跟月影学可视化】学习笔记。 什么是镜面反射? 如果若干平行光照射在表面光滑的物体上,反射出来的光依然平行,这种反射就是镜面反射。越光滑的材质,它的镜面反射效果也就越强,并且物体表面会有闪耀的光斑&…

Windows系统下HTTP(S)透明代理

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Windows系统下HTTP(S)透明代理 - joshua317的博客 软件文档地址:goproxy/README_ZH.md at master snail007/goproxy GitHub 一、windows系统下进行下载及安装 分别有两个版本:proxy-admin …

Servlet学习笔记

1.在pom.xml中添加依赖 <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!-- 不会最终打包到服务器中去 --><scope>provided&…

SpringBoot内置tomcat启动过程及原理

作者&#xff1a;李岩科 1 背景 SpringBoot 是一个框架&#xff0c;一种全新的编程规范&#xff0c;他的产生简化了框架的使用&#xff0c;同时也提供了很多便捷的功能&#xff0c;比如内置 tomcat 就是其中一项&#xff0c;他让我们省去了搭建 tomcat 容器&#xff0c;生成 …

和年薪30W的阿里测试员聊过后,才知道自己一直在打杂...

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 阿里内部将员工一共分为了14个等级&#xff0c;P6是资深工程师&#xff0c;P7是技术专家。 其中P6和P7就是一个分水岭了&#xff0c;P6是最接近P7的不持股员工&#x…

JavaScript-DOM操作表格

DOM操作表格的用途 DOM操作表格会在项目做数据展示的时候用到&#xff0c;其余地方使用并不多。 表格内容 <table><thead><tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th></tr></thead…

二叉树遍历非递归算法

二叉树遍历非递归算法 文章目录二叉树遍历非递归算法二叉树的遍历一、先序遍历非递归算法算法构思&#xff1a;从先序遍历的递归算法得出循环算法的思路:下面进行框架构建:代码实操:二、中序遍历(左-根-右)非递归算法中序遍历二叉树的过程构建思路:根据以上思路&#xff0c;构建…

vscode 安装clangd插件 替代 c++自带插件

目录 1. 背景 2. 安装clangd 安装前&#xff1a;禁用c插件 2.1 clangd插件名称 2.2 安装 2.3 配置 settings.json 2.4 语言服务器下载 2.5 安装 cmake tools 2.6 设置编译选项 3. 生成 compile_command.json 4. 查看使用效果 1. 背景 vscode c开大家一般用 vscode 自家…

磨金石教育摄影技能干货分享|乡愁摄影作品欣赏

乡愁是是什么&#xff1f; 我们走在异乡的街道上&#xff0c;人声嘈杂的一瞬间&#xff0c; 或许是某个角落&#xff0c;或许是某个人的声音&#xff0c; 让你感到无比的熟悉&#xff0c;在你的记忆深处掀起了一阵阵浪花。 这个熟悉的感觉就是乡愁 它可以是家乡的一棵树 …

JUC(5) : ForkJoinPool | 线程的极致管理

一、前言 前文介绍了线程的异步编排工具类 CompletableFuture 的使用&#xff0c;使用它能够很好的完成线程任务的编排工作&#xff0c;但同时&#xff0c;我们也注意到&#xff0c;其使用的默认线程池是 ForkJoinPool.commonPool() 的方法。则这个线程池是共用的&#xff0c;…

一个普通前端的2022年终总结:多病的一年

多病 用一个词总结我的2022 &#xff0c;毫无疑问是【多病】。 翻看挂号记录&#xff0c;今年累计跑了19次医院&#xff0c;除去定期的脱发复查、尿常规复查外&#xff0c;其他还得了皮肤病、急性咽炎、筋膜炎、结膜炎、肾结石、慢性胃炎、胸闷&#xff0c;体验过了无法忍受的…

基于java+springmvc+mybatis+jsp+mysql的网络作者与美工交流平台

项目介绍 本次设计任务是要设计一个网络作者与美工交流平台&#xff0c;通过这个系统能够满足网络作者与美工交流信息的管理及版主的网络作者与美工交流信息管理功能。系统的主要功能包括&#xff1a;主页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;版主管理&#…

text文本属性

text文本属性 源代码 color color属性用于定义文本的颜色&#xff0c;有预定义的颜色值(red, blue, yellow)、十六进制(#FF0000, #FF6600,#29D794)、RBG代码(rgb(255,0,0)或rgb(100%,0%,0%)) text-align text-align属性用于设置元素内文本的水平对…

R语言对BRFSS数据探索回归数据分析

执行摘要 最近我们被客户要求撰写关于BRFSS的研究报告&#xff0c;包括一些图形和统计输出。该项目包括探索一个现实世界的数据集-CDC的2013年 行为风险因素监视系统 -并针对三个 选择的研究问题创建报告。 选择的研究问题及其各自的结果是&#xff1a; 被访者对其健康状况…

Redis框架(一):Redis入门和Jedis连接池

Redis入门和Jedis连接池&#xff1a;基本介绍实例Demo源码分析SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将会回顾Redis 主要依照以下几个原则 基础实战的Demo和Coding上传到我的代码仓库在原有基础上加入一些设计模式&#xff0c;st…

c#扩展方法

1、前言: 通常,我们想要向一个类型中添加方法,可以通过以下两种方式: 修改源代码。 在派生类中定义新的方法。 但是以上方法并不是万能的,我们并不能保证拥有一个类型的源码,也并不能保证这个类型可以让我们继承(如结构,枚举,String等等)。但是C#提供了一个办法,…