学习笔记之 Servlet容器服务器原理 简易实现代码

package cn.itcast.web1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 静态的网页服务器
 * 
 * @author APPle
 * 
 */
public class StaticWebServer {

	public static void main(String[] args) {
		int port = 8888;
		try {
			// 开启服务器,等待客户端的链接
			ServerSocket ss = new ServerSocket(port);
			System.out.println("服务器已经启动,正在监听" + port + "端口...");

			// 不断地接收客户端的请求
			while (true) {

				final Socket socket = ss.accept();

				// 用多线程可以处理多个客户端的请求
				new Thread() {
					public void run() {
						try {
							// 接收客户端发送过来的信息
							InputStream in2 = socket.getInputStream();
							for (int b = -1; (b = in2.read()) != -1;) {
								System.out.print((char) b);
							}
							BufferedReader br = new BufferedReader(
									new InputStreamReader(
											socket.getInputStream()));

							// 请求行
							String requestLine = br.readLine();
							// GET /a.html HTTP/1.1
							// GET /b.html HTTP/1.1
							// GET /news/aaa.html HTTP/1.1
							// 客户端请求资源的名称
							String request = requestLine.split(" ")[1];

							String base = "e:/myweb";

							// 请求资源在本机上路径
							String resPath = base + request;

							// 如果请求根目录的时候,返回一个默认页面给客户端
							if (request.equals("/")) {
								resPath = base + "/index.html";
							}

							// 当找不到资源的时候,给客户端返回一个友好的404页面
							File resFile = new File(resPath);
							if (!resFile.exists()) {
								resPath = base + "/404.html";
							}

							// 把数据发送到网络的另外一端(客户端)
							OutputStream out = socket.getOutputStream();
							InputStream in = new FileInputStream(resPath);

							for (int b = -1; (b = in.read()) != -1;) {
								out.write(b);
							}
							in.close();
							socket.close();
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}.start();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值