在JAX-WS 中实现多个Service间会话保持( 1 )

泛微OA E9 WebServices 接口开发:从 JAX-WS 注解到 services.xml 配置的 3 个关键步骤 本文详细解析了泛微OA E9 WebServices接口开发的完整流程,从JAX-WS注解实践到services.xml配置的3个关键步骤,涵盖接口定义、实现类编写、服务部署与验证等核心环节。特别针对二次开发场景,提供了性能优化与安全实践方案,帮助开发者高效完成WebServices接口的创建发布。 阅读详情

笔者前言:笔者是想着用CXF来开发点东西的,没想到比AXIS2的会话管理曲折那么多。可能是笔者对基本的规范和协议不甚了解吧。以下部分转贴,代码基本是笔者改写的。即使如此,笔者认为还是标题为转贴内容吧。


一。前言

本文不是JAX-WS的入门文档,如需了解JAX-WS,请参阅其它文章。

WebService为客户端与服务器沟通提供了非常良好的开发体验,由其在Java中体现尤为明显。JAX-WS是Java世界里一个非常优秀的WebService开发工具,通过采用JAX-WS,开发人员可以用非常简单的方式从客户端调用服务器开放的服务。

在采用C/S模式开发的时候,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,这就需要在这几次交互过程中保持会话状态。

基于HTTP的应用开发中,要在多个调用之间保持会话状态,通常可以采用以下几种方式:

l URL重写,把要传递的参数重写在URL中; 

l 使用Cookie,把要传递的参数写入到客户端cookie中; 

l 使用隐含表单,把要传递的参数写入到隐含的表单中; 

l 使用Session,把要传递的参数保存在session对象中(其实Session机制基于cookie或者URL重写)。 

上面几个方式有一个共同点:把要传递的参数保存在两个页面都能共享的对象中,前一个页面在这个对象中写入状态、后一个页面从这个对象中读取状态。特别是对于使用session方式,每个客户端在服务端都对应了一个sessionid,服务端维持了由sessionid标识的一系列session对象,而session对象用于保持共享的信息

上述保持会话状态的方式,较常用的是服务器Session技术。服务端程序通过调用session.setAttribute(key,value) 和 session.getAttribute(key) ,在多次交互过程中保持会话状态。另外,为了保持会话,客户端也要做一些相应的工作。下面将从两个方面讨论在使用JAX-WS的项目中,如何才能保持会话状态。


二。服务器端代码

2.1 WEB SERVICE(HelloWorld) 

package com.zx.cxf.service;  

import java.util.Date;  
import java.util.List;  

import javax.jws.WebParam;  
import javax.jws.WebService;  

//注解生命此为WEBSERVICE
@WebService  
public interface HelloWorld {  
	//接受HTTP传过来的参数TEXT为这个方法的参数值
    String sayHi(@WebParam(name = "text") String text);  

    Date curDate();  

    List<Long> addNumber(@WebParam(name = "addToNum") Long num);  
}  

2.2接口的实现(HelloWorldImpl)
package com.zx.cxf.service;  

import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  

import javax.annotation.Resource;
import javax.jws.WebMethod;  
import javax.jws.WebParam;  
import javax.jws.WebService;  
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.springframework.beans.factory.annotation.Autowired;

@WebService(endpointInterface = "com.zx.cxf.service.HelloWorld", serviceName = "HelloWorld")  
public class HelloWorldImpl implements HelloWorld {  
    private List<Long> localNumbers; 
    //通过注解,自动注入如下需要用到的变量(没用到setter方法哦.不过没错误)
    @Resource
    private WebServiceContext context;
    private HttpServletRequest request;
    
