【写在前面】
云计算的第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">
效果图