您的位置:首页 > 其它

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

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

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

[java] view
plain copy

 





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()启动线程

下面就是线程类的实现:

[java] view
plain copy

 





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服务器项目-request请求和response响应处理(一)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web服务器 多线程
相关文章推荐