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,怎样,看到线程名了不是?多刷几次试试?
分享到:
相关推荐
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
【标题】"基于Java语言的Web宿舍管理系统源码"揭示了这是一个使用Java编程语言开发的Web应用程序,专门用于管理宿舍相关事务。Java是一种广泛应用的面向对象的语言,以其平台独立性和强大的功能而闻名,尤其在企业级...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
本论坛系统是基于Java Web技术实现的,它使用了JSP(JavaServer Pages)作为视图层技术,结合Servlet进行业务逻辑处理,为用户提供了一个交互式的在线讨论平台。通过深入研究这个源码,我们可以学习到如何构建一个...
Java在Web开发中的应用主要通过JavaServer Pages (JSP)、Servlets和JavaBeans等技术实现。JSP是Java服务器页面的简称,它允许开发者在HTML页面中嵌入Java代码,使得网页具有动态内容生成的能力。Servlets是Java Web...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Java Web编程宝典,作为一款十年典藏版的资源,无疑是Java Web开发领域的经典之作。这份资源包含了丰富的源码,是学习和理解Web应用程序开发的宝贵资料。在深入探讨这些知识点之前,我们先来理解一下Java Web编程的...
《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...
总结来说,"JAVA-WebServer"项目是一个学习Java网络编程和Web服务器实现的绝佳实践。通过这个项目,开发者可以深入理解HTTP协议,掌握Java网络编程技巧,并了解到Web服务器的基本工作原理。同时,这也是进一步学习...
系统的核心技术栈包括JSP(Java Server Pages)、Servlet、JavaBean、Struts2以及JDBC(Java Database Connectivity)。下面将对这些技术及其在系统中的应用进行详细阐述。 首先,JSP是Java的一种动态网页技术,它...
总之,《Java Web编程宝典-十年典藏版》的源码包为初学者和经验丰富的开发者提供了宝贵的实践资源,不仅涵盖了基础的Java Web技术,还可能涉及到了一些高级主题,如框架的使用和数据库操作。通过这些实例,你可以...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
通过以上步骤,我们可以理解并实现一个简单的Java Web应用集成QQ第三方登录的功能。在实际开发中,还需要考虑错误处理、用户体验优化以及与其他社交平台的兼容性等问题。这个Demo源码将帮助开发者快速上手,并且可以...
【WEB简易聊天源码】是基于Java编程语言开发的一个在线聊天应用的源代码。这个项目旨在为初学者和开发者提供一个简单的平台,了解并实践如何构建一个WEB聊天系统。源码的实现涵盖了网络通信、多线程处理以及前端交互...
Java Web是基于Java技术构建的Web应用程序,它包括Servlet、JSP(JavaServer Pages)、JavaBean等组件。Servlet是Java编写的服务端程序,用于处理HTTP请求;JSP则是一种动态网页技术,可以将HTML代码和Java代码结合...
Java连接数据库是编程中常见的任务,特别是在Web应用开发中,如JSP项目。本文将深入讲解如何使用Java JDBC(Java Database Connectivity)连接SQL Server数据库,并提供一个轻量级的封装示例。 首先,JDBC是Java...
2. **JSP(JavaServer Pages)**:JSP是用于创建动态网页的Java技术,源码中可能会展示JSP语法、内置对象(如request、response、session等)的使用,以及EL(Expression Language)和JSTL(JavaServer Pages ...