`
john2007
  • 浏览: 77857 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

自己动手写HTTP Server(1)——hello,world篇

    博客分类:
  • java
阅读更多

自己动手写个类似iis的服务器?

是的,但是功能肯定没有iis强大。

 

 

原理介绍:

1)服务器端监听一个端口;

2)客户端(浏览器)发出请求,比如:输入http://localhost:5555/,回车;

3)服务器端得到请求,返回请求的相应内容,当然了,一定要遵循http协议的格式,要不然那,浏览器是解析不出内容地;

 

学习程序开发的第一步就是hello,world.

今天咱也来个http server开发的hello world,嘿嘿。

 

例子如下:

 

/**
 * @author chen
 * 
 */
public class Myws implements Runnable {

	ServerSocket server;

	/**
	 * @throws IOException
	 * @throws UnknownHostException
	 * 
	 */
	public Myws() throws UnknownHostException, IOException {
		// TODO Auto-generated constructor stub
		server = new ServerSocket(5555);

	}

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Thread t=new Thread(new Myws());
		t.start();
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		boolean listening=true;
		while (listening) {
			try {
				Socket client=server.accept();
				System.out.println("client:"+client);
				PrintStream out = new PrintStream(client.getOutputStream(),
						true);
				String content="<h1>It works.<h1>\r\n";
				out.print("HTTP/1.0 202 OK"+"\r\n");
				out.print("Server: myserver"+"\r\n");
				out.print("Date: "+new Date()+"\r\n");
				out.print("Content-length: "+content.length()+"\r\n");
				out.print("Content-type: text/html"+"\r\n");
				out.print("\r\n");
				out.print(content);
				out.flush();
				out.close();
				client.close();
			} catch (Exception ex) {
				System.out.println(ex.getMessage());
			}
		}
		
		if(server!=null){
			try {
				server.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

 

为了突出hello,world的特点,也为了是例子尽量简洁,我是能省就省啊。

 

代码介绍:

 

1)构造函数中初始化ServerSocket,使其监听5555端口:

2)当有客户端请求时(不管请求的内容是什么),统统返回一样的内容,内容是通过out.print(String)实现的;

 

 

好了,运行吧。

 

1)启动main();

2)在浏览器输入localhost:5555,回车:

3)OK,it works.

有图为证:

 

 

虽然可以运行了,但是实在是太蹩脚了。毕竟只是个hello world.

甚至只能对一个客户端相应,下次会对他进行升级,弄个多线程的。

还要分别对get post请求做不同的响应。

 

 

  • 大小: 33.9 KB
分享到:
评论
2 楼 john2007 2008-12-09  
fjlyxx 写道

PYTHON PYTHON PYTHON USE IT

Are you a robot?
1 楼 fjlyxx 2008-12-09  
PYTHON PYTHON PYTHON USE IT

相关推荐

    webServices学习之一——axis1实现helloWorld

    本篇文章将深入探讨如何使用Axis1来创建并运行一个基本的"Hello, World!"示例,帮助初学者理解Web服务的工作原理。 首先,了解SOAP是理解Axis1工作原理的关键。SOAP是一种轻量级的协议,用于在Web上交换结构化的、...

    MPI环境配置到HelloWorld

    【MPI环境配置到HelloWorld】这篇教程主要针对初次接触MPI并行计算的新手,特别指出在Windows环境下使用VC6.0进行开发。MPI,全称Message Passing Interface,是一种用于并行计算的通信标准,它允许分布式内存的多...

    struts2HelloWorld

    1. 用户访问`http://yourserver/Struts2_HelloWorld/hello`。 2. Struts2的前端控制器(Filter)拦截请求。 3. `struts.xml`中的配置决定将请求路由到`HelloWorldAction`的`execute`方法。 4. `execute`方法执行,...

    Dubbo新手入门实例HelloWorld(zookeeper)源码

    在本实例中,“Dubbo新手入门实例HelloWorld(zookeeper)”旨在帮助初学者了解如何结合Dubbo和Zookeeper创建一个简单的服务提供者和消费者。首先,我们需要理解这两个关键组件: 1. **Dubbo**: Dubbo的核心功能包括...

    Seam 例子 Hello World

    - **访问URL**:通过`http://localhost:8080/helloworld/`访问应用。 #### 九、总结 通过这个简单的Hello World示例,我们可以看到Seam框架如何简化了Java Web应用程序的开发过程。从实体定义到页面处理,再到事件...

    hello的一个war包

    【标题】"hello的一个war包"是一个专门为初学者设计的Web应用程序压缩包,它遵循了Java Web应用程序的标准打包格式——WAR(Web ARchive)。WAR文件是Java EE平台中的一个重要组成部分,它允许开发者将所有必要的...

    JAVA遇见HTML——JSP篇

    【JAVA遇见HTML——JSP篇】是一门适合初学者的课程,主要讲解了Java与HTML在Web开发中的结合,特别是JSP(Java Server Pages)的相关知识。本文将深入解析JSP的基本概念、语法以及核心对象,帮助理解如何利用JSP进行...

    使用CXF发布和调用webservice之HelloWorld入门

    本文将详细介绍如何使用Apache CXF框架来实现一个简单的WebService——HelloWorld示例。此示例不仅适用于初学者理解WebService的基本概念,同时也能够帮助开发者快速上手CXF框架。CXF是一个强大的开源框架,用于构建...

    HttpServer-python.zip

    首先,Python内置了一个简单的HTTP服务器模块——http.server,它是Python 3.x中的标准库。这个模块提供了一个基础的HTTP服务器,可以用来快速展示静态文件或者进行简单的HTTP服务开发。在命令行中,我们只需要一行...

    开发者突击:JAVA主流框架 第5章

    JSP(JavaServer Pages)是一种基于Java的技术,用于开发动态网页内容。它允许开发者在HTML页面中嵌入Java代码,使得动态内容的生成变得简单。但随着应用复杂度的增加,直接在JSP页面中编写Java代码会使得页面变得...

    nodejs实例解析(输出hello world)

    本文的主旨是通过一个简单的实例——输出“hello world”,来解析Node.js的基础使用方法。通过这个示例,我们可以了解到如何使用Node.js搭建基本的HTTP服务器,并处理简单的GET请求。 首先,Node.js通过require语句...

    swift-PerfectHTTPServer-Perfect服务器端Swift的HTTP1.1服务器

    本文将重点介绍Perfect中的HTTP服务器——Perfect HTTP Server,以及如何使用它来构建基于Swift的HTTP 1.1服务器。 **一、Perfect HTTP Server简介** Perfect HTTP Server是一款基于Swift开发的高性能服务器软件,...

    hello_world:node.js主类的作业分配#1

    本项目名为"hello_world:node.js主类的作业分配#1",旨在介绍如何通过Node.js创建一个简单的"Hello World" API,该API能够发送问候世界的响应。此API的特点是同时支持HTTP和HTTPS连接,这在确保应用安全性的同时,...

    简单Spring 实例(自己写的)

    【Spring 实例——helloSpring】 在"helloSpring"这个实例中,我们可以期待看到以下关键部分: 1. **配置文件**:通常为 `applicationContext.xml`,这是 Spring 的配置中心,定义了 beans 及其依赖关系。在这个...

    grpc-python-helloworld

    1. **ProtoBuf 定义**:项目中应该包含一个 `.proto` 文件,定义了一个名为 `helloworld` 的服务,其中有一个或多个方法,如 `SayHello`。此外,还会定义一个 `HelloRequest` 和 `HelloReply` 消息类型,分别代表...

    jboss-as-7.1.1.Final

    EJB3.1 JBoss7.0.2 EclipseJuno-helloworld实现 2013-01-06 02:59:54 分类: Java EJB3.1 JBoss7.1 Eclipse3.7---helloworld实现 一、环境配置: JDK:正常配置 Eclipse:正常下载,解压(V3.7) JBoss:正常下载,...

    nodejs 入门.pdf

    1. **脚本模式**:编写一个简单的 JavaScript 文件,如 `helloworld.js`,其中包含 `console.log("Hello World");`,然后通过命令行执行 `node helloworld.js`。 2. **交互模式**:直接在命令行中启动 Node.js 的...

    关于服务器——安装配置tornado

    这个简单的应用会在访问 `http://your_server_ip:8000/` 时返回 "Hello, world"。 ### 运行Tornado应用 保存文件后,在终端中执行以下命令启动应用: ```bash python app.py ``` 此时,Tornado 应用将在端口 ...

    《Java Web开发基础——从Servlet到JSP》源代码v1.0

    例如,可能会有简单的"Hello, World!" Servlet示例,用于演示如何创建和部署一个基本的Servlet。此外,还可能包含处理HTTP请求的Servlet,例如登录验证、表单数据处理等。在JSP方面,可能会有展示EL(Expression ...

    WebService开发快速起步

    本文将基于给定文件中的描述,详细介绍如何使用XFire框架快速搭建并实现一个简单的Web Service应用——Hello World示例。这不仅有助于理解Web Service的基本概念和工作原理,还能帮助开发者快速上手XFire框架,掌握...

Global site tag (gtag.js) - Google Analytics