使用一个超简单的类实现一个简易服务器,明白Tomcat的运行机制

代码如下:

package bear.网络通讯;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 简易服务器
 * 
 * @author huangxj 2018年3月17日 
 * 
 * @version v1.0
 */
public class 简易服务器 {

	private static ExecutorService executorService = Executors.newCachedThreadPool();

	public static void main(String[] args) throws IOException {

		ServerSocket ss = new ServerSocket(9999);
		System.out.println("服务器启动" + ss);

		try {
			
			while (!Thread.interrupted()) {

				Socket socket = ss.accept();
				System.out.println("接收到一个请求:" + socket);
				executorService.execute(new HttpDefaultHandler(socket));
			}
		} finally {
			ss.close();
		}
	}

	/**
	 * Http请求默认处理器
	 * 
	 * @author huangxj 2018年3月17日 
	 * 
	 * @version v1.0
	 */
	static class HttpDefaultHandler implements Runnable {

		protected Socket socket;
		protected InputStream in;
		protected BufferedReader br;
		protected OutputStream out;
		protected PrintWriter pw;

		public HttpDefaultHandler(Socket socket) throws IOException {
			this.socket = socket;
			init();
			initRequestInfo();
		}

		/**
		 * 初始化
		 * 
		 * @author huangxj 2018年3月17日 
		 *
		 * @version v1.0
		 */
		private void init() throws IOException {

			in = socket.getInputStream();
			out = socket.getOutputStream();
			pw = new PrintWriter(out);
			br = new BufferedReader(new InputStreamReader(in));
		}
		
		/**
		 * 打印请求行
		 * 
		 * @author huangxj 2018年3月17日 
		 *
		 * @version v1.0
		 */
		protected void initRequestInfo() throws IOException {
			String line = br.readLine();
			System.out.println(line);
		}

		/**
		 * 处理请求并响应数据,子类可以重写该方法来做出特点类型的处理
		 * 
		 * @author huangxj 2018年3月17日 
		 *
		 * @version v1.0
		 */
		@SuppressWarnings("deprecation")
		protected void process() {

			pw.println("HTTP/1.1 200 OK");
			pw.println("Content-Type:text/html;charset=utf-8");
			pw.println();
			pw.println("服务器已经接收到您的请求了!<br/>" + new Date().toLocaleString());
		}

		/**
		 * 关闭资源
		 * 
		 * @author huangxj 2018年3月17日 
		 *
		 * @version v1.0
		 */
		protected void close() throws IOException {

			pw.close();
			br.close();
			socket.close();
		}
		
		/**
		 * 任务执行
		 */
		@Override
		public void run() {

			try {
				process();
			} finally {
				try {
					close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq906627950/article/details/79594122
今日推荐