【java笔记】模拟B/S服务器
创建BS版本的TCP服务器
public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket=new ServerSocket(8080);Socket socket=serverSocket.accept();InputStream is=socket.getInputStream();byte[]bytes=new byte[1024];int len=0;while((len=is.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}}
}
随便把一个网页复制到IDEA项目中
然后打开浏览器输入:
127.0.0.1:8080/项目名称名/web/网页名,访问这个服务器
输出结果:
GET /hello/web/zhihu.mhtml HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
服务器给客户端回写一个html页面(文件)
我们需要读取html文件,就必须知道这个文件的地址
而这个地址就是请求信息的第一行
可以使用BufferReader方法的readline读取一行
InputStream is=socket.getInputStream();
new BufferedReader(new InputStreamReader(is));
读取一行后的结果:
使用String类的方法获取中间的地址:
split(" "): 切割字符串,获取中间的部分
substring(1): 去掉开头的/
服务器创建一个本地的字节输入流,根据获取到的文件路径,读取html文件
//写入HTTP协议相应头,固定写法
out.write("HTTP/1.1 200 OK\r\n".getBytes());
out.write("Content-Type:text/html\r\n".getBytes());
//必须写入空行,否则浏览器不解析
out.write("\r\n".getBytes());
服务器端使用网络字节输出流把读取到的文件,写到客户端(浏览器)显示
public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8080);FileInputStream fis;Socket socket;while (true) {socket= serverSocket.accept();InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = br.readLine();String htmlpath = line.split(" ")[1].substring(1);fis= new FileInputStream(htmlpath);OutputStream os = socket.getOutputStream();//写入HTTP协议相应头,固定写法os.write("HTTP/1.1 200 OK\r\n".getBytes());os.write("Content-Type:text/html\r\n".getBytes());
//必须写入空行,否则浏览器不解析os.write("\r\n".getBytes());//复制文件int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) != -1) {os.write(bytes, 0, len);}}}
}
【java笔记】模拟B/S服务器相关推荐
- Java笔记-模拟QQ三方登录(单点登录2.0)
本次例子模拟这样的情况: 一共有2个spring boot应用: 一个是某公司的web,第二个是QQ服务端. 某公司的应用为127.0.0.1:8082 QQ服务端为127.0.0.1:8081 演示 ...
- Java笔记——控制台模拟“双色球”福利彩票游戏
Java笔记--控制台模拟"双色球"福利彩票游戏 说明:本打算重新巩固java知识并重新记录笔记,但是现在对于一个20多年的语言而言,鄙人的能力实在是提炼不出来什么精华,直接上练手 ...
- 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
- java笔记(第一部分语法基础)
java笔记 一. 计算机概述 1.1 计算机组成部分 1.2 人机交互方式 1.3 计算机语言 1.4 Java语言介绍 1.5 Java开发环境搭建 二.基本数据类型与运算 2.1 关键字 2.2 ...
- 【Java笔记+踩坑】SpringBoot——基础
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
- Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)
阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 定义:被java赋予特殊含义的字符串(单词): 关 ...
- Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)
Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...
- Java爬虫模拟登录——不给我毛概二的H某大学
你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...
- 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...
无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...
- 10.8-全栈Java笔记:序列化/反序列化的步骤和实例
本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...
最新文章
- 在Delphi中根据SQL Server表名和表描述生成SQL语句
- chap单向认证客户端
- 【04】AngularJS 表达式
- MySQL 配置错误
- 英雄互娱:中止代理的《NBA LIVE》在中国大陆地区所有推广活动
- 浏览器UI线程更新机制
- Python+OpenCV:图像金字塔
- jquery系列教程4-事件操作全解
- Windows10下VB6.0开发——常用数值处理函数工具
- php5.6 连接SQL SERVER
- 安阳工学院ACM历史(续)
- matlab绘制奈奎图,matlab画奈奎斯特图
- 转《DB2操作指南及命令大全》
- 为什么贝叶斯统计如此重要?
- mysql的联接算法_联接算法
- Python OpenCV --Drowsiness Detector 睡意检测--项目记录
- axis2+MyEclipse8.5实现webservice接口例子(没有使用插件)
- html长图转换成pdf,iOS将HTML页面转换成PDF文件保存到本地并分享传输文件
- 二线法和四线法测量电阻的原理及区别
- C语言如何求n次方根