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

来源:互联网 发布:广东继续教育网络平台 编辑:程序博客网 时间:2024/04/29 21:33

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

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

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.sapmle.server;  
  2. import java.io.IOException;  
  3. import java.net.ServerSocket;  
  4. import java.net.Socket;  
  5. import com.sample.utils.ServerPortUtils;  
  6. public class Server {  
  7.     public static void main(String[] args) {  
  8.         //声明变量  
  9.         ServerSocket ss=null;  
  10.         Socket s=null;  
  11.         boolean flag=true;  
  12.             int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));  
  13.             int i=1;  
  14.             System.out.println("Server Port:"+port);  
  15.             try {  
  16.                 ss=new ServerSocket(port);  
  17.                 while(flag)  
  18.                 {  
  19.                     //接受客户端发送过来的Socket  
  20.                     s=ss.accept();  
  21.                     System.out.println("accept count:"+i++);  
  22.                     ServerThread st=new ServerThread(s);  
  23.                     st.start();  
  24.                 }  
  25.             } catch (IOException e) {  
  26.                 e.printStackTrace();  
  27.             }  
  28.     }  
  29.     }  
注意:在实现int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));时同样使用了properties文件进行端口的配置,参照前面自己配置。

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

下面就是线程类的实现:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.sapmle.server;  
  2. import java.net.Socket;  
  3. import com.sample.http.HttpAccessProcessor;  
  4. import com.sample.http.HttpCreatorImpl;  
  5. import com.sample.http.HttpRequest;  
  6. import com.sample.http.HttpResponse;  
  7. public class ServerThread extends Thread {  
  8.     private Socket s;  
  9.     public ServerThread(Socket s) {  
  10.         this.s=s;  
  11.     }  
  12.         @Override  
  13.         public void run() {  
  14.             HttpCreatorImpl hci=new HttpCreatorImpl(s);  
  15.             HttpRequest request=hci.getHttpRequest();  
  16.             System.out.println(request.getProtocol());  
  17.             HttpResponse response=hci.getHttpResponse();  
  18.             HttpAccessProcessor hapi=hci.getHttpAccessProcessor();  
  19.             if(request.isStaticResource())  
  20.             {  
  21.                 hapi.processStaticResource(request, response);  
  22.             }  
  23.             else if(request.isDynamicResource())  
  24.             {  
  25.                 hapi.processDynamicResource(request, response);  
  26.             }  
  27.             else  
  28.             {  
  29.                 System.out.println("无法处理");  
  30.                 hapi.sendError(404, request, response);  
  31.             }  
  32.         }  
  33. }  
这样的话,我们就完成了类似于服务器端Servlet的功能,能够同时处理html页面和Servlet页面,最重要的是多用户同时访问哦。。。,效果这儿就不展示了,你可以将自己的电脑作为服务器,然后使用局域网中的多台电脑进行访问,由于代码中含有很多提示信息,所以控制台上会有打印,如下是我的控制台界面:

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

0 0
原创粉丝点击