当前位置:首页>学无止境>文章内容

java编程web服务器

时间:2017-9-5分类:网站建设 张孝帅

java编程web服务器项目说明书

  WEB服务器:

  提供服务的机器

  提供给客户端想要访问的资源(静态资源)

  网络:TCP

  写一个服务器,接受客户端请求

  1.启动服务器

  2.浏览器发送请求

  问题:

  1.服务端怎么与客户端建立连接

  class{

  main{

  ServerSocket server = new ServerSocket(8888);

  server.accept();

  }

  }

  localhost:8888/2.jpg

  2.服务端怎么知道客户端想要请求什么资源.

  socket

  客户端--发送请求(请求长什么样子↓)

  localhost:8888/2.jpg

  ↓

  GET /2.jpg HTTP/1.1

  Host: localhost:8888

  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

  Accept-Encoding: gzip, deflate

  Connection: keep-alive

  --解析请求内容(请求格式)

  --找文件--返回错误页面

  |

  |

  使用流把找到的资源输出给客户端浏览器(响应)

  问题:

  知道请求格式:将来浏览器就是通过这样的格式给我们发送请求,服务端需要再根据这样的格式去解析请求内容

  请求行:method 资源路径 协议

  请求头:k1: v1

  k2: v2

  空 行:

  请求体:

  get:没有请求体,如果有请求参数,参数会被拼接到请求路径中?k1=v1&k2=v2

  资源路径的获取

  post:有请求体,但是请求体内容中没有换行

  method:请求方式(GET,POST)

  get:地址栏直接输入,a,表单

  post:表单method--post

  与响应格式:浏览器通过一定的格式去解析服务端发送回来的响应,我们发送响应(图片)的时候,需要知道按照什么样的格式去输出。

  post:

  POST /registerLogin/register HTTP/1.1

  Host: localhost:8888

  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

  Accept-Encoding: gzip, deflate

  Referer: http://localhost:8888/registerLogin/registerPost.html

  Connection: keep-alive

  Content-Type: application/x-www-form-urlencoded

  Content-Length: 24

  username=ss&password=123

  请求:

  请求行 method path version

  请求头 k: v

  k: v

  post:"Content-Lenght: XX"

  空行""

  请求体:get:path?param1=v1&

  post:param1=v1¶m2=v2(没有换行符号,read)

  new String(bs,0,len);

  几个变量

  method,requestPath,version,

  Map requestHeaders

  Map requestParameters

  客户端发送“响应”(静态资源,图片,文档,页面)

  socket.getOutPutStream().write("".getBytes())

  baseBath:"E:\\webapps"

  requestPath:/2.jpg

  File(baseBath,requestPath);

  选择合适的流:既能输出字符,又能输出字节

  响应行:"HTTP/1.1 200/400 OK/ERROR"

  响应头:"\r\n" ,println();

  空 行:"\r\n"

  响应体:2.jpg/error.html

  被浏览器接受,浏览器解析响应内容,在浏览器屏幕 显示图片/文档/html

  1.创建ServerSocket

  class{

  main{

  ServerSocket server = new ServerSocket(port);

  Socket socket = server.accept();

  }

  }

  }

  class{

  main{

  }

  2.建立连接

  Socket socket = server.accept();

  声明几个变量准备接受请求信息

  method,requestPath,version,requestHeaders,requestParameters

  3.浏览器发送请求:

  localhost:8888/2.jpg[?k=v&k2=v2]

  4.获取请求内容,把请求内容打印,解析请求

  is = socket.getInputStream();

  第一行: readLine();1 空格

  method,requestPath,version

  第一行以后:请求头

  readLine();2

  readLine();3

  requestHeaders赋值,put

  空行:

  请求体:判断接下来还有没有内容

  post && .ready()

  Contene-Length 0

  没有,GET:有没有加?k=v,requestPath

  requestParameters

  5.根据请求内容(requestPath)发送响应

  /2.jpg basePath,requestPath

  2.jpg/error.html

  响应行:HTTP/1.1 200/400 OK/ERROR

  响应头:

  空行:

  响应体:选择字节流()

  fileInputStream,socket.getOutputStream

  第一阶段目标:可以让服务器接受解析请求,并返回静态资源。

关注小小小帅博客,轻松学习网站建设和SEO知识

关于博主

博主

博主:张孝帅

简介:这很小小帅