分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

使用BIO建立简单的http服务器

发布时间:2023-09-06 01:19责任编辑:白小东关键词:http

平时在使用tomcat、jetty时,只是使用里面的servlet、filter等,从来没想过它们如何同浏览器进行交互的。工作中遇到一些问题,在同其它同事交流及学习源码的过程中,才明白底层原来走的也是socket,才知道所谓的NIO是什么。。。

了解NIO之前,肯定得先了解BIO,出于学习的目的 ,使用BIO写一个简单的http服务器DEMO:浏览器输入任何请求,后台打印出请求信息并在浏览器中输出Hello World

 1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream; 7 import java.io.OutputStreamWriter; 8 import java.net.InetSocketAddress; 9 import java.net.ServerSocket;10 import java.net.Socket;11 12 public class BioServer {13 ????private ServerSocket serverSocket;14 ????15 ????private String ip;16 ????17 ????private int port;18 ????19 ????public BioServer(String ip, int port) {20 ????????this.ip = ip;21 ????????this.port = port;22 ????}23 ????24 ????public void startListen() throws IOException {25 ????????serverSocket = new ServerSocket();26 ????????serverSocket.bind(new InetSocketAddress(ip, port)); //创建对指定端口及IP的监听27 ????????28 ????????while (true) {29 ????????????accept();30 ????????}31 ????}32 ????33 ????private void accept() throws IOException {34 ????????//收到客户端的请求35 ????????Socket socket = serverSocket.accept();36 ????????37 ????????//输入流用于接收客户端传输过来的数据38 ????????InputStream in = socket.getInputStream();39 ????????InputStreamReader reader = new InputStreamReader(in);40 ????????BufferedReader br = new BufferedReader(reader);41 ????????String line = null;42 ????????while ((line = br.readLine()) != null) {43 ????????????System.out.println(line);44 ????????????//按照HTTP协议,请求头和请求体之间为一空行分隔45 ????????????if ("".equals(line)) {46 ????????????????break;47 ????????????}48 ????????}49 ????????50 ????????//输出流用于向客户端发送响应消息,需遵从HTTP协议格式51 ????????OutputStream out = socket.getOutputStream();52 ????????OutputStreamWriter writer = new OutputStreamWriter(out);53 ????????BufferedWriter bw = new BufferedWriter(writer);54 ????????bw.write("HTTP/1.1 200 OK\n");55 ????????bw.write("Content-Type: text/html; charset=UTF-8\n");56 ????????bw.write("\n");57 ????????bw.write("<html>");58 ????????bw.write("<head>");59 ????????bw.write("<title>");60 ????????bw.write("BIO Http Server");61 ????????bw.write("</title>");62 ????????bw.write("</head>");63 ????????bw.write("<body>");64 ????????bw.write("<h1>Hello World!</h1>");65 ????????bw.write("</body>");66 ????????bw.write("</html>");67 ????????68 ????????//必须在请求读取和响应写入都处理完毕之后才可以调用close方法,将输入流关闭也会导致输出流不可用69 ????????bw.close();70 ????????writer.close();71 ????????out.close();72 ????????br.close();73 ????????reader.close();74 ????????in.close();75 ????????socket.close();76 ????}77 ????78 ????public static void main(String[] args) {79 ????????BioServer server = new BioServer("127.0.0.1", 8080);80 ????????try {81 ????????????server.startListen();82 ????????} catch (IOException e) {83 ????????????e.printStackTrace();84 ????????}85 ????}86 }

使用BIO建立简单的http服务器

原文地址:http://www.cnblogs.com/smart-elf/p/7710837.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved