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

原创
2017/01/17 09:24
阅读数 32

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


2.哪里用到了HttpServer?

NameNodeDataNodeJobTrackerTaskTrackr都用到了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”,即可看到jettyweb界面。


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


JavaJDK1.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的其他文档有更详细地说明了嵌入式开发的各种功能。


Jettyservlet的容器。



6.Servlet是什么


http://www.ibm.com/developerworks/cn/java/j-lo-servlet/

ServletJavaWeb技术的核心基础。


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


http://www.iteye.com/topic/766418

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部