Loading

java 搭建 web服务器 socket实现

【写在前面】
云计算的第n个java作业,开始一直不懂为什么老师一直让我们写java web的小demo,不应该是hadoop啥的直接上框架嘛。后来慢慢了解到,其实java web 的一些内容确实是云计算的基础。这个demo是用java socket 来搭建一个web服务器,以前确实没有接触过,所以这里记录一下。

基本原理

(1)设置WebServer端口号
(2)使用 ServerSocket.accept()方法,轮询监听用户请求;
(3)用户使用浏览器输入地址,向WebServer发出请求;
(4)服务器监听到用户请求,为该请求新建一个HttpServer来处理该请求;
(5)HttpServer解析用户请求并作出响应;
(6)用户浏览器显示响应结果。

一、编写WebServer.java

WebServer.java 是整个项目的主线程,用于设置服务器端口号,监听用户的请求,为每一个监听到的请求新建一个HttpServer线程,来处理用户请求。
public void startServer(int port) 轮询serverSocket.accept(),监听用户请求。为每一个监听到的请求,新建一个httpserver线程响应 public static void main(String[] args) ,设置服务器端口号,之后,启动Webserver服务器。

package com.jxnu.socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author xiao
 */
public class WebServer extends Thread{


    public void startServer(int port){
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while(true){
                Socket socket = serverSocket.accept();
                HttpServer httpServer = new HttpServer(socket);
                httpServer.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new WebServer().startServer(8000);

    }
}

二、编写HttpServer.java
HttpServer.java 继承Thread,用于读取用户访问路径,根据路径响应请求。
public HttpServer(Socket socket) 初始化socket对象,获取对应 输入,输出流 public void run() 重载Run()函数,调用Read()、response()函数 private void response(String filePath) 根据读取的路径,进行响应。以流的形式读取文件,再以流的形式输出文件 private String read() 解析请求路径。
其中,为了项目的可移植性,文件的解析路径是相对路径,整个文件都放在文件夹resource下。项目目录如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
index.html
这里注意加上

<link rel="shortcut icon" href="#" type="image/x-icon">

在这里插入图片描述

效果图
在这里插入图片描述

posted @ 2020-04-17 11:59  XiaoJ_c  阅读(139)  评论(0)    收藏  举报