2017-9-7 - A - WebServer项目

1 缓冲流的readLine方法是否阻塞?

2 请求(获取),响应(返回),分别的格式什么?HTTP的规则是什么?
http请求格式

一次请求,一次响应,没有请求,没有响应。

3 HTTP协议是什么?
超文本传输协议,是浏览器与服务器间的传输通讯协议。

4 HTTP请求由什么组成?
请求行,消息头,消息正文。

5 请求行格式是什么?
Method Request-URI HTTP-VersionCRLF
(CR:指代不同系统中的回车 LF:指代不同系统中的换行——CRLF:换行到最开始,即该行结束)
如:
GET /index.html HTTP/1.1CRLF
POST /login.html HTTP/1.1CRLF

6 什么是DNS?
将域名绑定在指定IP地址,访问时域名转换成对应IP地址。

7 CRLF的作用是?
表示当行结束。

8 服务器可否使用br(BufferedReader)按行快速读取请求头(CRLF换行)?如果不能用什么?具体读取流程是?
不可,br换行只看\n(不会智能识别不同系统下的换行)
使用StringBuilder一个字符一个字符读取,直到读取到CR(13),LF(10)为止。
具体读取流程:判断当次及上次的数字是否等于10和13,如果是就跳出,如果不是,就将当次的值转型成char后加入builder并将当次的值赋给c2,用以下次判断
且由于最后字符多出CRLF,必须用String.trim()去掉这两个空白字符。
int c1 = -1,c2 = -1
while((c1 = in.read())! = -1){
if(c1 == 10 && c2 == 13){
break;
}
bulider.append((char)c1);
c2 = c1;
}
String line = builder.toString().trim();

9 HTTP请求默认访问什么端口?
80

10 请求头中包含的URI将会请求服务器中的网页。

11 第一次获取请求头时while(true)中需要包含is吗?
不需要,is获取的是一大段,循环基准是换行而不是重新获取数据。

12 当需要同时处理多个用户发送过来的请求时,用while(true)还是线程?
线程,因为需要同时,而不是处理完一个再处理另一个。

13 为何需要用到线程池?
提高并发效率。

14 是否需要将读取请求行等分开?
是。

15 读取HTTP请求的流程是?
读取请求行
读若干行(直到读取了CRLF)。
读取消息正文
分析请求行请求什么资源

16 业务逻辑要极其清晰,一个方法实现一个功能。

服务器整体业务流程,
新建一个服务器获取请求,读取处理请求,返回请求资源
将后两个流程中包入ClietnHandler(新建类),一旦有新的请求便创建新的线程,由于线程较多,因此需要用线程池管理。
ClientHandler中的主要流程又是run方法,run方法(便是包含获取,读取,处理请求)的流程为,
①读取请求,将请求项转化为对象,方便后续检索确定返回的数据。
对象包括请求头及消息头查找表,将处理该对象的方法也写入。
消息头查找表在使用前必须实例化,不然用不了
跳出循环的判断条件是 返回字符串长度为0 而不是全等于null或""。(StringBuilder内部默认维护一个空字符串)
②返回请求,将响应的属性实例化成一个对象。
请求对象包含:
其中状态值必须用字典存放

由大至小,不管是在大流程的把握上,还是完善小的分支都要胸有成竹。要一直把控握着whole map。

17 思路打好后,要先做什么?
打桩。

18 InputStream的read()方法返回的是什么?
下一个字节,直到读取完毕返回-1。

时间: 2024-10-08 10:19:15

2017-9-7 - A - WebServer项目的相关文章

2017 码云最火爆开源项目 TOP 50,你都用过哪些

本文转自:https://share.html5.qq.com/fx/u?r=JdjvzwC 2017 年度码云热门项目排行榜 TOP 50 出炉啦!我们根据所有开源项目在码云的用户关注度.活跃度.访问量等信息来对"热门"进行量化,从而筛选出了其中最"热门"的 50 个,它在一定程度上预示着业界的最新流行趋势. 值得注意的是,榜单中涌现出了不少新兴项目,由此可见,国内的开源气氛越来越好,国内的开源也在蓬勃发展. 前 20 名预览 排名 软件 排名 软件 1 zhen

2017 年度码云新增项目排行榜 TOP 50,为它们打“call”

2017 年度码云新增项目排行榜 TOP 50 正式出炉 !2017 结束了,我们来关注一下这一年里码云上新增的最热门的开源项目吧.此榜单根据 2017 年在码云上新增开源项目的 Watch.Star.Fork 数量以及其他角度进行统计,从而得出前 50 名最热门的开源项目. 码云发展至今,越来越多的开源作者选择在上面开源自己的作品,通过这份 2017 码云新增项目 TOP 50 榜单,希望大家可以了解到 2017 年里国内开源的现状,也能在其中找到自己需要的项目. 1.guns Guns 基于

IntelliJ IDEA 2017 配置Tomcat 运行Web项目

以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多看红框框 开始 1.创建.配置项目 1.1创建项目 New Project - [next] 1.2 给你的项目起名字,选地方 - [finish] 1.3开始配置项目 配置 project structure [F4] 或 项目右键 [Open Module Settings]或 右上角有个黑蓝色

IntelliJ IDEA 2017.3 创建多Module项目时,右边栏出现多个root模块的问题。如图。

我新建了一个项目,里面有三个模块(Module),结果建好后,出现了三个root.然后我发现主模块的pom文件,包含这样一段配置 <modules> <module>design_pattern</module> </modules> 我抱着试试的态度加上了另外两个module,现在只剩一个root了 哎,小弟又是不知道具体什么原因,反正解决了一个疑问.java工程师路漫漫,自己要努力啊. 原文地址:https://www.cnblogs.com/BaleW

2017-9-8 - A - WebServer项目

1 如何将字符串转换为字节型数据?str.getBytes(). 2 业务逻辑要极其清晰,一个方法实现一个功能. 服务器整体业务流程,新建一个服务器获取请求,读取处理请求,返回请求资源 将后两个流程中包入ClietnHandler(新建类),一旦有新的请求便创建新的线程,由于线程较多,因此需要用线程池管理. ClientHandler中的主要流程又是run方法,run方法(便是包含获取,读取,处理请求)的流程为, run方法中便包含了-- ①读取请求,将请求项转化为对象,方便后续检索确定返回的数

2017-9-7 - Q - WebServer项目

1 缓冲流的readLine方法是否阻塞? 2 请求(获取),响应(返回),分别的格式什么?HTTP的规则是什么? 3 HTTP协议是什么? 4 HTTP请求由什么组成? 5 请求行格式是什么? 6 什么是DNS? 7 CRLF的作用是? 8 服务器可否使用br(BufferedReader)按行快速读取请求头(CRLF换行)?如果不能用什么?具体读取流程是? 9 HTTP请求默认访问什么端口? 11 第一次获取请求头时while(true)中需要包含is吗? 12 当需要同时处理多个用户发送过

2017-9-11 - Q - webServer

2 学习项目的脉络把握才是关键,对项目整体的把握,实际上方法的创建只是其次,学到老师对项目的整体把控才是最有价值的.为什么此处直接定义即可,后续不需要考虑不同情况的处理吗,老师测试方法的思路,new一个类,传入参数,调用方法.post情况下,如果加上传参产生的变化不需要考虑吗?如果是,老师是怎样设计函数达到了这样的效果.结合面向对象思想理解程序流程,整个流程实际上就是初始化各类对象,最后返回目标对象的过程. 技巧①,顺之前的处理思路而下,看哪里涉及到了需要做改变如在file.exists那里的判

2017-9-11 - A - webServer

1 * /index.html * /reg?username=fancq&password=123456&nickname= * 在GET请求中,URI可能会有上面两种情况. * HTTP协议中规定,GET请求中的URI可以传递参数,而规则时请求的资源后面以 * "?"分割,之后则为所有要传递的参数,每个参数由: * name=value的格式保存,每个参数之间使用"&"分割. * 这里的处理要求: * 将"?"之前的内

2017年,随笔汇总

久坐真的是健康杀手,跑步几公里就宕机了.程序员,更是典型的久坐行业,身体才是革命的本钱,希望所有程序员都积极运动起来. 此文章用于记录,2017年内,个人在项目中遇到的问题,或者学习到的知识.(暂时先记录标题,后面再慢慢丰富内容) 版本迭代之js刷新 数据库链接之DBCP MYSQL之存储过程