Web环境使用相对路径发布Webservice

常我们的Webservice服务的发布地址都将是一个相对路径,在与Spring一起使用时我们需要引入Cxf配置Webservice的schema,如jaxws,用以定义对应的Webservice。

<?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"

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">

<bean id="helloWorld" class="com.elim.test.cxf.service.HelloWorldServiceImpl"/>

<!-- ID可以加斜杠也可以不加 -->

<jaxws:server id="/helloWorld" serviceBean="#helloWorld" serviceClass="com.elim.test.cxf.service.HelloWorldService" />

</beans>

然后我们需要定义一个CXFServlet,用以接收对应的Webservice请求,如下所示。

<?xml version="1.0" encoding="UTF-8"?>

<web-app

version="3.0"

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_3_0.xsd">

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:webservices.xml</param-value>

</context-param>

<listener>

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

</listener>

<servlet>

<servlet-name>CxfServlet</servlet-name>

<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>CxfServlet</servlet-name>

<url-pattern>/sys/service/*</url-pattern>

</servlet-mapping>

</web-app>

这样如果我们想访问HelloWorldService这个Webservice就可以通过相对于当前工程发布路径的/sys/service/helloWorld来访问了。

但是如果我们的工程没有使用Spring,但是我们也想把Webservice发布为工程的某一个路径的相对路径怎么办?Cxf也为我们提供了相应的支持,这比使用Spring时的CXFServlet要麻烦一点。Cxf为我们提供了一个CXFNonSpringServlet,这要求我们实现自己的继承自CXFNonSpringServlet的Servlet,然后重写其loadBus方法,最终需要达到的效果就是CXFNonSpringServlet使用的Bus与我们的发布Webservice时使用的Bus是同一个即可。这样当我们访问CXFNonSpringServlet请求某个Webservice时,CXFNonSpringServlet将自动根据请求的相对路径去寻找发布路径为其相对路径的Webservice。

下载地址java后台框架 springmvc mybaits 集代码生成器

publicclass WebserviceServlet extends CXFNonSpringServlet {

/**

*

*/

private static final longserialVersionUID = 3919868434043901738L;

@Override

protected void loadBus(ServletConfig sc) {

super.loadBus(sc);

//获取当前CXFNonSpringServlet使用的Bus,然后利用该Bus来发布服务

Bus bus = this.getBus();

JaxWsServerFactoryBean jsFactoryBean = new JaxWsServerFactoryBean();

jsFactoryBean.setBus(bus);

//该路径是相对于当前CXFNonSpringServlet匹配的路径的,也可以加斜杠

jsFactoryBean.setAddress("helloWorld");

jsFactoryBean.setServiceClass(HelloWorldService.class);

jsFactoryBean.setServiceBean(new HelloWorldServiceImpl());

jsFactoryBean.create();

}

}

这时我们的web.xml需要定义我们自己的CXFNonSpringServlet,即:

<?xml version="1.0" encoding="UTF-8"?>

<web-app

version="3.0"

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_3_0.xsd">

<servlet>

<servlet-name>CxfServlet</servlet-name>

<servlet-class>com.elim.test.cxf.servlet.WebserviceServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>CxfServlet</servlet-name>

<url-pattern>/sys/service/*</url-pattern>

</servlet-mapping>

</web-app>

时间: 2024-12-28 23:36:43

Web环境使用相对路径发布Webservice的相关文章

JAVA WEB项目中各种路径的获取

JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的cla

web项目中各种路径的获取(复制,为以后好找资源)

web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的class里调用 this.getClass().getClassLoader().getResource("/").getPath(); 这将获

web项目中各种路径的获取

1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的class里调用 this.getClass().getClassLoader().getResource("/").getPath(); 这将获取 到classes目录的全

java web项目获取各种路径

1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的class里调用 this.getClass().getClassLoader().getResource("/").getPath(); 这将获取 到classes目录的全

Spring+CXF+Maven发布Webservice

使用CXF发布WebService简单又快速,还可以与Spring集成,当Web容器启动时一起发布WebService服务.本例是简单的客户端给服务端发送订单信息,服务端返回订单转为json的字符串. 1.使用maven管理jar包,首先在maven添加使用到的cxf jar包依赖,到CXF官网上找到Maven的依赖内容. 网址如下:http://cxf.apache.org/docs/using-cxf-with-maven.html 我使用的是Tomcat所以引用前两项就可以了 <depen

如何在Java中快速发布WebService服务

在实际中,您是否遇到过需要发布WebService给别人调用的需求哪?如果您是个Java的新手,客户或合作方又催得很紧,您肯定为这事儿犯愁.别急,让我们看看能用哪些工具或对象发布.Java中可供选择的方式太多,如Axis2.XFire.JWS等.郁闷了,看都看不懂,谁知道该用哪一个. 别着急,如果您特别着急,客户马上就要要,那就用下面这种方法吧: 一.通过Axis2提供的模板自动发布 这种方法非常简单,只要下载Axis包后从里面的"axis-1_4\webapps"中找到axis站点,

用JAXWS-RI在Tomcat中发布WebService

JDK中已经内置了Webservice发布,不过要用Tomcat等Web服务器发布WebService,还需要用第三方Webservice框架.Axis2和CXF是目前最流行的Webservice框架,这两个框架各有优点,不过都属于重量级框架. JAXWS-RI是JAX WebService参考实现.相对于Axis2和CXF,JAXWS-RI是一个轻量级的框架.虽然是个轻量级框架,JAXWS-RI也提供了在Web服务器中发布Webservice的功能.官网地址https://jax-ws.jav

Windws Server 2008 R2 WEB环境配置之IIS7/IIS7.5+FastCGI+PHP 5.6.4+MYSQL+phpMyAdmin

本篇为WEB环境配置的汇总篇,其中PHP以FASTCGI方式来运行,这种方式性能更高.经过配置后,我们的服务器将同时可以运行PHP和.NET的程序,属称全能服务器.所有配置可以根据自身实际需要进行增减. 准备 先准备以下软件版本:    (程序包连接已下架,自行到官网下载) PHP,MYSQL,phpMyAdmin 1.PHP在windows 上二种运行方式: ISAPI和FastCGI Thread Safe 和Non Thread Safe FastCGI执行方式是以单一线程来执行操作,所以

Spring整合CXF之发布WebService服务

今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-spring.html 根据官方文档.我们把前面的实例用Spring整合CXF来处理下.会简化很多: 首先我们来建一个Maven项目 WebService_CXF 建好项目第一步,我们打开pom.xml 我们来添加下Spring支持: <!-- 添加Spring支持 --> <dependen