`
kaobian
  • 浏览: 212192 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论
阅读更多
本文也是参考了网上的资料,加上我自己的整理得出的。

httpserver原理:服务器端 打开一个socket,一直处在监听tomcat指定的 ip 的指定端口,一旦有访问的,就开启一个线程去处理,代码如下:

-------------------------------server:
package com.kaobian;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.session.HttpSession;

public class HttpServer {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(8888);
            while (true) {
                Socket socket = server.accept();
                HttpSession session = new HttpSession(socket);
                new Thread(session).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

---------------------------------处理线程
package com.session;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

import com.config.Config;

public class HttpSession implements Runnable {
    private String path = Config.getConfig().getPath();
    private Socket socket ;

    public HttpSession(Socket socket){
        super();
        this.socket = socket;
    }

    public void run() {
         try {
            BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
            OutputStream out = this.socket.getOutputStream();
            String command = null;
            while((command = br.readLine()) != null){
                System.out.println("浏览器的指令:"+command);
                if(command.length() <3){
                    break;
                }
                String result = command.substring(0,3);
                if(result.equalsIgnoreCase("GET")){
                    int begin = command.indexOf("/")+1;
                    int end   = command.lastIndexOf(" ");
                    String fileName = command.substring(begin,end);
                    doGet(fileName,out);
                }
               
            }
            out.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void doGet(String fileName, OutputStream out) {
        File file = new File(path+fileName);
        if(!file.isDirectory()){
            if(!file.exists()){
                file = new File(path + Config.getConfig().getDefaultPage());   
            }
        }else {
            file = new File(path +  Config.getConfig().getDefaultPage());
        }
        InputStream is  = null;
        try {
            is = new FileInputStream(file);
            byte[] data  =new byte[1024];
            int    len = 0;
            while((len = is.read(data)) != -1){
                out.write(data,0,len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(is != null){
               try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally{
                    is = null;
                }
            }
        }
       
    }

}

---------------------------读取配置文件
package com.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Config {
   
    private String  path ;
    private String  defaultPage;
    private static Config config ;
   
    public static Config getConfig(){
        if(config == null){
            config = new Config();
            config.init();
        }
        return config;
    }
   
    private void init(){
        Properties properties = new Properties();
        try {
            InputStream reader = new FileInputStream(new File("config.properties"));
            properties.load(reader);
            this.path = properties.getProperty("path");
            this.defaultPage = properties.getProperty("defaultIndex");
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    private Config(){
    }
   
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getDefaultPage() {
        return defaultPage;
    }
    public void setDefaultPage(String defaultPage) {
        this.defaultPage = defaultPage;
    }
   
}

------------------配置文件要放到工程的根目录下,要不然自行修改属性文件的位置

path=c://
defaultIndex=div.html
1
4
分享到:
评论
2 楼 kaobian 2011-07-18  
cheney_love 写道
while (true) {
                Socket socket = server.accept();
                HttpSession session = new HttpSession(socket);
                new Thread(session).start();
            }

这方法不是在不停的创建HttpSession 吗

不是,这个方法只有在客户端有请求的时候 才会去创建一个线程去执行,server.accept();
是一个阻塞式的执行,他一直 出去监听状态,只有有访问的时候才会实例化一个socket
1 楼 cheney_love 2011-07-18  
while (true) {
                Socket socket = server.accept();
                HttpSession session = new HttpSession(socket);
                new Thread(session).start();
            }

这方法不是在不停的创建HttpSession 吗

相关推荐

    模拟tomcat的工作原理

    **模拟Tomcat工作原理** Tomcat是一款开源的Java Servlet容器,它是Apache软件基金会下的Jakarta项目的一部分,主要用于运行Java Web应用程序。在这个模拟过程中,我们将深入理解Tomcat如何处理HTTP请求,以及它在...

    模拟TOMCAT工作的全部过程

    【TOMCAT工作原理详解】 ...通过模拟TOMCAT工作过程,可以更深入地理解这些概念,为实际开发打下坚实基础。在`mvcdemo`这样的实践中,你可以亲自体验和学习如何在TOMCAT上部署和运行一个简单的MVC应用。

    模拟Tomcat运行机制

    《模拟Tomcat运行机制》是一本深入解析Tomcat内核的书籍,主要针对Tomcat4.1.12和5.0.18版本。Tomcat作为一款流行的、开源的Servlet容器,其复杂性在于由多个组件组成。本书旨在帮助读者理解Tomcat的工作原理,无论...

    模拟Tomcat服务器

    首先,我们需要了解Tomcat的工作原理。Tomcat是基于Apache软件基金会的Jakarta项目,它接收HTTP请求,并将这些请求分发给Java应用程序,通常是Servlets。Servlets是Java编写的服务器端程序,可以处理动态内容。JSP则...

    模拟tomcat、servlet服务器

    在IT行业中,构建一个模拟Tomcat或Servlet服务器是一项高级...通过以上知识点的学习和实践,你将能够构建一个基本的模拟Tomcat和Servlet服务器,这将帮助你深入理解Web服务器的工作原理,提升你的Java网络编程技能。

    java模拟tomcat的web服务器源码

    本篇文章将深入探讨如何用Java语言来模拟Tomcat的核心功能,以理解其工作原理。 首先,我们需要了解Java服务器的工作基础。在Java中,HTTP请求的处理是通过实现Servlet接口的类完成的。Servlet是Java中用于处理HTTP...

    j2se模拟tomcat

    标题中的“j2se模拟tomcat”意味着我们将探讨如何使用Java标准版(J2SE)的编程技术来创建一个简单的Web服务器,模仿Tomcat的工作原理。Tomcat是一款流行的开源应用服务器,主要用于运行Java Servlet和JavaServer ...

    简单的tomcat实现1

    本篇文章将深入解析“简单的tomcat实现1”,帮助读者理解Tomcat的核心概念、工作原理以及如何手写Tomcat的基本组件。 首先,我们要了解Tomcat的两大核心组成部分:连接器(Connector)和容器(Container)。连接器...

    Tomcat服务器模拟(TCP/IP)

    模拟Tomcat应用服务器的工作原理,有利于理解服务器的工作的模式。简单模拟,不考虑并发性等等因素。

    tomcat_server原理初探.pdf

    ### Tomcat Server原理初探——理解Tomcat的关键概念与架构 #### Tomcat Server概览 Tomcat是一款开源的Servlet容器,由Apache软件基金会旗下的Jakarta项目开发,它不仅支持Servlet和JSP技术,还得到了Sun ...

    Shell kill tomcat process

    关于标签中的“源码”和“工具”,这里可能是指在处理Tomcat进程时,有时需要查看Tomcat的源代码,了解其内部工作原理,或者使用一些辅助工具来帮助管理和监控Tomcat。例如,`jps`(Java Virtual Machine Process ...

    Tomcat源码分析

    【标题】"Tomcat源码分析" ...通过对Tomcat源码的分析,开发者可以更好地理解其工作原理,从而优化性能、解决运行问题,或者开发出符合特定需求的扩展功能。同时,这也是提升Java Web开发技能的重要途径。

    Tomcat+IIS整合配置文件

    在这个文件中,会定义工作线程(workers)和它们与Tomcat实例的关系,以便正确地分发请求。 **uriworkermap.properties**:这个文件定义了URI到worker的映射,决定了哪些URL请求会被发送到哪个Tomcat实例处理。 **...

    Tomcat7.0源码,可直接导入eclipse

    通过深入研究Tomcat7.0的源码,我们可以更好地理解HTTP服务器、Servlet容器的工作原理,提升Web应用的开发和优化能力。本文将探讨如何将Tomcat7.0源码导入Eclipse,并进行本地运行,以实现高效的学习和调试。 首先...

    tomcat connectors

    如果你需要深入理解Tomcat连接器的工作原理,或者想要对其进行定制,你可以编译这个源代码。这通常涉及到下载源码,配置构建环境(如Apache Maven或Ant),然后执行构建命令来生成可部署的二进制文件。 了解Tomcat ...

    Http请求模拟报文返回工具

    Http请求模拟报文返回工具的核心原理是基于HTTP协议的工作机制,它可以创建并配置自定义的HTTP响应报文。当用户通过HTTP客户端(如浏览器或HTTP库)发起请求时,该工具会捕获这些请求,并按照预设的规则返回预先配置...

    tomcat远程命令攻击的漏洞与利用

    ### Tomcat 远程命令攻击漏洞 CVE-2017-12615 的深入解析及...通过本实验的学习,我们不仅了解了CVE-2017-12615漏洞的基本原理,还掌握了如何模拟和防御这种类型的攻击。这对于提高个人和组织的安全意识具有重要意义。

    黑马程序员-tomcat集群部署文档资料

    Tomcat作为开源的Servlet容器,其源码提供了深入理解其工作原理的机会。主要组件包括Catalina(核心引擎)、 Coyote(处理HTTP协议)、Apr(与操作系统交互的本地库)等。源码分析可以帮助我们理解请求处理流程、...

    开启TOMCAT6的GZIP压缩

    GZIP压缩的工作原理是在客户端请求网页后,由服务器端将网页文件压缩后再发送给客户端,客户端接收到压缩后的文件后,由浏览器进行解压并显示页面内容。这种方式不仅可以减少传输的数据量,而且还能对动态生成的内容...

Global site tag (gtag.js) - Google Analytics