设为首页 收藏本站
查看: 300|回复: 0

[经验分享] java轻松开发http server

[复制链接]

尚未签到

发表于 2016-11-7 09:52:00 | 显示全部楼层 |阅读模式
转载: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.isFile()?"F":"D");
          sb.append("</td><td><a xhref=");
          sb.append(reqURI);
          sb.append(fileList.getName());
          sb.append(">");
          sb.append(fileList.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();
  }  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296897-1-1.html 上篇帖子: 连接SQL Server2005失败:error40;无法打开到SQL Server的连接,设置了Tcp/IP等也不能连接的问题. 下篇帖子: sql恢复,sql数据库恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表