请教如何在嵌入式上实现 http server
一、使用SUN公司在JDK6中提供的新包comsunnethttpserver
JDK6提供了一个简单的Http
Server API,据此我们可以构建自己的嵌入式Http
Server,它支持Http和Https协议,提供了HTTP11的部分实现,没有被实现的那部分可以通过扩展已有的Http Server
API来实现,程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求,在这里,我们把一个Http请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange传给HttpHandler实现类的回调方法
实现Http
Server
实现Http
Server比较简单,我就不我做解释,只要看下面的代码就能明白。
实现Https Server
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,SSL
使用证书来进行验证。对于需要使用 SSL 来保证通信安全的客户端和服务器,都必须创建证书。JSSE 使用的证书要用与 J2SE 一起发布的 Java
keytool 来创建。用下列命令来为 HTTP 服务器创建一个 RSA 证书。
prompt> keytool -genkey
-keystore serverkeys -keyalg rsa -alias qusay
这个命令会产生一个由别名 qusay
引用的证书,并将其保存在一个名为 serverkeys
的文件中。产生证书的时候,这个工具会提示我们输入一些信息。
下面代码演示了怎样创建自己的Http Server 和Https
Server:
Java代码
import javaioIOException;
import javaioInputStream;
import javaioOutputStream;
import javanetInetSocketAddress;
import comsunnethttpserverHttpExchange;
import comsunnethttpserverHttpHandler;
import comsunnethttpserverHttpServer;
public class MyHTTPServer {
public static void main(String[] args)
{
try {
//实现HTTP SERVER
HttpServer hs = HttpServercreate(new InetSocketAddress(8888),0);// 设置HttpServer的端口为80
hscreateContext("/hujun", new MyHandler());// 用MyHandler类内处理到/的请求
hssetExecutor(null); // creates a default executor
hsstart();
//实现HTTPS SERVER
HttpsServer hss = HttpsServercreate(new InetSocketAddress(443),0);//设置HTTPS端口这443
KeyStore ks = KeyStoregetInstance("JKS"); //建立证书库
ksload(new FileInputStream("证书名" ), "密码");//载入证书
KeyManagerFactory kmf = KeyManagerFactorygetInstance("SunX509");//建立一个密钥管理工厂
kmfinit(ks, "密码");//初始工厂
SSLContext sslContext = SSLContextgetInstance("SSLv3");//建立证书实体
sslContextinit(kmfgetKeyManagers(), null, null); //初始化证书
HttpsConfigurator conf = new HttpsConfigurator(sslContext);//在https配置
hsssetHttpsConfigurator(conf); //在https server载入配置
hsssetExecutor(null); // creates a default executor
hsscreateContext("/", new MyHandler());// 用MyHandler类内处理到/的请求
hssstart();
} catch (Exception e){
eprintStackTrace();
}
}
}
class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
InputStream is = tgetRequestBody();
String response = "<font color='#ff0000'>come on baby</font>";
tsendResponseHeaders(200, responselength());
OutputStream os = tgetResponseBody();
oswrite(responsegetBytes());
osclose();
}
}
二、使用Jetty
Jetty
是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
需要最少的包:
commons-loggingjar
javaxservletjar
orgmortbayjettyjar
orgmortbayjmxjar
下面直接看代码,以嵌入模式启动Jetty,目前貌似不支持HTTPS
Java代码
import orgmortbayhttpHttpContext;
import orgmortbayhttpHttpServer;
import orgmortbayhttpSocketListener;
import orgmortbayhttphandlerResourceHandler;
public class JettySample {
public static void main(String[] args) throws Exception
{
//创建Jetty HttpServer对象
HttpServer server = new HttpServer();
//在端口8080上给HttpServer对象绑上一个listener,使之能够接收HTTP请求
SocketListener listener = new SocketListener();
listenersetPort(8080);
serveraddListener(listener);
//创建一个HttpContext,处理HTTP请求。
HttpContext context = new HttpContext();
//用setContextPath把Context映射到(/web)URL上。
contextsetContextPath("/web");
//setResourceBase方法设置文档目录以提供资源
contextsetResourceBase("C:\\j2sdk141_05");
//添加资源处理器到HttpContext,使之能够提供文件系统中的文件
contextaddHandler(new ResourceHandler());
serveraddContext(context);
//启动服务器
serverstart();
}
}
Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test
case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。
三、使用tomcat
embedded
1.多平台通用软件
所谓多平台通用软件,就是指这个软件可以在很多系统上使用。例如,如果想让你写的同一个程序很好地运行在DOS、Windows 98、Windows XP、Windows CE、Linux、UNIX等多个操作系统上,C语言确实是个不错的选择。知道Apache吗?它是一个开源Web服务器工程,其中的HTTP服务器可以运行于很多平台,Windows、Linux和UNIX都是可以的,这个服务器就是用C语言开发的。
2.操作系统
由于C语言可以很自然地与汇编语言结合,又比汇编语言好用,能够很灵活地控制计算机硬件,因此很适合开发操作系统。Windows很老的版本都是用C语言写的,之后改用C++了,不过C++是兼容C语言的。Linux和UNIX系列的操作系统内核几乎都是用C语言写的,而且很多运行在板子上的嵌入式操作系统基本都是用C语言结合汇编写的。如果你真想做个操作系统,C语言绝对可以胜任。
3.复杂运算软件
之所以说C语言适合进行复杂计算软件的开发,是因为:(1)复杂计算软件本身很单纯,只需要计算机进行计算就可以了;(2)C语言本身有丰富的运算功能,完全可以实现复杂计算功能;(3)因为C语言是一种接近底层语言的高级语言,所以它写出来的程序在计算机上的运行效率很高。所以,要想做一个需要复杂而高效计算功能的软件,选择C语言绝对不会令你失望的。如果你经常做科学计算,用过MATLAB软件,它其中一部分也是用C语言写的。
1 C++当然可以实现webservice,这是毋庸置疑的axis2你知道吗本质是运行在tomcat下的一个servlet,分java版本,和C语言版本官方网站为:http://axisapacheorg/,首页上写着:
The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services
Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below 大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service而C++完全是兼容C的
2 当然需要服务器,可能要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议
3 你的问题有问题,js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中而web service之间的通讯才可能用得到SOAP
4 PHP调用web service是非常简单的,貌似有个函数通过SOAP调用C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用
PS1:我没有做过C++的Web service,只做过java的,但是所有语言都是相同的,基本原理都是一样的,另外web service最好的做法是对外隐藏的,不能直接调用,应该有个类似调度中心的存在来负责调用,这是一个设计方式 当然直接调用也是可以的,但这种方式效率不高
PS2:C++可以做web service,但不是很好,缺乏技术支持,软件支持,虽然管道过滤器模型不限制过滤器的实现方式,但怎么说呢,C++就是不适合,毕竟和其他构件存在配合问题,而且开发成本也会相对要高点 现在主流的是C#和JAVA
tomcat6是一款Web应用服务器,此软件将拥有最先进的良好的性能,并且完美免费使用,用户使用起来也没有特别难度,有着强大的服务器搭建功能,轻松打造出私人服务器。对这款软件有兴趣的话,不妨快来试试吧。
tomcat6特色:
1、轻巧稳定
小型轻巧的服务器环境可提供更稳定的性能。
2、开发与调试
可用于诸如Web程序开发和调试之类的详细任务。
3、强大的可扩展性
缩放性能非常好,并且有更实用的方法。
4、占地面积小
占用更少的系统资源并且流利。
5、操作方便
人性化的操作模式,提供更便捷的管理体验。
tomcat6亮点:
1、独特的功能,例如Tomcat管理和控制平台,安全域管理和Tomcat阀门等。
2、本身还包括一个HTTP服务器,因此您也可以将其视为单独的Web服务器。
3、包括配置管理工具,也可以通过编辑XML格式的配置文件进行配置。
4、这是由Apache Software Foundation下的Jakarta项目开发的Servlet容器。
5、服务器是用C语言实现的HTTP Web服务器,并且这两个HTTP Web服务器未捆绑在一起。
tomcat6使用方法:
1、右键计算机,选择“属性”→ “高级系统设置”,切换到“高级”选项卡,点击右下角的“环境变量”
2、选择下半部“系统变量”新建,在弹出的新建系统变量提示框:
变量名:CATALINA_HOME
变量值:tomcat60的安装目录:C:\Program Files\Apache Software Foundation\Tomcat 60
点击“确定”
3、找选中Path变量,点击右下角“编辑”,在最后面加上tomcat60的安装目录下的bin目录:C:\Program Files\Apache Software Foundation\Tomcat 60\bin
4、一路“确定”退出环境配置
5、进入浏览器输入“localhost:8080”,出现下图界面则配置成功
连上wifi,猛击按钮!免费下载安装tomcat60,更多精彩尽在侠丐手游网!
tomcat6安装教程:
1、解压文件,双击exe程序开始安装ps:确保JDK已安装好且环境变量已配置好
2、进入tomcat的”欢迎安装“的界面,点击“Next”按钮,以便继续安装
3、进入到“License Agreement”界面,点击“I Agree”按钮,以同意安装协议
4、进入到“Choose Components”界面,选择组件,一般默认即可,然后点击“Next”按钮
5、进入到“Configuration”配置界面,一般默认即可,当然在这里你也可以改端口号为80,一般网站最后都将端口号设置为80,然后点击“Next”按钮
6、进入到“Java VirtualMachine”界面,默认已经找到JRE的路径,如果没找到或路径错误可以手动配置JRE的路径,然后点击“Next”按钮
7、进入到“Choose Install Location”选择安装路径,默认是安装在C盘的,可以自行改之,然后点击“Install”按钮
8、等待安装,直至进度条满格
9、最终进入”安装完成“界面,点击“Finish”按钮即可完后安装,默认开始运行程序
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。
HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP协议进行通信的HTTP的实现程序。
HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、crul等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。
HTTP诞生之初主要是应用于WEB端内容获取,那时候内容还不像现在这样丰富,排版也没那么精美,用户交互的场景几乎没有。
对于这种简单的获取网页内容的场景,HTTP表现得还算不错。但随着互联网的发展和WEB2.0的诞生,更多的内容开始被展示(更多的文件),排版变得更精美(更多的CSS),更复杂的交互也被引入(更多的jS)。用户打开一个网站首页所加载的数据总量和请求的个数也在不断增加。
0条评论