java WebService 发布与访问

java WebService 发布与访问

1. WebService概念介绍

webservice是一种跨编程语言和跨操作系统平台的远程调用技术。首先我们将实现特定逻辑功能的代码发布,并向外界提供一个能通过Web进行调用的接口,则外界很容易通过该接口使用你提供的服务。 webService三要素:soap、wsdl、uddi soap:一种数据传输协议,了解这个概念就行 wsdl:基于XML,是对服务端提供服务的描述,包括对外发布的服务名称(类)、接口方法名称(方法)、接口参数(方法参数)服务返回的数据类型(方法返回值)等 uddi: UDDI 是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务,可以帮助Web 服务提供商在互联网上发布 Web 服务.

2. WebService服务发布 服务的创建与发布方法有很多,这里介绍一种最简单的方法,无需导入外部jar包

新建普通java项目WebService新建实体类

package student;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "StudentPO")

public class StudentPO {

private String id;

private String name;

private String sex;

private int gender;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getGender() {

return gender;

}

public void setGender(int gender) {

this.gender = gender;

}

}

新建接口服务

package student;

import java.util.List;

import javax.jws.WebMethod;

import javax.jws.WebService;

@WebService

public interface StudentService {

@WebMethod

public List findAllStudent();

}

新建接口实现类

package student;

import java.util.ArrayList;

import java.util.List;

import javax.jws.WebService;

@WebService(endpointInterface="student.StudentService")

public class StudentServiceImpl implements StudentService {

@Override

public List findAllStudent() {

ArrayList studentPOs=new ArrayList<>();

StudentPO studentPO1=new StudentPO();

studentPO1.setId("001");

studentPO1.setName("菜虚鲲");

studentPO1.setSex("female");

studentPO1.setGender(1);

StudentPO studentPO2=new StudentPO();

studentPO2.setId("002");

studentPO2.setName("鸡太美");

studentPO2.setSex("female");

studentPO2.setGender(2);

studentPOs.add(studentPO1);

studentPOs.add(studentPO2);

return studentPOs;

}

}

新建发布服务的类

package util;

import javax.xml.ws.Endpoint;

import student.StudentServiceImpl;

public class PublishService {

public static void main(String[] args) {

String address="http://localhost:8060/StudentService";

Endpoint.publish(address, new StudentServiceImpl());

System.out.println("发布成功!地址为: "+address);

}

}

访问wsdl文档,判断服务是否发布成功,在地址输入 http://localhost:8060/StudentService?wsdl,可以看到wsdl文档,里面有接口和方法的描述。

3. 客户端访问 客户端访问技术有很多,这里介绍两种,一是利用wsdl生成本地代码访问,二是远程服务调用

3.1 本地代码调用 -----借助wsdl文档生成本地代码,像使用本地代码一样调用

<1>.新建普通Java项目

<2>.进入项目src目录 <3>在地址栏输入cmd 回车,进入命令行,输入 http://localhost:8060/StudentService?wsdl 回车,可以看到生成了本地代码

<4>进入项目 refresh ,可以看到项目刷新出生成的代码

<5>新建Client进行测试

package util;

import java.util.ArrayList;

import java.util.List;

import student.StudentPO;

import student.StudentServiceImpl;

import student.StudentServiceImplService;

public class Client {

public static void main(String[] args) {

List studentPOs=new ArrayList<>();

StudentServiceImplService factory = new StudentServiceImplService();

StudentServiceImpl StudentService=factory.getStudentServiceImplPort();

studentPOs=StudentService.findAllStudent();

System.out.println(studentPOs.toString());

}

}

运行程序可以看到查询结果 3.1 远程服务调用 -----不用生成本地代码,直接通过服务地址进行调用 <1>新建普通java项目

<2>新建实体类

package student;

public class StudentPO {

private String id;

private String name;

private String sex;

private int gender;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getGender() {

return gender;

}

public void setGender(int gender) {

this.gender = gender;

}

}

<3>新建接口

package student;

import java.util.List;

import javax.jws.WebMethod;

import javax.jws.WebService;

@WebService

public interface StudentService {

@WebMethod

public List findAllStudent();

}

<3>新建测试类

package util;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import javax.xml.namespace.QName;

import javax.xml.ws.Service;

import student.StudentPO;

import student.StudentService;

public class RMIClient {

public static void main(String[] args) throws MalformedURLException {

//WSDL地址

URL url = new URL("http://localhost:8060/StudentService?wsdl");

//创建服务

//1.namespaceURI - 命名空间地址

//2.localPart - 服务名称

QName qname = new QName("http://student/", "StudentServiceImplService");

Service service = Service.create(url, qname);

//获取实现类

StudentService studentService=service.getPort(StudentService.class);

List studentPOs=new ArrayList<>();

studentPOs=studentService.findAllStudent();

System.out.println(studentPOs);

}

}

<3>运行

相关推荐

通过ISO镜像重装系统,轻松恢复电脑新生(一步步教你利用ISO镜像重新安装操作系统,让电脑焕然一新)
2025-2026赛季国际雪联6项世界杯赛事将在崇礼区举办
工商银行转账最晚多久到账?
be365

工商银行转账最晚多久到账?

📅 09-03 👁️ 6920
传奇法师诱惑宝宝列表等级
beat365英超欧冠平台

传奇法师诱惑宝宝列表等级

📅 07-14 👁️ 8528
描写身材好的词语(通用80句)
be365

描写身材好的词语(通用80句)

📅 07-20 👁️ 1416
球球大作战加载不进去一直卡在加载页面怎么办?
beat365英超欧冠平台

球球大作战加载不进去一直卡在加载页面怎么办?

📅 07-31 👁️ 6726