基于Java实现简易Web服务器的详细步骤

1 下载量 72 浏览量 更新于2024-09-06 1 收藏 165KB PDF 举报
简单实现Java web服务器 Java Web 服务器是指使用 Java 语言开发的 Web 服务器,能够处理 HTTP 请求并返回响应。下面是简单实现 Java Web 服务器的详细步骤: 一、程序执行步骤 1. 创建一个 ServerSocket 对象:ServerSocket 对象是 Java 中用于监听和接受客户端连接的对象。通过创建一个 ServerSocket 对象,我们可以监听特定的端口号,并等待客户端的连接请求。 2. 调用 ServerSocket 对象的 accept 方法:accept 方法用于等待客户端的连接请求,一旦客户端连接成功,accept 方法将返回一个 Socket 对象,否则将一直阻塞等待。 3. 从 Socket 对象中获取 InputStream 和 OutputStream 字节流:InputStream 和 OutputStream 是 Java 中的输入输出流,分别用于读取客户端的请求信息和写入响应信息。 4. 处理请求:读取 InputStream 字节流信息,转成字符串形式,并解析。这里的解析比较简单,仅仅获取 uri(统一资源标识符)信息。 5. 处理响应:根据解析出来的 uri 信息,从 WEB_ROOT 目录中寻找请求的资源文件,读取资源文件,并将其写入到 OutputStream 字节流中。 6. 关闭 Socket 对象:一旦响应处理完毕,需要关闭 Socket 对象,释放系统资源。 7. 转到步骤 2,继续等待连接请求:服务器需要不断地监听和接受客户端的连接请求,因此需要将步骤 2 到步骤 6 转换成循环,直到服务器关闭。 二、代码实现 服务器实现: ```java package ex01.pyrmont; import java.net.Socket; import java.net.ServerSocket; import java.net.InetAddress; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; import java.io.File; public class HttpServer { / * WEB_ROOT 是 HTML 和其它文件存放的目录.这里的 WEB_ROOT 为工作目录下的 webroot 目录 */ public static final String WEB_ROOT = System.getProperty("user.dir") + File.separator + "webroot"; // 关闭服务命令 private static final String SHUTDOWN_COMMAND = "/SHUTDOWN"; public static void main(String[] args) { HttpServer server = new HttpServer(); // 等待连接请求 server.await(); } // 等待连接请求 public void await() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1")); System.out.println("服务器启动,等待连接请求..."); while (true) { Socket socket = serverSocket.accept(); System.out.println("客户端连接成功..."); // 处理请求 handleRequest(socket); } } catch (IOException e) { System.out.println("服务器启动失败:"+e.getMessage()); } finally { if (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { System.out.println("服务器关闭失败:"+e.getMessage()); } } } } // 处理请求 private void handleRequest(Socket socket) { try { // 读取客户端的请求信息 InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); // ... } catch (IOException e) { System.out.println("处理请求失败:"+e.getMessage()); } finally { try { socket.close(); } catch (IOException e) { System.out.println("关闭 Socket 对象失败:"+e.getMessage()); } } } } ``` 在上面的代码中,我们创建了一个 HttpServer 类,该类具有 await 方法,用于等待客户端的连接请求一旦客户端连接成功,await 方法将调用 handleRequest 方法来处理客户端的请求信息。handleRequest 方法将读取客户端的请求信息,并根据请求信息从 WEB_ROOT 目录中寻找请求的资源文件,读取资源文件,并将其写入到 OutputStream 字节流中。