    //通过注解,声明定义一些列WEBSERVICE的东西.笔者忘记怎么说了,详细调查后补上
    @WebMethod(operationName="sayHello",action="hello")  
    public String sayHi(@WebParam(name = "text") String text) {  
    	//获得MessageContext上下文,在WEBSERVICE中,是用这个上下文的.
    	MessageContext ctx = context.getMessageContext();
    	/*HttpServletRequest request = (HttpServletRequest)
    	ctx.get(AbstractHTTPDestination.HTTP_REQUEST);*/
    	
    	//获得HTTP的SESSION
    	HttpSession session =((javax.servlet.http.HttpServletRequest)ctx.get(MessageContext.SERVLET_REQUEST)).getSession();
    	//这只是一个统计变量
    	Integer count = (Integer)session.getAttribute("count");
    	String change = null;
    	/**
    	 * 判断客户端是第几次访问,用以测试SESSIONID究竟有没改变.
    	 * 这是配合客户端中,对多个SERVICE中保持会话状态的测试.
    	 * 这2种测试,在客户端代码中会注解说明.
    	 */
    	if(count == null){
    		session.setAttribute("count", 1);
    	}else{
    		count++;
    		if(count >= 2)
    			change = "你是第二次访问了";
    	}
    	
    	
    	//HttpSession session = request.getSession();
        return "Hello " + text + "sessionID: "+session.getId()+"   "+change;  
    }  
    @WebMethod(exclude=true)  
    public Date curDate() {  
        return new Date();  
    }  

    public List<Long> addNumber(@WebParam(name = "addToNum") Long num) {  
        if (localNumbers == null) {  
            localNumbers = new ArrayList<Long>();  
        }  
        localNumbers.add(num);  
        return localNumbers;  
    }  
    public void setRequest(HttpServletRequest request){
    	this.request = request;
    }
}  

2.3补发SPRING的配置代码

<?xml version="1.0" encoding="UTF-8"?>    
    
<!-- START SNIPPET: beans -->    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xmlns:jaxws="http://cxf.apache.org/jaxws"    
    xsi:schemaLocation="     
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd     
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">    
    
    <import resource="classpath:META-INF/cxf/cxf.xml" />    
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />    
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />    
    
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 
    <bean id="serverPasswordCallback" class="cxf.server.ServerPasswordCallback" />
    <!--<jaxws:endpoint      
      id="helloWorld"      
      implementor="com.zx.cxf.service.HelloWorldImpl"      
      address="/HelloWorld" >
      -->
      <jaxws:endpoint      
      id="helloWorld"          
      address="/HelloWorld" >
      <jaxws:implementor>
            <bean class="com.zx.cxf.service.HelloWorldImpl"></bean>
      </jaxws:implementor> 
      <!--<jaxws:inInterceptors>  
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />  
             SAAJInInterceptor只在CXF是2.0.X版本时或之前版本时才是必须的   
             <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>   
            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">  
                <constructor-arg>  
                    <map>  
                        <entry key="action" value="UsernameToken" />  
                        <entry key="passwordType" value="PasswordText" />  
                         <entry key="user" value="FHDServer" />   
                        <entry key="passwordCallbackRef">  
                            <ref bean="serverPasswordCallback" />  
                        </entry>  
                    </map>  
                </constructor-arg>  
            </bean>  
        </jaxws:inInterceptors> 
      
      --></jaxws:endpoint>  
          
</beans>    
<!-- END SNIPPET: beans -->  


三。客户端代码

3.1 在单个SERVICE中保持会话状态的客户端代码

package clients;

import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;

import com.zx.cxf.handle.Myhandle;
import com.zx.cxf.service.HelloWorld;
import com.zx.cxf.service.HelloWorld_Service;

public class TestHello {
	private static final QName SERVICE_NAME = new QName("http://service.cxf.zx.com/", "HelloWorld");
	public static final Myhandle handler = new Myhandle();
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		URL wsdlURL = HelloWorld_Service.WSDL_LOCATION;
		HelloWorld_Service ss = new HelloWorld_Service(wsdlURL, SERVICE_NAME);
        HelloWorld port = ss.getHelloWorldImplPort();
        
