黑马程序员技术交流社区

标题: [成都校区]使用Socket模拟tomcat [打印本页]

作者: 777666    时间: 2018-5-29 01:12
标题: [成都校区]使用Socket模拟tomcat
本帖最后由 777666 于 2018-5-29 01:14 编辑

public class MyServer {
        
        public static void main(String[] args) throws Exception {
                // 解析XML:
                // 创建解析器
                SAXReader reader = new SAXReader();
                // 解析XML文档:
                Document document = reader.read("conf/server.xml");
                Element element = (Element)document.selectSingleNode("//Connector['@port']");
                String port = element.attributeValue("port");
                // ServerSocket 对象可以监听端口
                ServerSocket serversocket = new ServerSocket(Integer.parseInt(port));
                while(true) {
                        Socket socket = serversocket.accept();        // 等待客户端的连接请求,一旦有请求过来,就结束阻塞,返回客户端对象
                        //System.out.println(socket.getInetAddress());
                        // 一旦有客户来访问, 就另开一个新线程去提供服务, main线程继续等待下一个客户的连接
                        new Thread(new MyService(socket)).start();

                }
        }

}
public class MyService implements Runnable{

        private Socket socket;

        public MyService(Socket socket) throws Exception {
                this.socket = socket;
        }

        @Override
        public void run() {
                // 提供服务
                try{
                        InputStream in = socket.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                        String firstLine = reader.readLine();
                        System.out.println(firstLine);
                        String path = firstLine.split(" ")[1];
                        System.out.println(path);
                        // 从文件读, 往浏览器写
                        File file = new File("webapps"+path);
                        FileInputStream fis = new FileInputStream(file);
                        
                        OutputStream os = socket.getOutputStream();
                        os.write("HTTP/1.1 200 OK\r\n".getBytes());
                        os.write("\r\n".getBytes());
                        byte[] buffer = new byte[1024];
                        int len = 0;
                        while ((len = fis.read(buffer))!=-1) {
                                os.write(buffer, 0, len);
                        }
                        socket.close();
                }catch(Exception e){
                        e.printStackTrace();
                }
        }        
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2