浏览器发送请求,用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. ThreeJS系列2_effect插件集简介( 3d, vr等 )

    ThreeJS系列2_effect插件集简介( 3d, vr等 ) ThreeJS 官方案例中有一些 js库 可以替代 render 将场景中的物质变换为其他效果的物质 目录 ThreeJS系列2_e ...

  2. Windows炫酷桌面钢铁侠主题 雨滴 Rainmeter

    首先附上我现在的这个桌面,喜欢的话可以直接使用,我在公众号中设置了回复,[雨滴桌面下载]可以查看下载链接. 介绍一下我们用的工具. Rainmeter 雨滴程序 喜欢的人有研究应该都知道这个程序 这里 ...

  3. Centos7中MySQL8.0安装过程及遇到的问题记录

    本文主要参考以下2篇文章,安装操作 https://www.miboxapp.com/article/detail/1146659339214393344 https://blog.csdn.net/ ...

  4. 一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试

    一:背景 1. 讲故事 每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇: 我去,本地环境代码跑的哧溜,上了测试环境出问题 ...

  5. [Luogu P3157][CQOI2011]动态逆序对 (树套树)

    题面 传送门:[CQOI2011]动态逆序对 Solution 一开始我看到pty巨神写这套题的时候,第一眼还以为是个SB题:这不直接开倒车线段树统计就完成了吗? 然后冷静思考了一分钟,猛然发现单纯的 ...

  6. springboot + post 中文乱码

    去检查你的 filter 配置,是否配置了一个最高优先级的 filter, 这个最高优先级的 filter 会影响 springboot 自动配置的 CharacterEncodingFilter.原 ...

  7. element UI table show-overflow-tooltip属性更改背景色和字体颜色

    .el-tooltip__popper { width: 80%;/*修改宽度*/ background: #000 !important;/*背景色  !important优先级*/ opacity ...

  8. LSV又新增13个地质图!量测对比分析全都能搞定

    对于地质工作者来说,地质图是个十分重要的参考资料.随着国家解密的地质资料越来越多,能够有效的把各种地质资料结合起来,进而提高地质工作者的作业效率,是十分有意义的. LSV(LocaSpaceViewe ...

  9. 准备数据集用于flink学习

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  10. Spider--补充--Re模块_1

    # @ Author : Collin_PXY # 正则表达式: import re # 1,分步写法: # 1)rule.search(string) pattern='各小区' rule=re.c ...