        //这是使用BindingProvider设置在此次访问中,对于SESSION进行保留
        ((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        //((BindingProvider)port).getRequestContext().put("thread.local.request.context", true);
     
        //测试会发现2此的打印的SESSIONID都是一样的,如果不是用以上BindingProvider的话,SESSIONID是不一样的。
        //因为客户端对于WEB SERVICE访问,没特殊设置每次的访问都是新访问,服务器都会建立新的会话。
        System.out.println(port.sayHi("sonx"));
        Thread.currentThread().sleep(3000);
        System.out.println(port.sayHi("sonx"));
	}

}

3.2在多个SERVICE中保持会话。

3.2.1 声明一个实现SOAPHandler接口的类:

package com.zx.cxf.handle;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class Myhandle implements SOAPHandler<SOAPMessageContext> {
	
	private List cookie = null;
	
	public Set<QName> getHeaders() {
		// TODO Auto-generated method stub
		return null;
	}

	public void close(MessageContext context) {
		// TODO Auto-generated method stub
		
	}

	public boolean handleFault(SOAPMessageContext context) {
		// TODO Auto-generated method stub
		return false;
	}

	public boolean handleMessage(SOAPMessageContext context) {
		try {
			//获得当前调用方向
			Boolean out = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
			if(!out){//响应
				Map<String, List<String>> responseHeaders = (Map<String, List<String>>) context.get(MessageContext.HTTP_RESPONSE_HEADERS);
				List<String> c = responseHeaders.get("Set-cookie"); //sessionid在该域中
				if(cookie==null && c!=null){ //这是第一次HTTP调用,cookie刚刚得到
					cookie = c;        //保存该cookie
				}else{
					System.out.println("DEBUG: 现在不是第一个调用HTTP了.因此COOKIE早已存在.");
				}
			}else{ //请求
				//获取请求上下文
				java.util.Map<String, List<String>> requestHeaders = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
				if(requestHeaders==null){ //请求上下文可能为空,构造一个新的即可
					requestHeaders = new HashMap<String, List<String>>();
					//将一个空的请求上下文设置到SOAPMessageContext中
					context.put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);
					//设置该请求上下文全局有效
					context.setScope(MessageContext.HTTP_REQUEST_HEADERS, MessageContext.Scope.APPLICATION);
				}
				//如果已经获得了sessionid,将该sessionid设置到请求上下文中即可
				if(cookie!=null){
					requestHeaders.put("cookie", cookie);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return true;//返回true,意味着其它Handler也可以被调用
	}

}

3.2.2在客户端中调用HANDLER来完成多个SERVICE间的会话保持
package clients;

import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;

import com.zx.cxf.handle.Myhandle;
import com.zx.cxf.service.HelloWorld;
import com.zx.cxf.service.HelloWorld_Service;

public class TestHello {
	private static final QName SERVICE_NAME = new QName("http://service.cxf.zx.com/", "HelloWorld");
	public static final Myhandle handler = new Myhandle();
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		URL wsdlURL = HelloWorld_Service.WSDL_LOCATION;
		HelloWorld_Service ss = new HelloWorld_Service(wsdlURL, SERVICE_NAME);
        HelloWorld port = ss.getHelloWorldImplPort();
        
        //((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        //((BindingProvider)port).getRequestContext().put("thread.local.request.context", true);
        
        //调用到了我们之前声明的HANDLER了哦。实现多个SERVICE间的会话保持。
        Binding binding  = ((BindingProvider) port).getBinding();
        List<Handler> handlerList = binding.getHandlerChain();//获得Handler链
        if (!handlerList.contains(handler)) {//防止重复插入Handler
        	handlerList.add(handler);
        	binding.setHandlerChain(handlerList);
        }
        
        System.out.println(port.sayHi("sonx"));
        Thread.currentThread().sleep(3000);
        System.out.println(port.sayHi("sonx"));
	}

}


四。笔者后言

以上多为实现为主,注释也加上了。当然中间一些理论性的解释并没有,因此这里给读者一个传送门。

这是笔者拜读后完成的。两两结合,大家花点时间,应该可以明白的了。CXF使用JAX-WS,我不知道AXIS2的原理是什么,感觉封装性比CXF更强。

不过灵活性感觉没CXF强。想独立把AXIS2拿出来结合到已有的WEB项目中,也很麻烦。可能是我没弄清楚吧。

传送门:http://blog.youkuaiyun.com/ts1990421/article/details/6804933

对了,以上的客户端代码只是对同一个SERVICE进行测试,不作得准。笔者已经写好了2个SERVICE的测试了代码了。迟点贴上。

WebService(一):工作原理 一、WebServiceWebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用.二、三要素WebService的三要素是: SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。 WSDL (WebServices Description La... 阅读详情

相关推荐

LTspice仿真三线制PT100高精度测温系统设计

本文详细介绍了如何使用LTspice仿真设计三线制PT100高精度测温系统。文章从三线制原理出发,逐步讲解了在LTspice中建模PT100、构建惠斯通电桥进行信号转换、设计差分放大与滤波电路、选型ADC以及进行系统联调与误差分析的全过程,旨在帮助工程师实现0.5°C分辨率的工业测温方案设计。

pz89012345的博客 98

spring整合cxf 使用jax-ws规范实现webservice功能

一.新建服务端 新建项目:spring-jax-ws-server 1.pom文件的编写: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

健康平安的活着的专栏 1454

用C#语言实现记事本

本次程序设计作业为用C#语言设计一个记事本,设计的记事本应与电脑系统自带的记事本类似,最后实现的界面及功能应类似于下图。

qq_57738695的博客 2847

webservice 保留状态

简介   有许多聪明的办法可以解决HTTP协议的无状态问题,例如对每个请求重复发送应用程序数据包、使用HTTP认证机制来将请求映射到特定的用户、使用Cookie来存储一系列请求的状态等。在ASP.net技术中提供了一个非常有效的方案来保持状态,该方案隐藏了所有高难度的,具有挑战性的工作的细节,用户只需简单地使用System.Web.SessionState.HttpSessionState类。同

未来软件 1199

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1846

通信工程学习:什么是OLT光线路终端

OLT(光线路终端)是无源光网络(PON)的核心局端设备,负责光/电信号转换、数据处理、带宽分配及用户管理。具有高带宽、低损耗、高安全性和易维护等技术特点,广泛应用于家庭、企业及公共机构宽带接入。未来将向更高性能、智能化方向发展,结合SDN/NFV等新技术,提升网络服务质量。

limengshi138392的博客 4360

Web Service Context示例

Web service context指Endpoint之间传输的消息。Context内容以键值对格式(Map)进行存储,包括incoming和outgoing Message.   CXF提供了访问上下文数据的对象:javax.xml.ws.handler.MessageContext,而MessageContext与Message所在的 Scope有关: Application Sc...

SpringsSpace 974

华为OD机考双机位C卷 - 最左侧冗余覆盖子串 (Java)

华为OD机考双机位C卷 - 最左侧冗余覆盖子串 (Java), 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 58

spring 整合cxf批量发布多个接口

spring 整合webService后需要在spring-cxf中配置需要发布的接口,配置如下: <bean id="DemoServiceBean" class="com.app.ahnyapp.cxf.impl.DemoServiceImpl"> </bean> <!-- #DemoService是和你的实现类上...

wuyu5649的博客 1318

ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

文章目录一、前言二、WiFi配网方式三、快速运行四、运行效果五、ESP32-C3程序流程5.1 主程序5.2 回调函数5.3 SmartConfig线程5.4 流程图六、关键函数6.1 设置SmartConfig的协议类型6.2 启动SmartConfig6.3 停止SmartConfig七、其他八、参考 一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 二、WiFi配网方式 W

7765

OpenClaw(Clawdbot/Moltbot)如何正确的配置浏览器,实现对浏览器的自动化操作功能(浏览器状态为running:false怎么办)

OpenClaw(Clawdbot/Moltbot)浏览器自动化功能无效?🤖 本文详细介绍如何解决这个问题🔧,让你的OpenClaw(Clawdbot/Moltbot)真正具备"睁眼看世界"的能力,支持网页搜索、点击操作和截图等功能 ✅

XiaoqiangClub的博客 8109

使用cxf JaxWsServerFactoryBean发布webservice服务

发布服务的代码如下,其余代码和。

m0_74295055的博客 468

人工智能在慢病管理中的具体应用全集:从技术落地到场景创新

这一成果的取得,得益于 AI 对居民血压数据的实时监测和分析,以及及时的干预措施。据统计,医疗支出下降了 18%,这主要是由于 AI 慢病管理系统实现了对慢病患者的早筛早诊早治,减少了并发症的发生,降低了医疗资源的浪费,从而减轻了患者和社会的医疗负担。医院信息系统(HIS)、电子病历(EMR)、区域卫生平台、可穿戴设备(如三诺血糖仪、华为手环)、第三方健康APP以及体检中心的数据往往采用不同的数据标准和格式(如HL7、FHIR、JSON、CSV等),且存储在相互隔离的系统中,形成典型的数据孤岛。

AllenLV的博客 2093

(转)在JAX-WS 中实现多个Service间会话保持

在JAX-WS 中实现多个Service间会话保持 作者:刘嘉欣 南开大学信息学院 liujx@nankai.edu.cn 在JAX-WS 中实现多个Service间会话保持 1 服务器端 1 客户端 2 1.在同一个Service的不同调用之间保持会话 2 2.

半天想不出来 2353

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在JAX-WS 中实现多个Service间会话保持

在JAX-WS中实现多个Service间会话保持 1 服务器端 1 客户端 2 1.在同一个Service的不同调用之间保持会话 2 2.在不同的Service调用时保持会话 3 本文不是JAX-WS的入门文档,如需了解JAX-WS,请参阅其它文章。 WebService为客户端与服务器沟通提供了非常良好的开发体验,由其在Java中体现尤为明显。JAX-WS是Java世界里一个非常优...

weixin_30576827的博客 100

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JAX-WS与JAX-RPC之间是啥关系?

Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java™ 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规范的 Java Community Process (JCP) 人员认识到需要对其进行一些调整,调整的结果就是 JAX-RPC 1.1。该规范使用大约一年之后,JCP

老唐 的专栏 6949

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Web 服务提示与技巧: JAX-RPC 与 JAX-WS 的比较

JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。本文将引出对这两个 Java™ Web 服务编程模型进行比较的一系列文章。引言Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用Java™ 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规

溺水的鱼 - Later equals never. 1049

簡單JAX-WS Web Service使用教學

JAX-WS(Java API for XML Web Services)Web Service是一種由Oracle Sun發展的以XML為基礎的Web Service開發技術。目前已經涵概到Java EE5(含)以上的版本,它可以讓使用者迅速開發Java Web Service,除了採用SOAP(Simple Object Access Protocol)通訊協定和XML資料標準,也支援

xiaoshang的专栏 1442

jax-ws handler client端例子

<br />接着上一篇文章,这里举一个client端handler的例子。<br />先把webservice服务端的代码整个贴一下<br />webservice:<br />import javax.jws.HandlerChain; import javax.jws.WebMethod; import javax.jws.WebService; @WebService @HandlerChain(file="handlers.xml") public class HelloWS {

chyroger的专栏 5751

java jax-ws_Java的开放源WS堆栈-设计目标和理念

java jax-ws 介绍 除了商业供应商提供的选项之外,还有许多开源Java框架可供选择以实现Web服务。 在Java空间中用于实现基于SOAP / WS- *的解决方案的最受欢迎的开源堆栈包括Apache Axis2 , Apache CXF , Spring Web Services , JBossWS和Sun的Metro 。 我向这些堆栈的主要开发人员提出了许多问题,这些问题涉及他...

cunfu6353的博客 863

WebService CXF学习(进阶篇2):JAX-WS讲解

JAX-WS规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。   在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将...

xuzhfa123 148

web service和rpc的区别

Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规范的 Java Community Process (JCP) 人员认识到需要对其进行一些调整,调整的结果就是 JAX-RPC 1.1。该规范使用大约一年之后,JCP 人

qq_24558789的博客 612

Web Service(jsr181)相关

Web服务是一种部署在web上的自描述对象或组件,能够通过一系列的标准协议(如WSDL,SOAP,UDDI)描述、发布、发现、查询和访问   1.       实现技术 axis,xfire 2.       Webservice用到的技术 Xml Soap Rpc Wsdl 3.       Webservice原理及概念 Webservice定义了一套标准的调用过

hanjiaming的专栏 661

java面试题(96~125)《中》

这部分主要是与Java Web和Web Service相关的面试题。96、阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。97、Servlet接口中有哪些方法? 答:Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关: - void init(

ywl470812087的博客 467

IDEA集成WebService实战:从环境配置到接口调用的完整指南

本文详细介绍了在IDEA中集成WebService的完整流程,从环境配置到接口调用的实战指南。涵盖JAX-WS插件安装、Apache Axis框架配置、客户端代码生成及常见问题解决方案,帮助开发者快速掌握WebService开发技巧,提升开发效率。

weixin_28839629的博客 378

Web服务的几种实现方法

我们为什么应该使用基于Document风格的SOAP服务?RPC风格的承前启后性在上节中,我们介绍了RPC和Document风格Web服务的差别。首先,有人可能要问,对RPC和Document wrapped风格的服务来说,我们毕竟只关心要交换消息及它们的WSDL,而不去管它是RPC还是Document风格,所以从这方面说,这两种方法差别不大。实际上,它们之间的差别不在于实际操作中,而更在

carlwu的专栏 4275
上一篇: android初入门工具及配置
下一篇: 常用SQL语句自整理(不定时补全)
ichsonx
博客等级 码龄19年 202粉丝 74原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值