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) |