`
jeff312
  • 浏览: 77297 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

可能是世界上最简单的web server的java实现 (源码)

    博客分类:
  • J2EE
阅读更多
J2EE 写了好些年,各种web容器都多多少少用过,却从未想过基本的web server是如何实现的。网上的文章多重于实用,官方文档又过于繁杂,若非机缘巧合,又怎想得到,神秘的web server,实现起来竟是如此简单!

首先,创建一个线程类,每个线程独立处理一个web browser request:
import java.io.*;
import java.net.*;

class WebServerConnection extends Thread {
  Socket connection;
  public WebServerConnection(Socket connection) {
    super();
    this.connection = connection;
    this.setName("Request No. " + this.getId());
  }

  @Override
  public void run() {
    Writer response = null;
    try {
      Thread.sleep(1000);
      response = new OutputStreamWriter(connection.getOutputStream());
      response.write(this.getName(), 0, this.getName().length());
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        response.close();
        connection.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

一个简单的请求处理器就这样完成了,它的动作很简单,对任何一个浏览器请求,它的回应都是自己的线程名。接下来要跑一个daemon进程,监听一切来自9090端口的请求,每到达一个请求,都创建一个WebServerConnection线程去处理,然后继续监听端口。该进程只能处理一共threadLimit那么多的请求,数量一到,server 宕掉:
import java.net.*;

public class WebServer {
    public static void main(String[] args) {
        try {
            int threadLimit = 5;
            int threadCounter = 0;
            ServerSocket sock = new ServerSocket(9090);
            while ((threadCounter++) < threadLimit) {
                //阻塞进程,直到新的request被侦测到
                Socket connection = sock.accept();
                //创建处理线程
                Thread connect = new WebServerConnection(connection);
                connect.start();
            }
            System.out.println("limit reached, server down!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


运行WebServer,然后在浏览器里输入http://localhost:9090,怎样,看到线程名了不是?多刷几次试试?
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    基于Java语言的Web宿舍管理系统源码

    【标题】"基于Java语言的Web宿舍管理系统源码"揭示了这是一个使用Java编程语言开发的Web应用程序,专门用于管理宿舍相关事务。Java是一种广泛应用的面向对象的语言,以其平台独立性和强大的功能而闻名,尤其在企业级...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java web 论坛源码

    本论坛系统是基于Java Web技术实现的,它使用了JSP(JavaServer Pages)作为视图层技术,结合Servlet进行业务逻辑处理,为用户提供了一个交互式的在线讨论平台。通过深入研究这个源码,我们可以学习到如何构建一个...

    java网站源码

    Java在Web开发中的应用主要通过JavaServer Pages (JSP)、Servlets和JavaBeans等技术实现。JSP是Java服务器页面的简称,它允许开发者在HTML页面中嵌入Java代码,使得网页具有动态内容生成的能力。Servlets是Java Web...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java Web 编程宝典(十年典藏版) 光盘源码

    Java Web编程宝典,作为一款十年典藏版的资源,无疑是Java Web开发领域的经典之作。这份资源包含了丰富的源码,是学习和理解Web应用程序开发的宝贵资料。在深入探讨这些知识点之前,我们先来理解一下Java Web编程的...

    MLDN——Java Web 开发实战经典源码笔记(基础篇)|

    《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...

    JAVA-WebServer:JAVA 中的简单 Web 服务器

    总结来说,"JAVA-WebServer"项目是一个学习Java网络编程和Web服务器实现的绝佳实践。通过这个项目,开发者可以深入理解HTTP协议,掌握Java网络编程技巧,并了解到Web服务器的基本工作原理。同时,这也是进一步学习...

    基于Java web的网络评分系统(源码+数据库).zip

    系统的核心技术栈包括JSP(Java Server Pages)、Servlet、JavaBean、Struts2以及JDBC(Java Database Connectivity)。下面将对这些技术及其在系统中的应用进行详细阐述。 首先,JSP是Java的一种动态网页技术,它...

    《java web编程宝典-十年典藏版》 源码 5

    总之,《Java Web编程宝典-十年典藏版》的源码包为初学者和经验丰富的开发者提供了宝贵的实践资源,不仅涵盖了基础的Java Web技术,还可能涉及到了一些高级主题,如框架的使用和数据库操作。通过这些实例,你可以...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java web 实现 QQ 第三方登录 Demo 源码分享

    通过以上步骤,我们可以理解并实现一个简单的Java Web应用集成QQ第三方登录的功能。在实际开发中,还需要考虑错误处理、用户体验优化以及与其他社交平台的兼容性等问题。这个Demo源码将帮助开发者快速上手,并且可以...

    WEB简易聊天源码

    【WEB简易聊天源码】是基于Java编程语言开发的一个在线聊天应用的源代码。这个项目旨在为初学者和开发者提供一个简单的平台,了解并实践如何构建一个WEB聊天系统。源码的实现涵盖了网络通信、多线程处理以及前端交互...

    《Tomcat与Java Web开发技术详解(第2版)》_(孙卫琴)_源码.zip

    Java Web是基于Java技术构建的Web应用程序,它包括Servlet、JSP(JavaServer Pages)、JavaBean等组件。Servlet是Java编写的服务端程序,用于处理HTTP请求;JSP则是一种动态网页技术,可以将HTML代码和Java代码结合...

    java连接数据库源码

    Java连接数据库是编程中常见的任务,特别是在Web应用开发中,如JSP项目。本文将深入讲解如何使用Java JDBC(Java Database Connectivity)连接SQL Server数据库,并提供一个轻量级的封装示例。 首先,JDBC是Java...

    Java Web程序开发范例宝典 源码11-21

    2. **JSP(JavaServer Pages)**:JSP是用于创建动态网页的Java技术,源码中可能会展示JSP语法、内置对象(如request、response、session等)的使用,以及EL(Expression Language)和JSTL(JavaServer Pages ...

Global site tag (gtag.js) - Google Analytics