PHP调用JAVA发布的WebService
自从互联网起步,到发展壮大以来,已经深入到了各个领域。用户的需求体验也慢慢提高了,对应的互联网相关开发技术也越来越多。但是我们知道每一门开发语言都是在某种环境下应运而生,有的发展越来越大,越来越成熟稳定。但是有的开发语言则好景不长。这里就有很多人关注的问题,哪种计算机语言是最好的语言。我还是那句话,每种语言诞生的背景不同,解决的问题不同,因此各有千秋。所以提出两个问题:
在A语言A平台不能完成的工作,能不能交给B语言B平台来实现?
它们之间通过什么规则的语法来交流数据?
这就是接下来正文中要说明的,webservice(web服务)
本文仅仅实现一个简单实例,为大家提供一个思路,抛砖引玉,相互交流学习,有不正确之处还请多多指教。
正文:一、实例所用环境及工具1、jdk版本1.8
2、windows下基于eclipse(版本neon.3支持javaee)的tomcat(9.0.6)插件发布javawebservice,使用maven管理依赖包,远程仓库使用aliyun
3、LinuxCentos6.5操作系统下搭建PHP环境(nginx服务器软件+php的php-fpm模式)
说明:仅做服务发布调用调试,因此不涉及数据库相关,我相信你能自己扩展的
二、发布java、webservice1、打开eclipse创建maven工程,并选择webapp项目
2、项目右键选择properties,将其中有关javajdk版本设置为1.8
说明:使用原sun公司的JAX-WS开发WebService,步骤:接口编写-》实现接口类-》发布(接口中只需要把类注明为@WebService,把要暴露给客户端的方法注明为@WebMethod即可)
3、创建service接口,绑定注解。编写实例实现接口(注意其中的注解)
创建接口:
packagecn.zgtlz.service;
importjavax.jws.WebMethod;
importjavax.jws.WebService;
importjavax.jws.soap.SOAPBinding;
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
publicinterfaceHelloService{
/**
*发布无参调用方法sayHelloDefault
*/
@WebMethod
publicStringsayHelloDefault();
/**
*发布带参调用方法
*/
@WebMethod
publicStringsayHello(StringuserName);
}
创建实现类:
packagecn.zgtlz.service.impl;
importjavax.jws.WebService;
importjavax.jws.soap.SOAPBinding;
importcn.zgtlz.service.HelloService;
@WebService(endpointInterface="cn.zgtlz.service.HelloService")
@SOAPBinding(style=SOAPBinding.Style.RPC)
publicclassHelloServiceImplimplementsHelloService{
@Override
publicStringsayHelloDefault(){
return"hello";
}
@Override
publicStringsayHello(StringuserName){
return"hello"+userName;
}
}
4、发布服务
发布方式一:(测试用,不做详细介绍)
使用Endpoint.publish发布服务,但是jdk1.6u17?以下编译器不支持
publicstaticvoidmain(String[]args){
Endpoint.publish("http://localhost:8080/test-webservice/service/hello",newHelloServiceImpl());
}
发布方式二:发布到tomcat,(需要编写sun-jaxws.xml文件并放到WEB-INF下)
sun-jaxws.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<endpointsxmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"version="2.0">
<endpointname="HelloService"
implementation="cn.zgtlz.service.impl.HelloServiceImpl"
url-pattern="/service/hello"/>
</endpoints>
Web.xml配置
<!DOCTYPEweb-appPUBLIC
"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>ArchetypeCreatedWebApplication</display-name>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>HelloService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloService</servlet-name>
<url-pattern>/service/hello</url-pattern>
</servlet-mapping>
</web-app>
最后部署到Tomcat里,值得一提的是您可能需要添加以下jar包(因为Tomcat没有)
这里我将配置到pom文件中
Pom.xml
...
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.13</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.2.9</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>org.jvnet.staxex</groupId>
<artifactId>stax-ex</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>com.sun.xml.stream.buffer</groupId>
<artifactId>streambuffer</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>policy</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.external</groupId>
<artifactId>management-api</artifactId>
<version>3.2.1-b002</version>
</dependency>
<dependency>
<groupId>org.glassfish.ha</groupId>
<artifactId>ha-api</artifactId>
<version>3.1.9</version>
</dependency>
<dependency>
<groupId>org.glassfish.gmbal</groupId>
<artifactId>gmbal-api-only</artifactId>
<version>3.2.0-b003</version>
</dependency>
</dependencies>
...
最后将项目发布到tomcat,没有报错则发布成功
最后在地址栏输入:
http://localhost:8081/tomcatservice/service/hello?wsdl
三、搭建php环境调用javawebservice1、准备php和nginx源码包
nginxhttp://nginx.org/download/nginx-1.9.9.tar.gz
phphttp://distfiles.macports.org/php5/php-5.6.0.tar.xz
2、测试环境linuxcentos6.5
3、为避免编译php安装时出错,先将php所需依赖安装
yum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibpnglibpng-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-devecurlcurl-developensslopenssl-develgdbm-develdb4-devellibXpm-devellibX11-develgd-develpcrepcre-devel
4、解压并编译安装php
#./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php/etc--with-mysql--with-mysqli--with-zlib--with-libxml-dir--enable-xml--with-curl--with-jpeg-dir--with-png-dir--enable-fpm--with-gd--with-openssl--with-xmlrpc--enable-zip--with-freetype-dir--with-apxs2=/usr/local/apache2/bin/apxs//此配置可生成libphp5.so
#make&&makeinstall
5、配置PHP
#cp/home/software/php-5.6.0/php.ini-production/usr/local/php/etc/php.ini
#cd/usr/local/php/etc
#cpphp-fpm.conf.defaultphp-fpm.conf
修改FPM配置文件php-fpm.conf
pm.max_children=30
pm.start_servers=10
pm.min_spare_servers=3
pm.max_spare_servers=25
pm.max_requests=300//去掉配置前分号
注意:此处start_servers必须大于min_spare_servers,而小于max_spare_servers
#/usr/local/php/sbin/php-fpm//启动php-fpm
6、配置nginx
location~\.php${
root html;#这是你网站的根目录
fastcgi_pass 127.0.0.1:9000;#这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME$document_root/$fastcgi_script_name;
include fastcgi_params;
}
7、启动nginx:
#/usr/local/nginx/sbin/nginx
8、测试php环境
在/usr/local/nginx/html目录下创建index.php,并加入如下代码:
<?php
Phpinfo();
最后访问地址,如下图结果,表示搭建成功:
最后将index.php文件中代码改为:
<?php
header("Content-Type: text/html; charset=utf-8");
try{
$client=newSoapClient(
'http://192.168.2.101:8081/tomcatservice/service/hello?wsdl'
);
echo$client->sayHelloDefault();
}catch(Exception $e){
echo $e->getMessage();
}
注意:
此处php需要soap扩展才能远程访问service,因此地址栏输入
http://192.168.2.102/index.php
如无响应请先确定php是否有该扩展
使用phpize进行重新编译
配置完成后重启php-fpm和nginx,并访问http://192.168.2.102/index.php
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。