`
school104
  • 浏览: 73306 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java轻松开发http server

 
阅读更多
转载:http://www.webspherechina.net/home/space.php?uid=9735&do=blog&id=7666


jdk 6.0 中有一个叫httpserver的包,在这个包的基础上,实现一下HttpHandler接口就可以轻松开发出一个http server!


package org.brad.woo.httpserver;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.sql.Timestamp;
import java.util.Properties;
import java.util.StringTokenizer;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class BradooHttpServer {
  static{
    System.out.println("start bradoo http server...");
    File logDirectory=new File("./log");
    if(!logDirectory.exists()){
      logDirectory.mkdirs();
    }
    try {
      System.setOut(new BradooOut(new FileOutputStream("./log/SystemOut.log")));
      System.setErr(new BradooOut(new FileOutputStream("./log/SystemErr.log")));
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    int serverPort=Integer.parseInt((String)Configuration.config.getProperty("server_port"));
    try {
      HttpServer hs=HttpServer.create(new InetSocketAddress(serverPort), 0);
      hs.createContext("/", new BradooHandler());
      hs.start();
      System.out.println("A http Server is started in port "+serverPort+"!");
    } catch (IOException e) {
      e.printStackTrace();
    }

  }

}
class BradooOut extends PrintStream{
  public BradooOut(FileOutputStream out) {
    super(out);
  }
  public void println(String str){
    super.println(new Timestamp(System.currentTimeMillis()).toString()+" - "+str);
  } 
}
class Configuration{
  public static Properties config;
  static{
    config=new Properties();
    try {
      config.load(Configuration.class.getClassLoader().getResourceAsStream("httpd.properties"));
      System.out.println(config);
    } catch (IOException e) {
      e.printStackTrace();
    }
   
  }
}
class BradooHandler implements HttpHandler{
  @Override
  public void handle(HttpExchange arg0) throws IOException {
    String baseDirectory=(String)Configuration.config.getProperty("server_base_directory");
    if(baseDirectory.endsWith("/"))
      baseDirectory=baseDirectory.substring(0,baseDirectory.length()-1);
    String reqURI=arg0.getRequestURI().toString();
    if(!reqURI.endsWith("/"))
      reqURI+="/";
    System.out.println("RequestURI="+reqURI);
    File reqFile=new File(baseDirectory+reqURI);
    OutputStream ut=arg0.getResponseBody();
    if(!reqFile.exists()){
      String response="400, the file "+reqURI+" is not found!";
      System.out.println("400="+response);
      arg0.sendResponseHeaders(200, response.length());
      byte[] b=response.getBytes();
      out.write(b, 0, b.length);
    }else if(reqFile.isFile()){
      FileInputStream is=new FileInputStream(baseDirectory+reqURI);
      int fileLength=is.available();
      is.close();
      arg0.sendResponseHeaders(200, fileLength);
      BufferedReader br=new BufferedReader(new FileReader(baseDirectory+reqURI));
      String line=null;
      while((line=br.readLine())!=null){
        byte[] b=line.getBytes();
        out.write(b, 0, b.length);
      }
      br.close();
    }else if(reqFile.isDirectory()){
      StringTokenizer st=new StringTokenizer((String)Configuration.config.getProperty("welcome_file_list")," ");
      File welFile=null;
      StringBuffer welFilePath=null;
      boolean isFound=false;
      while(st.hasMoreTokens()){
        welFilePath=new StringBuffer();
        welFilePath.append(baseDirectory);
        welFilePath.append(reqURI);
        welFilePath.append((String)st.nextToken());
        //System.out.println("welFilePath="+welFilePath.toString());
        welFile=new File(welFilePath.toString());
        if(welFile.exists()){
          isFound=true;
          break;
        }
      }
      if(isFound){
        FileInputStream is=new FileInputStream(welFilePath.toString());
        int fileLength=is.available();
        is.close();
        arg0.sendResponseHeaders(200, fileLength);
        BufferedReader br=new BufferedReader(new FileReader(welFilePath.toString()));
        String line=null;
        while((line=br.readLine())!=null){
          byte[] b=line.getBytes();
          out.write(b, 0, b.length);
        }
        br.close();
      }else{
        File[] fileList=reqFile.listFiles();
        StringBuffer sb=new StringBuffer();
        sb.append("<html><head><title>Directory</title></head><body><table border=1>");
        sb.append("<tr><td>Type</td><td>Name</td></tr>");
        if(!reqURI.equals("/")){
          sb.append("<tr><td>Parent Directory:</td><td><a xhref=");
          String parentDirecotry=reqURI.substring(0,reqURI.substring(0, reqURI.length()-1).lastIndexOf("/")+1);
          sb.append(parentDirecotry);
          sb.append(">");
          sb.append(parentDirecotry);
          sb.append("</a></td></tr>");
        }
        for(int i=0;i<fileList.length;i++){
          sb.append("<tr><td>");
          sb.append(fileList[i].isFile()?"F":"D");
          sb.append("</td><td><a xhref=");
          sb.append(reqURI);
          sb.append(fileList[i].getName());
          sb.append(">");
          sb.append(fileList[i].getName());
          sb.append("</a></td></tr>");       
        }
        sb.append("</table></body></html>");
        arg0.sendResponseHeaders(200, sb.capacity());
        byte[] b=sb.toString().getBytes();
        out.write(b, 0, b.length);
      }
    }
    out.close();
  } 
}
分享到:
评论

相关推荐

    JAVA HTTP 发送 接收 com.sun.net.httpserver包 demo

    总之,通过`com.sun.net.httpserver`包,Java开发者可以轻松地搭建自己的HTTP服务器并进行客户端的HTTP请求。这个简单的包提供了一种快速原型开发的方式,帮助开发者理解HTTP协议的工作原理,同时在不需要引入额外...

    java大部分服务器代码websever tcpserver udpserver httpserver/.....等

    在Java中,有多种类型的服务器,如WebServer、TCPServer、UDPServer和HTTPServer等,它们各自扮演着不同的角色并服务于不同类型的网络通信需求。下面我们将深入探讨这些服务器的原理、实现方式以及在实际开发中的...

    arcgis server for java

    6. **RESTful服务**:ArcGIS Server提供RESTful接口,使得非Java的客户端也能轻松访问GIS服务。开发者可以通过创建REST服务,使任何支持HTTP的客户端都能访问地图和地理处理任务。 7. **源码管理**:在`src`目录下...

    java源码包实例源码JAVA开发源码55个合集.zip

    java源码包J实例源码JAVA开发源码55个合集: Java中的Blowfish对称密钥加密算法类和实例.rar Java中的EJB编程实例代码.rar Java中的SSL及HTTPS协议实例源码.rar Java写的ATM机取款模拟程序.zip Java写的一个mp3播放器...

    Java企业开发指南

    3. **JSF(JavaServer Faces)**:这是一种用于构建用户界面的框架,它简化了Web应用程序的开发过程。 4. **Servlets**:这是用于处理客户端请求并生成动态内容的核心技术之一。 5. **JSP(JavaServer Pages)**...

    java+SSH+oracle+sqlserver学习笔记

    SQLServer同样支持JDBC,使得Java开发者可以轻松地在Java应用中集成和管理数据。 学习这个笔记,你需要理解Java的基础语法,包括类、对象、接口以及异常处理。接着深入学习SSH框架,了解它们各自的原理和配置,如何...

    Java程序通过JDBC连接SQLServer2000数据库全解.doc

    ### Java程序通过JDBC连接SQLServer2000数据库全解 #### 一、环境搭建与配置 ...通过这种方式,开发者能够轻松地实现与数据库之间的交互操作,为开发基于SQL Server的应用程序提供了坚实的基础。

    Java轻松上手

    ### Java轻松上手:从初学到精通的关键知识点 #### 一、JDK:Java的核心与起点 ##### 1. JDK的定义与组成 JDK,全称Java Development Kit,是Java开发的基础,包含了Java运行环境(Java Runtime Environment,JRE...

    java实现web server功能

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

    Java连接opc所需的jar包,以及Java实现opc server客户端的源码.zip

    总之,`Java连接opc所需的jar包,以及Java实现opc server客户端的源码.zip`这个压缩包提供了在Java环境中实现OPC客户端功能的所有必要组件。通过理解和应用这些资源,开发者可以轻松地在Java应用程序中集成OPC通信,...

    Java BBS 轻松实现

    在这个小型论坛项目中,可能会用到Java Servlet、JSP(JavaServer Pages)等技术,它们是Java Web开发的基础,用于处理HTTP请求和生成动态网页。 3. **Servlet技术**:Servlet是Java服务器端程序,主要用来扩展...

    (转)Java使用Apache FtpServer实现嵌入式FTP服务器

    Java使用Apache FtpServer实现嵌入式FTP服务器是一项常见的任务,尤其在开发集成测试或部署自动化流程时。Apache FtpServer是一个开源项目,它提供了一个轻量级且可嵌入的FTP服务器,允许开发者在Java应用程序中直接...

    Java 嵌入apache.ftpserver.FtpServer 实现FTP服务

    Java中的Apache FtpServer库为开发人员提供了一个强大的框架,用于在Java应用程序中轻松地创建和管理FTP服务器。Apache FtpServer提供了丰富的API,可以定制服务器的行为,满足各种需求。本篇文章将深入探讨如何利用...

    JAVA与SQLserver2005数据库连接例子

    总结来说,通过JDBC,Java程序员可以轻松地与SQL Server 2005和Oracle等数据库进行交互,实现数据的读取、写入和管理。"DataBase_Link_Test"压缩包中的示例代码可能会涵盖这些步骤,提供实际的代码示例,帮助初学者...

    SQL Server2008 java的jdbc驱动

    总的来说,SQL Server 2008的JDBC驱动sqljdbc_4.0为Java开发者提供了便捷的手段,使得他们能够轻松地在Java应用中操作SQL Server数据库。了解并熟练掌握JDBC驱动的使用,对于提升Java数据库应用的开发效率至关重要。

    java web 整合开发 完全自学手册 光盘资料 源代码partII

    首先,Java Web开发是基于Java平台进行Web应用程序开发的技术集合,主要包括Servlet、JSP、JavaServer Faces(JSF)、Java Persistence API(JPA)等。这些技术为构建动态、交互式的Web应用提供了强大的支持。 ...

    基于Java的为APP开发HTTP API应用的脚手架模板

    本文将深入探讨一个基于Java的为APP开发HTTP API应用的脚手架模板,这是一种预先配置好的框架,旨在加速开发过程,提供标准化的代码结构和最佳实践。 首先,我们来理解“脚手架”一词。在软件开发中,脚手架是一种...

    SQLServer的JAVA数据库驱动包

    总的来说,SQLServer的JAVA数据库驱动包是Java开发者与SQL Server数据库交互的桥梁,通过它可以轻松地在Java应用程序中执行CRUD(创建、读取、更新、删除)操作,进行数据库管理和数据处理。理解和熟练使用这些驱动...

    java+sqlserver的学生成绩管理系统

    总结来说,"java+sqlserver的学生成绩管理系统"利用Java的编程优势和SQLServer的数据处理能力,构建了一个实用的教育管理工具,它不仅可以帮助教育机构更好地管理和分析学生成绩,也为未来类似的系统开发提供了参考...

    Linux下JAVA开发环境的搭建

    Linux 下 JAVA 开发环境的搭建 Linux 下 JAVA 开发环境的搭建是指在 Linux 操作系统中安装和配置 Java 开发环境,包括安装 JDK、...通过本文的指导,读者能够轻松地搭建 JAVA 开发环境,并开始开发 Java 应用程序。

Global site tag (gtag.js) - Google Analytics