文档章节

webservice(五) web项目发布webservice

静水楼台
 静水楼台
发布于 2017/04/13 12:42
字数 1232
阅读 14
收藏 0

1.web项目中发布webservice

步骤:

1.编写服务类

   分为带接口的服务类和不带接口的服务类。当然推荐使用带接口的服务类

2.在web.xml文件中配置所需的servlet:

   org.apache.cxf.transport.servlet.CXFServlet

3.提供一个spring配置文件:cxf-servlet.xml

   该文件的路径需要在web.xml中配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name></display-name>

	<listener>	
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 配置CXFServlet -->
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
      <!--以下代码可以放到 context-param中,则启动时就会加载。放在servlet中只会访问servlet时加载 -->
		<init-param>
			<!-- 配置spring的配置文件 -->
			<param-name>config-location</param-name>
			<param-value>/WEB-INF/cxf-servlet.xml</param-value>
		</init-param>
	</servlet>
	<!-- 配置所有的ws访问的路径 -->
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/ws/*</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>


启动时加载用以优化

说明:以上配置会再首次访问servlet时才加载cxf-servlet.xml文件,效率较低。可以启动服务器时就加载cxf-servlet.xml文件。

做法:将servlet中的初始化参数init-param移到<context-param>中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name></display-name>

	<listener>	
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 该配置是下面CXFServlet配置文件中init-param中移上来的,加快访问速度 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/cxf-servlet.xml</param-value>
	</context-param>

	<!-- 配置CXFServlet -->
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	</servlet>
	<!-- 配置所有的ws访问的路径 -->
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/ws/*</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

1.不带接口服务类

服务类:

@WebService
//@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
public class HelloService {
	
	public String sayHi(String name) {
		String s = "hello " + name;
		return s;
	}
}


cxf-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
	xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
          	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://cxf.apache.org/jaxrs 
            http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/jaxws 
            http://cxf.apache.org/schemas/jaxws.xsd
            http://cxf.apache.org/core 
            http://cxf.apache.org/schemas/core.xsd">
	<!-- 引入CXF Bean定义如下,早期的版本中使用 -->
	<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" />
	
	<!-- 第一种发布方式:简单发布(无接口的发布) -->
	<!-- id:唯一标识   implementor:服务实现类    address:服务的请求url-->
	<jaxws:endpoint id="helloService" implementor="cn.it.noInterface.HelloService" address="/hello">
	    <!-- 请求消息拦截器 -->
	    <jaxws:inInterceptors>
	         <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
	    </jaxws:inInterceptors>
	    
	    <!-- 响应消息拦截器 -->
	    <jaxws:outInterceptors>
	         <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
	    </jaxws:outInterceptors>
	</jaxws:endpoint>
</beans>

2.带接口的服务类

服务接口

@WebService
//@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
public interface IHelloService {
	public String sayHi(String name);
}


服务实现类

public class HelloServiceImpl implements IHelloService {
	
	public String sayHi(String name) {
		String s = "hello " + name;
		return s;
	}
}

cxf-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
	xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
          	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://cxf.apache.org/jaxrs 
            http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/jaxws 
            http://cxf.apache.org/schemas/jaxws.xsd
            http://cxf.apache.org/core 
            http://cxf.apache.org/schemas/core.xsd">
	<!-- 引入CXF Bean定义如下,早期的版本中使用 -->
	<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" />
	
	<!-- 第二种发布方式:带接口的服务 -->
	<jaxws:server id="helloService2" serviceClass="cn.it.withInterface.IHelloService" address="/hello2">
	     <!-- 服务的实现类 -->
	     <jaxws:serviceBean>
	          <bean class="cn.it.withInterface.HelloServiceImpl"></bean>
	     </jaxws:serviceBean>
	     
	     <!-- 请求消息拦截器 -->
	    <jaxws:inInterceptors>
	         <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
	    </jaxws:inInterceptors>
	    
	    <!-- 响应消息拦截器 -->
	    <jaxws:outInterceptors>
	         <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
	    </jaxws:outInterceptors>
	</jaxws:server>
</beans>

2.客户端的调用

客户端调用的几种方式:见博客 点击打开链接

这里使用通过spring配置文件的方式调用。

使用spring配置文件当然先要提供一个beans.xml文件。具体的调用代码如下:

配置文件:beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
	xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
          	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://cxf.apache.org/jaxrs 
            http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/jaxws 
            http://cxf.apache.org/schemas/jaxws.xsd
            http://cxf.apache.org/core 
            http://cxf.apache.org/schemas/core.xsd">
	
	<jaxws:client id="hello" address="http://localhost:8080/cxf_web/ws/hello2" serviceClass="remote.withInterface.IHelloService"></jaxws:client>	
</beans>

调用代码

public class MyTest {
	@Test
	public void test(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		IHelloService helloService=(IHelloService)context.getBean("hello");
		helloService.sayHi("kitty");
	}
}

关于web项目配置的说明

1.如果在项目中仅发布webservice,则可以只配置以下内容。

   默认是读取WEB-INF/cxf-servlet.xml文件,所以是否指定都可以。


2.但一般情况下,一个web项目在使用了Spring之后,往往会通过ApplicationContext获取一些服务,此时则必须注册Spring的监听器。即以下代码:


3.在上页中出现的重复引入问题,可以修改cxf-servlet.xml文件。
修改后,CXFServlet类将不能自动加载cxf-servlet.xml文件,此时将导致名为cxf的bean加载不成功。
为解决此问题必须在重新命名的配置文件中加入以下代码,以启动CXF
即:如果用contextConfigLocation加载的配置文件,则必须要加入以下代码。


4.在增加了Spring的监听器之后,即可以使用以下代码在Servlet中获取Spring的配置



本文转载自:http://blog.csdn.net/javandroid/article/details/17127055

静水楼台
粉丝 0
博文 85
码字总数 2334
作品 0
杭州
程序员
私信 提问
WebService学习总结(三)--使用JDK开发WebService

一、WebService的开发手段   使用Java开发WebService时可以使用以下两种开发手段     1、 使用JDK开发(1.6及以上版本)     2、使用CXF框架开发(工作中) 二、使用JDK开发WebServic...

JAVA_NINA
2016/05/02
210
1
使用JDK开发WebService

WebService学习总结(三)——使用JDK开发WebService 一、WebService的开发手段   使用Java开发WebService时可以使用以下两种开发手段     1、 使用JDK开发(1.6及以上版本)     2、使...

stys35
01/26
21
0
.Net中WebService从创建到发布到部署带(IIS)的过程笔记

一、Web Service 1、定义 是可以接收从Internet上的其他系统中传递的请求,是一种轻量级的独立的通讯技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可...

蒋兴林
08/13
0
0
Webservice开发、引用

一、Webservice开发 1、在解决方案右键添加新建项目,新建空的web应用程序 2、在新建的项目右键添加新建项选择web服务 3、这里就是webservice 里的方法,可以添加自己需要的方法(方法前需要添...

i_mengli
2018/09/13
0
0
简单的webservice例子

极致精简的webservice例子 看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,...

MrBoyce
2018/05/16
50
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
16
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部