浏览器发送请求,用Java模拟写个简单的服务器,浏览器可以收到响应。

执行下列代码(设置static final int TEST = 1),

使用浏览器访问:http://127.0.0.1:8888/tigerlion/index.html

服务器会打印如下代码,这就是浏览器请求的内容:

GET /tigerlion/index.html HTTP/1.1

Accept: text/html, application/xhtml+xml, image/jxr, /

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

Accept-Encoding: gzip, deflate

Host: 127.0.0.1:8888

Connection: Keep-Alive

第一句反应了请求访问的资源信息,找到响应文件,返回给请求放即可(设置static final int TEST = 0)。

import java.net.*;
import java.io.*;
public class SocketBS {
// 使用IE访问:http://127.0.0.1:8888/tigerlion/index.html
static final int TEST = 1;// 1:输出请求内容/其它:接受请求并响应
public static void main(String[] args) {
try {
ServerSocket sSocket = new ServerSocket(8888);
while (true) {
System.out.println("accept:");
Socket s = sSocket.accept();
InputStream ips = s.getInputStream();
if (TEST == 1) {
// 测试请求内容
byte[] b = new byte[1024];
ips.read(b);
System.out.println(new String(b));
} else {
// 使用缓冲流,读取一行,并进行解析
BufferedReader br = new BufferedReader(new InputStreamReader(ips));
// |--获取首行
String firstLine = br.readLine();
// |--按空格分割
String[] request = firstLine.split(" ");
// |--0是GET,1是路径
String requestPage = request[1];
System.out.println("用户请求的资源是:" + requestPage);
// 根据用户请求的资源,找到服务器上的文件,发送给用户
OutputStream os = s.getOutputStream();
// HTML协议响应头(固定写法)
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content-TYpe:text/html\r\n".getBytes());
os.write("\r\n".getBytes());
// 写网页(应该是从服务器上读文件并写入,此处简化)
os.write("<HTML><a href='https://zhuanlan.zhihu.com/hulaoshi'>Story of Computer</a></HTML>"
.getBytes());
os.close();
br.close();
}
ips.close();
s.close();
}
// sSocket.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("服务器端,OVER");
}
}
}

Java基础教程——模拟B/S结构的服务器的更多相关文章

  1. Java基础教程——模拟浏览器发送请求

    JAVA访问网页 分别测试使用get和post方法访问网页,可以收到服务器的请求,并写入到html文件中. import java.io.*; import java.net.*; import ja ...

  2. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  3. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  4. Java基础教程:多线程基础(2)——线程间的通信

    Java基础教程:多线程基础(2)——线程间的通信 使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督. 线程间的通信 ...

  5. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

  6. Java基础教程:HashTable与HashMap比较

    Java基础教程:HashTable与HashMap比较 1.  关于HashMap的一些说法: a)  HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...

  7. Java基础教程(25)--I/O

    一.I/O流   I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等.   流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...

  8. Java基础教程:垃圾回收

    Java基础教程:垃圾回收 垃圾回收 垃圾回收(Garbage Collection,GC),顾名思义是释放垃圾占用的空间,防止内存泄漏.有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使 ...

  9. Java基础教程:内部类

    Java基础教程:内部类 内部类 内部类,是指在一个类的内部定义的类.就像下面这样: public class EnclosingClass {   . . .   public class Nest ...

随机推荐

  1. 对精致码农大佬的 [理解 volatile 关键字] 文章结论的思考和寻找真相

    一:背景 1. 讲故事 昨天在园里的编辑头条看到 精致码农大佬 写的一篇题为:[C#.NET 拾遗补漏]10:理解 volatile 关键字 (https://www.cnblogs.com/will ...

  2. Django项目-个人网站之事项模块

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  3. Centos中部署NetCore项目(二)

    前言 在centos中部署程序,一般都不会是使用控制台进程直接启动,或者是后台运行.而是一些守护进程管理工具进行管理,例如supervisor. 部署Web相关程序,使用nginx是比较普遍的, 安装 ...

  4. 聊聊Go代码覆盖率技术与最佳实践

    "聊点干货" 覆盖率技术基础 截止到Go1.15.2以前,关于覆盖率技术底层实现,以下知识点您应该知道: go语言采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpo ...

  5. JVM 整体回顾(一)

    JAVA虚拟机整体的回顾,为提纲类型 JAVA虚拟机是装在操作系统之上的一个应用软件[平台性质],作用是:将class格式的字节码编译成可执行的机器码.从而,class格式和物理机无关.也就是所谓的j ...

  6. mac os 10.15安装jdk 1.6

    1.如果出现报错 已经安装了最高版本 下载请看:https://www.jianshu.com/p/3b580c405c7c 请看下面方法处理错误 1.在mac的访达中 找到 "脚本编辑器& ...

  7. 21 Ajax

    21 Ajax AJAX,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页 ...

  8. java联系人管理系统简单设计

    本文实例为大家分享了java联系人管理系统毕业设计,供大家参考,具体内容如下 要求:  请使用XML保存数据,完成一个联系人管理系统.      用户必须经过认证登录后方可以使用系统.      注册 ...

  9. Android测试三件套:传文件、抓包、看日志

    在对安卓进行测试时,我们需要把 apk 传到安卓机上,对请求抓包,同时监控应用日志.本文就来讲讲具体操作. 安卓机是指基于安卓的机器 ,如手机.POS 机.电视盒子等. 传文件 我们拒绝用 U 盘传文 ...

  10. 年轻人的第一个 Docker 应用,大大提高生产力!

    上一篇:年轻人的第一个 Spring Boot 应用! 哈哈,标题我抄了雷总的,不重要哦,重要的是 Docker 真的很年轻,虽然现在才不到 8 岁,但却是个冉冉升起的巨星,火得一塌糊涂. 这几年 D ...