文档章节

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

brian_2017
 brian_2017
发布于 2017/01/17 09:24
字数 526
阅读 9
收藏 0

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

© 著作权归作者所有

brian_2017
粉丝 3
博文 61
码字总数 145216
作品 0
私信 提问
在 Jetty 7 中启用 JSP 支持功能

Jetty 转到 Eclipse 下麻烦就来了,一个堂堂的 Java 应用服务器居然默认不支持 JSP 。 还需要以下几个麻烦的步骤才行: 1. 下载 Jetty 6 的压缩包 2. 将 Jetty 6 下的 jsp 2.1 目录下的文件复...

红薯
2010/04/25
5.1K
3
在应用程序中嵌入HTTP服务引擎

不久前我的一篇文章《在应用程序中嵌入数据库功能》发表在IBM的developerWorks网站上,有很多读者来信表示了对题目的极大兴趣以及 探讨相关的一些细节。那篇文章介绍的是通过嵌入数据库的服务...

红薯
2008/10/05
1K
0
maven-jetty-plugin插件的配置

Xml代码 <build> <finalName>rop-sample</finalName> <plugins> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version......

stamen
2015/08/21
125
0
JETTY嵌入式Web容器的开发(一)---基础开发

qiuJETTY嵌入式Web容器的开发(一)---基础开发 JETTY嵌入式Web容器体积小,启动速度快,性能好,免费开源,是一款很适合开发调试和简单演示的轻量级Web容器. 而且它的嵌入式的特点,使得开发者可以...

小工匠go
2013/08/26
726
0
tomcat启动访问不到controller中的方法

eclipse开发的java项目,在本地eclipse上用jetty可以正常使用。然后发布到tomcat上,只能访问项目的静态资源,但是动态地址,controller中的方法就访问不了,一直404.不知是什么原因?web.x...

安静的敲代码
2016/04/15
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
57分钟前
2
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
4
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部