自己的web伺服器專案-實現多執行緒處理(三)
阿新 • • 發佈:2019-02-12
上面專案中,伺服器只能接受單方的請求,不能夠多使用者同時訪問,這明顯不符合現實邏輯,那麼在這裡,我們將其修改為多執行緒的,實現多使用者的訪問
首先,我們實現Server類如下:
注意:在實現int port=Integer.valueOf(ServerPortUtils.getPortValue("serverPort"));時同樣使用了properties檔案進行埠的配置,參照前面自己配置。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(); } } }
程式碼中,while(true)為保持伺服器端一直處於監聽狀態,st.start()啟動執行緒
下面就是執行緒類的實現:
這樣的話,我們就完成了類似於伺服器端Servlet的功能,能夠同時處理html頁面和Servlet頁面,最重要的是多使用者同時訪問哦。。。,效果這兒就不展示了,你可以將自己的電腦作為伺服器,然後使用區域網中的多臺電腦進行訪問,由於程式碼中含有很多提示資訊,所以控制檯上會有列印,如下是我的控制檯介面: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); } } }