`
samsongbest
  • 浏览: 170043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用java编写简单Webserver,理解webserver的功能。

    博客分类:
  • Java
 
阅读更多

from http://www.cnblogs.com/wangrui-techbolg/archive/2013/03/10/2953108.html.

 

文件处理类 processer.java

package webbook.chapter2;

import java.io.*;
import java.net.Socket;

/**
 * 处理一个HTTP用户请求的线程类。
 */
public class Processor extends Thread {
    private PrintStream out;
    private InputStream input;
    /** 默认的服务器存放访问内容的目录 */
    public static final String WEB_ROOT = "/library/webserver/documents";

    public Processor(Socket socket) {
        try {
            input = socket.getInputStream();
            out = new PrintStream(socket.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {
            String fileName = parse(input);
            readFile(fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解析客户机发过的所有HTTP请求,如果是符合HTTP协议内容的, 就分析出客户机所要访问文件的名字,并且返回文件名。
     */
    public String parse(InputStream input) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(input));
        String inputContent = in.readLine();
        if (inputContent == null || inputContent.length() == 0) {
            sendError(400, "Client invoke error");
            return null;
        }
        // 分析客户请求的HTTP信息,分析出到底想访问哪个文件,
        // 发过来的HTTP请求应该是三部分。

        String request[] = inputContent.split(" ");
        if (request.length != 3) {
            sendError(400, "Client invoke error");
            return null;
        }
        // 第一部分是请求的方法
        String method = request[0];
        // 第二部分是请求的文件名
        String fileName = request[1];
        // 第三部分是HTTP版本号
        String httpVersion = request[2];
        System.out.println("Method: " + method + ", file name: " + fileName + ", HTTP version: " + httpVersion);
        return fileName;
    }

    /**
     * 处理调用一个文件的请求
     */
    public void readFile(String fileName) throws IOException {
        File file = new File(Processor.WEB_ROOT + fileName);
        if (!file.exists()) {
            sendError(404, "File Not Found");
            return;
        }
        // 把文件的内容读取到in对象中。
        InputStream in = new FileInputStream(file);
        byte content[] = new byte[(int) file.length()];
        in.read(content);
        out.println("HTTP/1.0 200 sendFile");
        out.println("Content-length: " + content.length);
        out.println();
        out.write(content);
        out.flush();
        out.close();
        in.close();
    }

    /**
     * 发送错误的信息
     */
    public void sendError(int errNum, String errMsg) {
        out.println("HTTP/1.0 " + errNum + " " + errMsg);
        out.println("Content-type: text/html");
        out.println();
        out.println("<html>");
        out.println("<head><title>Error " + errNum + "--" + errMsg + "</title></head>");
        out.println("<h1>" + errNum + " " + errMsg + "</h1>");
        out.println("</html>");
        out.println();
        out.flush();
        out.close();
    }
}

 

2.webserver.java

package webbook.chapter2;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class WebServer {
    /** 默认使用的服务器Socket端口号 */
    public static final int HTTP_PORT = 8080;
    private ServerSocket serverSocket;

    public void startServer(int port) {
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("Web Server startup on  " + port);
            while (true) {
                Socket socket = serverSocket.accept();
                // 通过线程的方式来处理客户的请求
                new Processor(socket).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * WebServer类的启动方法,可以通过命令行参数指定当前Web服务器所使用的端口号。
     */
    public static void main(String[] argv) throws Exception {
        WebServer server = new WebServer();
        if (argv.length == 1) {
            server.startServer(Integer.parseInt(argv[0]));
        } else {
            server.startServer(WebServer.HTTP_PORT);
        }
    }
}

 简单webserver 充当的作用就是接受客户端程序发过来的请求,根据请求内容转换的数据找到自己制定路径下的文件,将其文件转为流返回客服端,这个过程所用的协议为http。

 

分享到:
评论

相关推荐

    java实现web server功能

    本资源以"java实现web server功能"为主题,旨在教你如何使用Java编写一个简单的Web服务器,让我们一起深入探讨这个主题。 首先,理解Web服务器的基本工作原理至关重要。Web服务器接收客户端(通常是Web浏览器)发送...

    Java WebServer源代码

    深入理解Java WebServer的源代码对于学习网络编程、Java服务器端开发以及Web应用程序的架构设计至关重要。 在Java WebServer的源代码中,我们可以找到以下几个关键部分: 1. **服务器启动与配置**:源代码中通常...

    java webserver编写

    标题"java webserver编写"表明我们将关注如何使用Java语言来实现这一功能。Java具有丰富的网络编程库,如Java Socket API,使得我们可以方便地创建TCP连接来处理HTTP通信。首先,我们需要监听一个特定的端口(例如...

    用java编写的web服务器

    在提供的`WebServer.java`代码中,我们首先看到了对Java标准库中`java.io`和`java.net`包的导入,这两个包提供了处理I/O操作(如文件和数据流)以及网络通信(如Socket编程)的功能。接下来是`WebServer`类的定义,...

    JAVA编写的TWITTER搜索的webserver application

    标题 "JAVA编写的TWITTER搜索的webserver application" 描述了一款使用Java编程语言开发的Web服务器应用程序,其主要功能是实现对Twitter平台上的信息进行搜索。这个项目可能利用了Twitter的API接口来获取和处理数据...

    vb6 调用java WEBSERVER

    描述中提到的“一个调用JAVA的WEBSERVER方法实例,用VB6写的,简单明了”,意味着它提供了一个易于理解的代码示例,教我们如何在VB6中构建客户端程序,该程序能够调用Java Web服务器上的API或服务。这通常涉及到HTTP...

    CXF 编写 WebServer DEMO

    【标题】"CXF 编写 WebServer DEMO" 是一个使用Apache CXF框架构建Web服务的示例项目。Apache CXF是一个流行的开源框架,它允许开发者创建和部署SOAP和RESTful Web服务。这个DEMO旨在展示如何利用CXF轻松地搭建一个...

    c web server library

    描述中提到的链接指向了ITEYE博客上的一篇文章,虽然描述为空,但我们可以推测这篇文章可能详细讨论了如何使用C语言编写Web服务器库,或者是关于Lighttpd的使用、配置或开发经验。遗憾的是,由于无法直接访问该链接...

    Java编写的web相册

    【Java编写的Web相册】是一个适合初学者的项目,旨在帮助他们理解Java在Web开发中的应用。这个项目的核心是利用Java技术来构建一个在线图片展示平台,用户可以浏览、上传和管理自己的照片集。通过这个项目,我们可以...

    vxWorks中的web Server.pdf

    本文将详细介绍在嵌入式操作系统vxWorks中设计与实现Web Server的方法,并探讨两种实现方案:使用Wind Web Server组件和移植免费的GoAhead Web Server。 #### 二、嵌入式Web Server的重要性 嵌入式Web Server能够...

    简单的多线程WebServer

    【标题】"简单的多线程WebServer"是一个个人编写的基于多线程技术的网络服务器。这个WebServer设计得相对基础,主要目的是为了让用户理解多线程在Web服务中的应用。 【描述】提到,该WebServer的实现非常简单,其...

    模拟客户端访问webserver工具

    在IT行业中,模拟客户端访问Webserver工具是一种至关重要的软件,主要用于测试和调试Web服务器的性能、功能以及稳定性。这类工具允许开发者和系统管理员在没有实际用户交互的情况下模拟大量的并发请求,以便于发现...

    web server 套接字编程

    用java语言编写的web server 套接字编程,深入理解http协议及web服务器的实验原理

    WebServer项目文件

    本"WebServer项目文件"包含的是一套自定义编写的Web服务器配置文件,这对于理解Web服务器的工作原理、进行个性化配置以及深入学习网络编程具有重要价值。 首先,"webapps"这个目录通常是Web服务器默认放置应用程序...

    webserver底层实现

    本文将深入探讨Web服务器的底层实现,基于“WebServer_v14”这个文件名,我们可以推测这是一个基础版本的Web服务器实现,可能是用C++或者Java等编程语言编写的。 在Web服务器的设计中,以下几个关键知识点是至关...

    SunJavaSystemWebServer7.0详解

    4. 管理工具:强大的管理工具,如WebServer Administration Console,使得配置、监控和管理服务器变得简单易行。 5. 模块化设计:WebServer 7.0采用模块化设计,可以根据需求选择安装特定的模块,如JSP引擎、EJB容器...

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器

    servletServlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的...

    在ucOS下面的webserver中的连续传图片的java代码.zip_ucos_webserver_webserver UC

    在这个特定的项目中,我们看到一个名为 "在ucOS下面的webserver中的连续传图片的java代码.zip" 的压缩包,它包含了实现这一功能的 Java 代码。这个项目的关键知识点主要包括以下几个方面: 1. **ucOS操作系统**:...

    Xfire案例,webserver——Xfire案例

    3. **服务器编程语言**:Xfire可能使用了各种编程语言来构建其webserver,如C++(因为Xfire客户端就是用C++编写的),或者使用更现代的语言如Python、Java或Go。 4. **数据库集成**:为了存储和检索用户信息、游戏...

Global site tag (gtag.js) - Google Analytics