您的位置:首页 > 理论基础 > 计算机网络

Hadoop的砖块们--第2章 HttpServer, Jetty, Servlet

2013-12-01 13:14 429 查看
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
http://download.eclipse.org/jetty/7.6.12.v20130726/dist/
把压缩包解压缩到任意一个目录,诸如“/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 http://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/9.1.0.v20131115/jetty-all-9.1.0.v20131115.jar
 http://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/ wget -O servlet-api.jar -U none http://repo1.maven.org/maven2/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar[/code] 
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("<h1>HelloWorld</h1>");

}

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的容器。

6.Servlet是什么

http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
Servlet是JavaWeb技术的核心基础。

http://www.ibm.com/developerworks/cn/education/java/j-intserv/index.html

http://www.iteye.com/topic/766418
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息