Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230060
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:27
文章分类
文章存档

2014年(9)

2013年(66)

我的朋友

分类: Java

2013-12-01 15:26:18

1.HttpServer类的代码在core/org/apache/hadoop/http/HttpServer.java


2.哪里用到了HttpServer?
NameNode,DataNode,JobTracker,TaskTrackr都用到了HttpServer。


3.以DataNode节点为例进行说明。
DataNode类定义了HttpServer的实例:
privateHttpServer infoServer = null;


HttpServer的创建,设置,运行,停止流程:
this.infoServer=
newHttpServer("datanode", infoHost, tmpInfoPort,tmpInfoPort == 0, conf, SecurityUtil.getAdminAcls(conf,DFSConfigKeys.DFS_ADMIN))


this.infoServer.addSslListener(secInfoSocAddr,sslConf, needClientAuth);


this.infoServer.addInternalServlet(null,"/streamFile/*", StreamFile.class);
this.infoServer.addInternalServlet(null,"/getFileChecksum/*",
FileChecksumServlets.GetServlet.class);


this.infoServer.setAttribute("datanode",this);
this.infoServer.setAttribute("datanode.blockScanner",blockScanner);
this.infoServer.setAttribute(JspHelper.CURRENT_CONF,conf);
this.infoServer.addServlet(null,"/blockScannerReport",
DataBlockScanner.Servlet.class);


this.infoServer.start();

this.infoServer.stop();






4.HttpServer是对Jetty的简单封装。




5.Jetty的开发


5.1安装Jetty


5.1.1操作系统是Linux,安装JavaJDK。


5.1.2下载Jetty

把压缩包解压缩到任意一个目录,诸如“/home/brian/usr/jetty/jetty-7.6”。


5.1.3运行
在/home/brian/usr/jetty/jetty-7.6目录下执行命令”java-jar start.jar ”
然后在浏览器地址栏输入”localhost:8080”,即可看到jetty的web界面。


5.2嵌入式的Jetty开发


Jetty可以作为单独的进程运行,也可以作为嵌入式的方式进行。Hadoop以嵌入式的方式运行Jetty,封装成HttpServer。


参考文档:http://www.eclipse.org/jetty/documentation/current/advanced-embedding.html


这个文档有点小毛病,下载的路径有问题,建议按照如下方式进行:
mkdir Demo


cd Demo


wget -O jetty-all.jar -U none



wget -O servlet-api.jar -U none


JavaJDK是1.7_u45版本。
jetty是最新的9.1.0版本。


HelloWorld.java源代码如下:


import java.io.IOException;




importorg.eclipse.jetty.server.Request;


importorg.eclipse.jetty.server.Server;


importorg.eclipse.jetty.server.handler.AbstractHandler;




importjavax.servlet.ServletException;


importjavax.servlet.http.HttpServletRequest;


importjavax.servlet.http.HttpServletResponse;






public class HelloWorldextends AbstractHandler{




@Override


public void handle(Stringtarget, Request baseRequest, HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{


response.setContentType("text/html;charset=utf-8");


response.setStatus(HttpServletResponse.SC_OK);


baseRequest.setHandled(true);


response.getWriter().println("

HelloWorld

");


}




public static voidmain(String[] args)throws Exception{


Server server = newServer(8081);


server.setHandler(newHelloWorld());


server.start();


server.join();


}


}




编译:javac-cp servlet-api.jar:jetty-all.jar *.java
运行:java-cp .:servlet-api.jar:jetty-all.jar HelloWorld
然后在浏览器地址栏输入”localhost:8081”,然后回车,即可看到“HelloWorld”。


Jetty的其他文档有更详细地说明了嵌入式开发的各种功能。


Jetty是servlet的容器。
阅读(1404) | 评论(0) | 转发(0) |
0

上一篇:java的file

下一篇:C/C++读取文件

给主人留下些什么吧!~~