Java实现WebServices不需要Web 应用服务器
近日来,在社区内浏览了一部分关于Java来实现WebServives的帖子,发现其中90%以上都有这样一步操作
首先在进行webservice 一定要下载Axis安装包。。。
将某某文件配置到%TOMCAT_HOME%\webapps\axis\WEB-INF。。。
然后在web.xml 加上。。。
实际上这种做法本身没有错,但是却扼杀了WebServices的诸多优点。那么让我们从头了解一下什么是WebServices吧。
百度百科中写道:
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web
应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
在构建和使用Web Service时,主要用到以下几个关键的技术和规则:
1.XML:描述数据的标准方法.
2.SOAP:表示信息交换的协议.
3.WSDL:Web服务描述语言.
4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。 实际上,WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。
长项一:跨防火墙的通信
长项二:应用程序集成
长项三:B2B的集成
回到标题我所说的,WebServices真的一定必须要什么Jar包吗?需要插件么?实际上webservice实现有多种方式比如最常用的有axis框架,xfire框架,通过该框架可以发布wsdl接口,也可以实现webservice客户端,目前eclipse都有集成的插件,可以根据wsdl文件生成webservice客户端调用接口,但是这样部署的时候必须依赖框架的jar包,有时候可能因为环境等等原因,我们仅仅需要wsdl中的某一个接口,这时候可以通过http接口或socket接口直接发生xml数据,来调用服务端webservice服务,其实webservice底层还是发送xml数据,只是框架封装了对xml数据进行序列化与反序列化操作,下面以两个简单的例子说明http方式和socket方式。
第一个例子:http实现webservice接口调用例子:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class HttpPostTest {
void testPost(String urlStr) {
try {
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
con.setDoOutput(true);
con.setRequestProperty("Pragma:", "no-cache");
con.setRequestProperty("Cache-Control", "no-cache");
con.setRequestProperty("Content-Type", "text/xml");
OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
String xmlInfo = getXmlInfo();
out.write(new String(xmlInfo));
out.flush();
out.close();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = "";
StringBuffer buf = new StringBuffer();
for (line = br.readLine(); line != null; line = br.readLine()) {
buf.append(new String(line.getBytes(),"UTF-8"));
}
System.out.println(buf.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getXmlInfo() {
// 通过wsdl文件可以查看接口xml格式数据,构造调用接口xml数据
String xml = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
+ "<SOAP-ENV:Body>"
+ "<m:getItemDetailSingle xmlns:m=\"http:xxxxxxxxxxxxxxxxxx/\">"
+ "<itemMo>"
+ "<category>政务域名</category>"
+ "<city>北京西坝河北里</city>"
+ "<flag>3</flag>"
+ "<itemId>10</itemId>"
+ "<itemIndex>22</itemIndex>"
+ "<keyword>朝阳区</keyword>"
+ "<mobile>139-0111-1111</mobile>"
+ "<password>iteyePl</password>"
+ "<userName>hwak</userName>"
+ "</itemMo>"
+ "</m:getItemDetailSingle>"
+ "</SOAP-ENV:Body>"
+ "</SOAP-ENV:Envelope>";
return xml;
}
public static void main(String[] args) throws UnsupportedEncodingException {
String url = "http://localhost:9999/dataService/services/Job";
new HttpPostTest().testPost(url);
}
}</PRE>
第二个例子:socke方式实现例子:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebServiceClient {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost",9003);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
//System.out.println(socket.isConnected());
String httpSend = "POST /dataService/services/Job HTTP/1.1\r\n"
+ "Content-Type:text/xml\r\n"
+ "Host:localhost:9003\r\n"
+ "Content-Length:1024\r\n"
+ "\r\n"
+ "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
+ "<SOAP-ENV:Body>"
+ "<m:getItemDetailSingle xmlns:m=\"http://localhost/\">"
+ "<itemMo>"
+ "<category>工厂类</category>"
+ "<city>北京</city>"
+ "<flag>1</flag>"
+ "<itemId>0</itemId>"
+ "<itemIndex>1</itemIndex>"
+ "<keyword>String</keyword>"
+ "<mobile>2147483647</mobile>"
+ "<password>123456</password>"
+ "<userName>sohu</userName>"
+ "</itemMo>"
+ "</m:getItemDetailSingle>"
+ "</SOAP-ENV:Body>"
+ "</SOAP-ENV:Envelope>";
os.write(httpSend.getBytes());
os.flush();
InputStreamReader ireader = new InputStreamReader(is);
java.io.BufferedReader breader = new java.io.BufferedReader(ireader);
String responseLine = "";
while((responseLine = breader.readLine()) != null)
{
System.out.println(new String(responseLine.getBytes(),"UTF-8"));
}
System.out.println("");
}}
以上两个例子我们可以看出,Java来实现WebServices的时候Web应用服务器不是必须的,希望各位同学能够因地制宜好好的利用WebServices所提供的各种优势,我们要不仅会做,还要善于做!
分享到:
相关推荐
JAVA访问WebServices接口的简单实例,android可用
6.2 部署@webservices和@webserviceproviders 244 6.3 整合一个交互式网站和web服务 250 6.4 将@webservice作为一个ejb实现 252 6.5 java web服务和java消息服务 262 6.6 基于glassfish ws-security 265 6.7 jas部署...
使用Java Web Services技术 创建一个待办事项管理系统。不同的客户应该能够连接到一个服务器管理各种待办事项列表对象,比如查询列表项,添加列表项,删除列表项,明确待办事项列表。服务器应该也有管理功能,允许...
net去调用java端写的https webservices 1)浏览器导入服务器cer证书 2)c#客户端引入证书
net去调用java端写的https webservices 1)浏览器导入服务器cer证书 2)c#客户端引入证书
使用webservice实现的客户端及服务器,通过接口远程调用服务器端方法。
这种驱动直接把JDBC调用转换为符合相关数据库系统规范的请求,由于四代驱动写的应用可以直接和数据库服务器通讯,这种类型的驱动完全由Java实现,对于本地协议驱动的数据库Server来说,由于这种驱动不需要先把JDBC的...
最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台、传输数据格式...
lucee服务器(简称lucee)是一种动态的、基于java的标记和脚本语言,用于快速的web应用程序开发。
Assessment_WebServices_JAVAStreams RESTful Web服务和Java Streams实现具有解决问题的需求。 Domain Runner的第一次评估用于根据提供的输入来计算域的出现:-输入输入列表的大小,以emailId(即 )格式输入值。 ...
包括客户端是java project, cxf_010 服务器端是个web程序cxf_web_010. 其中客户端的com.dx.client 包下的代码是通过wsdl2java的命令生成,复制到客户端中程序中去的。 附上我的博客地址...
该库的预期用途Google Maps Services的Java客户端设计用于服务器应用程序。 由于可能丢失API密钥,因此该库不适用于Android应用程序。 如果您要构建移动应用程序,则需要引入代理服务器,以充当移动应用程序和之间的...
java写的客户端调用c#写的服务器端的程序
project_webservices_uninorte 使用SOA和WebServices模块的Web服务进行项目开发-Post-Uninorte脚步服务器-Java桌面更改服务器URL时,必须重新编译服务器和客户端。生成服务器类wsgen -cp bin -s src -wsdl br....
Java Connectors (Adapters) 对应服务器 Apache Tomcat, IBM WebSphere and WebLogic all support static contents ISAPI modules specifically used to handle dynamic content do not act as individual services ...
使用Java Web Services技术 创建一个待办事项管理系统。不同的客户应该能够连接到一个服务器管理各种待办事项列表对象,比如查询列表项,添加列表项,删除列表项,明确待办事项列表。服务器应该也有管理功能,允许...
XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object ...
JClass ServerReport 不需要添加报表生成引擎,可以完全在您的J2EE应用程序服务器内工作,从而能更加灵活的平衡和提供应用程序加载。如今已完全支持XML和Web Services。 并且提供一个所见即所得的报表生成器(见...
不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的...
本文将介绍如何使用Spring创建Java实现的服务器端RESTful Web Services。这个例子将使用浏览器、curl和Firefox插件RESTClient作为发出请求的客户端。 本文假定您是熟悉REST基本知识的。 Spring 3的REST支持 ...