自己的web服务器项目-实现多线程处理(三)

自己的web服务器项目-静态请求和动态请求处理(二)

注:完整项目下载

上面项目中,服务器只能接受单方的请求,不能够多用户同时访问,这明显不符合现实逻辑,那么在这里,我们将其修改为多线程的,实现多用户的访问

首先,我们实现Server类如下:

package com.sapmle.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.sample.utils.ServerPortUtils;
public class Server {
	public static void main(String[] args) {
		//声明变量
        ServerSocket ss=null;
        Socket s=null;
        boolean flag=true;
        	int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));
        	int i=1;
        	System.out.println("Server Port:"+port);
			try {
				ss=new ServerSocket(port);
				while(flag)
				{
					//接受客户端发送过来的Socket
					s=ss.accept();
					System.out.println("accept count:"+i++);
					ServerThread st=new ServerThread(s);
					st.start();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
	}
	}
注意:在实现int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));时同样使用了properties文件进行端口的配置,参照前面自己配置。

代码中,while(true)为保持服务器端一直处于监听状态,st.start()启动线程

下面就是线程类的实现:

package com.sapmle.server;
import java.net.Socket;
import com.sample.http.HttpAccessProcessor;
import com.sample.http.HttpCreatorImpl;
import com.sample.http.HttpRequest;
import com.sample.http.HttpResponse;
public class ServerThread extends Thread {
	private Socket s;
	public ServerThread(Socket s) {
		this.s=s;
	}
        @Override
        public void run() {
        	HttpCreatorImpl hci=new HttpCreatorImpl(s);
			HttpRequest request=hci.getHttpRequest();
			System.out.println(request.getProtocol());
			HttpResponse response=hci.getHttpResponse();
			HttpAccessProcessor hapi=hci.getHttpAccessProcessor();
			if(request.isStaticResource())
			{
				hapi.processStaticResource(request, response);
			}
			else if(request.isDynamicResource())
			{
				hapi.processDynamicResource(request, response);
			}
			else
			{
				System.out.println("无法处理");
				hapi.sendError(404, request, response);
			}
        }
}
这样的话,我们就完成了类似于服务器端Servlet的功能,能够同时处理html页面和Servlet页面,最重要的是多用户同时访问哦。。。,效果这儿就不展示了,你可以将自己的电脑作为服务器,然后使用局域网中的多台电脑进行访问,由于代码中含有很多提示信息,所以控制台上会有打印,如下是我的控制台界面:

自己的web服务器项目-实现多线程处理(三)_第1张图片

自己的web服务器项目-request请求和response响应处理(一)


你可能感兴趣的:(Java,Web,Java,EE企业应用开发)