`
school104
  • 浏览: 71481 次
  • 性别: 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源码包实例源码JAVA开发源码55个合集.zip

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

    《JSP程序设计》(Beginning JavaServer Pages)PDF

    JSP(JavaServer Pages)是目前热门的跨平台动态Web应用开发技术。本书由经验丰富的开发人员撰写,是一本通俗易懂的JSP入门书籍。书中主要介绍JSP基础知识、JSP和表达式语言(EL)、JSP标记库和JSTL、JSP指令、JSP和...

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    开源的Java Web应用开发平台

    在线的带语法分析和高亮的Java、JavaScript、ServerScript、SQL编辑器,所见即所得的表单设计器,强大的组件管理器和模块管理器,智能的对象探测器。 企业级的Portal 灵活且易于使用的Portal整合了各方应用,给...

    java源码包4

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时...

    java源码包3

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时...

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

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    java源码包2

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时...

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

    java源码包JSP实例源码JAVA开发源码65个合集: Java自定义光标程序源码.rar Jav动画图标源码(显示GIF图像).rar JLoading Java版的Mp3下载工具.rar JSP 动态数据菜单.rar JSP 学生管理系统(全部代码+数据库).rar ...

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    科研成果申报管理系统(java web+sqlserver)

    操作简单方便,无论是专业人员还是非技术人员,都可以轻松上手。系统始终以为专业人员开发方便、实用的管理平台和为专家教授开发易用的评审平台为目标,注重通过高技术解决实际问题。采用先进的、开放的客户机/...

    YMP轻量级Java应用开发框架 v2.0.6

    YMP是一个非常简单、易用的一套轻量级JAVA应用开发框架,设计原则主要侧重于简化工作任务、规范开发流程、提高开发效率,让开发工作像搭积木一样轻松是我们一直不懈努力的目标!主要技术特点:采用组件化、模块化...

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

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    EfsFrame(java开发框架) v2.2 源代码.rar

    •支持Oracle、SqlServer、MySQL数据库模型,轻松解决跨数据库难题 完善的企业级框架模型,能轻松搭建任何B/S应用底层管理模型 •事务事件管理、单位管理、用户管理、角色权限分配管理 •字典管理、唯一编码分配...

    advanced_programming_with_javaserver_pages.zip

    2) 使用Enterprise JavaBeans,可以轻松地在JSP开发的Web中实现事务、安全、会话等等企业级应用所需要的功能。 3) JDBC2.0提供了不同的数据库产品无关的数据库连接方式,更重要的是,数据库连接池提供了一种比普通...

    Easy do it,轻松互联网开发平台(原WebEasy,简称轻开平台)2015-05-13更新

    轻开平台基于汉语的思维方式并巧妙地结合中英文思维方式的优点设计了一套轻松Easy的开发规则,用java语言开发实现为一个强大的开发平台,为开发者提供了一个直接轻松面向应用的开发环境。 轻开平台同时支持使用多个...

    JAVA性能瓶颈和漏洞检测

    提高JAVA开发效率的JProbe Suite JProbe Suite ——提高开发效率,改善JAVA应用性能 * 轻松发现和消除性能瓶颈 * 查找问题代码 * 节省后续硬件及开发投入 * 增加应用发布信心 * 与开发过程集成,改善应用性能 ...

    OIM服务是采用Java语言开发,基于spring cloud微服务体系开发的一套即时通讯服务端

    OIM服务是采用Java语言开发,基于spring cloud微服务体系...oim-server 可以让你像spring mvc一样开发即时通讯接口,对于有web后台开发经验,没用即时通讯服务端经验开发者,可以 轻松转换,并且兼容spring web接口。

    java开发-apache-tomcat-9.0.80-windows-x64.zip

    apache-tomcat-9.0.80-windows-x64.zip 是 ...用途: Java Web 应用服务器 Apache Tomcat 是一个开源的 Java Servlet 容器,用于实现 Java Servlet 和 JavaServer Pages(JSP)技术。它提供了一个运行 Java Web 环境。

    SOY Framework框架Java RCP编程(一)--配置开发环境

    4.Spring+Hibernate的轻量级架构轻松开发业务逻辑。 5.提升用户体验,提高最终用户满意度,快速开发企业应用。 配置开发环境 1导入开发项目 下载(http://www.soyframework.com)已经配置好的空项目,此空...

Global site tag (gtag.js) - Google Analytics