问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么发布一个webservice

发布网友 发布时间:2022-04-09 03:40

我来回答

3个回答

懂视网 时间:2022-04-09 08:01

myweb.service; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style=Style.RPC) public interface SqlServer { @WebMethod void readSql(int ID); }

代码2:实现接口的类,重写其中的方法。

package myweb.service;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.jws.WebService;

/*
 @WebService - 它是一个注解,用在类上指定将此类发布成一个ws. 
 Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
 */
@WebService(endpointInterface = "myweb.service.SqlServer")
public class SqlServerImpl implements SqlServer {

 public String readSql(int ID){
 String url="jdbc:mysql://localhost:3306/company";
 String user="root";
 String password="";//没有密码
 String sqll="select * from staff where staffID=";
 //String staff="";
 //System.out.println("11");
 String fanhui="";
 try {
  Class.forName("org.mariadb.jdbc.Driver");
  Connection connection;
  connection = DriverManager.getConnection(url,user,password);
  System.out.println("数据库连接成功");
  Statement statement =connection.createStatement();
  ResultSet result=statement.executeQuery(sqll+ID);

  while(result.next()){
  String staffID=result.getString("staffID");
  String staffName=result.getString("staffName");
  String department=result.getString("department");
  String title=result.getString("title");
  String position=result.getString("position");
  String birth=result.getString("birth");
  String joinDay=result.getString("joinDay");
  //staff=staffID+staffName;
  fanhui=staffID+" "+staffName+" "+department+" "+title+" "+position+" "+" "+birth+" "+joinDay;
  //System.out.println(staffID+" "+staffName+" "+department+" "+title+" "+position+" "+" "+birth+" "+joinDay);
  }
  if(result!=null){result.close();result=null;}
  if(statement!=null){statement.close();statement=null;}
  if(connection!=null){connection.close();connection=null;}


 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 return fanhui;
 }

代码3:发布服务

package myweb.service;
import javax.xml.ws.Endpoint;
public class SqlServerPublisher {
 public static void main(String[] args){
 // 第一个参数是发布的URL
 // 第二个参数是服务的实现
 Endpoint.publish("http://127.0.0.1:10101/myweb", new SqlServerImpl());
 }
}

代码4:客户端调用服务

package myweb.client;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;
import java.util.Scanner;

import myweb.service.*;

public class SqlClient {
 public static void main(String[] args) throws Exception{
 URL url = new URL("http://localhost:10103/myweb?wsdl");
 // 第一个参数是服务的URI
 // 第二个参数是在WSDL发布的服务名
 QName qname = new QName("http://service.myweb/","SqlServerImplService");
 // 创建服务
 Service service = Service.create(url, qname);
 // 提取端点接口,服务“端口”。
 SqlServer eif = service.getPort(SqlServer.class);

 System.out.println("请输入员工ID号:");
 Scanner scanner=new Scanner(System.in);
 int ID=scanner.nextInt();
 System.out.println("staffID staffName department title position birth joinDay");
 System.out.println(eif.readSql(ID));

 }
}

6.2 第二个服务-根据department和title查询用户title。

1) 服务端查询数据库代码及截图:服务实现部分只有黄色加注不同于服务一,其余相同。

package myweb.service;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.jws.WebService;

/*
 @WebService - 它是一个注解,用在类上指定将此类发布成一个ws. 
 Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
 */
@WebService(endpointInterface = "myweb.service.SqlServer")
public class SqlServerImpl implements SqlServer {
public String readSql2(String depar, String tit){
 String url="jdbc:mysql://localhost:3306/company";
 String user="root";
 String password="";//没有密码
 String fanhui2="";
 try {
  Class.forName("org.mariadb.jdbc.Driver");
  Connection connection;
  connection = DriverManager.getConnection(url,user,password);
  System.out.println("数据库连接成功");
  Statement statement =connection.createStatement();
  String temp = "select * from staff where department = ‘"+depar+"‘ and title = ‘"+tit+"‘";
  ResultSet result=statement.executeQuery(temp);

  while(result.next()){
  String staffID=result.getString("staffID");
  String staffName=result.getString("staffName");
  String department=result.getString("department");
  String title=result.getString("title");
  String position=result.getString("position");
  String birth=result.getString("birth");
  String joinDay=result.getString("joinDay");
  fanhui2=staffID+" "+staffName+" "+department+" "+title+" "+position+" "+" "+birth+" "+joinDay;
  //return fanhui2;
  //System.out.println(staffID+" "+staffName+" "+department+" "+title+" "+position+" "+" "+birth+" "+joinDay);
  }
  if(result!=null){result.close();result=null;}
  if(statement!=null){statement.close();statement=null;}
  if(connection!=null){connection.close();connection=null;}


 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 return fanhui2;
 }

}

技术分享

2) 发布服务,端口号从新选择为10103:

package myweb.service;
import javax.xml.ws.Endpoint;
public class SqlServerPublisher {
 public static void main(String[] args){
 // 第一个参数是发布的URL
 // 第二个参数是SIB实现,10103是服务绑定的地址端口号。
 Endpoint.publish("http://127.0.0.1:10103/myweb", new SqlServerImpl());
 }
}

3) 服务二的wsdl截图如下:
技术分享
4)客户端代码:

package myweb.client;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;
import java.util.Scanner;

import myweb.service.*;

public class SqlClient {
 public static void main(String[] args) throws Exception{
 URL url = new URL("http://localhost:10103/myweb?wsdl");
 // 第一个参数是服务的URI
 // 第二个参数是在WSDL发布的服务名
 QName qname = new QName("http://service.myweb/","SqlServerImplService");
 // 创建服务
 Service service = Service.create(url, qname);
 // 提取端点接口,服务“端口”。
 SqlServer eif = service.getPort(SqlServer.class);

 System.out.println("请输入员工department:");
 Scanner scanner=new Scanner(System.in);
 String depart=scanner.nextLine();
 System.out.println("请输入员工title:");
 String tit=scanner.nextLine();
 System.out.println("staffID staffName department title position birth joinDay");
 //System.out.println(eif.readSql(ID));
 //Scanner scanner=new Scanner(System.in);
 //String dep=scanner.nextLine();
 //String tit=scanner.nextLine();
 System.out.println(eif.readSql2(depart, tit));
 }
}

利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)

标签:

热心网友 时间:2022-04-09 05:09

本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程:

1.系统条件:
Eclipse Java EE IDE for Web Developers
Java SE 6
Windows XP
2.基本环境搭建:
1)Java SE6 JDK的安装:下载Java SE6 JDK,双击,安装默认选项进行安装即可。
2)Eclipse的安装与配置:
安装时直接解压。
配置处有两点,Window>Preferences>Java>Installed JREs确保如下设置:

安装路径可能略有不同。
Window>Preferences>Java>Compiler 确保如下设置:

3.建立Server端工程和相关包与类:
创建一个Java Project,命名为wsServerHelloWorld:

在这个项目下建立包:org.gnuhpc.wsServer

在这个包下边建立类:SayHello

在SayHello.java文件中输入以下代码:
package org.gnuhpc.wsServer;
import javax.jws.WebService;
@WebService
public class SayHello {
private static final String SALUTATION = "Hello";
public String getGreeting(String name) {
return SALUTATION + " " + name;
}
}
其中注意到@WebService ,这个称作annotation或者metadata,Java SE 5中的Web Services Metadata Specification引入的。Java SE 6中对于Web Services规范的升级以及JAX-WS(Java API for XML Web Services)2.0规范,这些升级使得我们Web Services的创建和调用变得更加容易。使用这些新功能,我们可以仅仅使用简单的Annotations注释从一个Java类创建Web Services。开发者将其类和方法之前用该annotations指定,类告诉runtime engine以Web Service的方式和操作来使能该类和方法。这个annotations可以产生一个可布署的Web Service,是一个WSDL映射annotations,将Java源代码与代表Web Service的WSDL元素连接在了一起。

4.使用Ant产生Server端代码:
首先在项目中新建一个文件:build.xml,然后使用OpenWith>AntEditor打开,输入以下脚本代码:

<project default="wsgen">
<target name="wsgen">
<exec executable="wsgen">
<arg line="-cp ./bin -keep -s ./src -d ./bin
org.gnuhpc.wsServer.SayHello"/>
</exec>
</target>
</project>

default指定了默认执行的Target为wsgen,wsgen可以创建一个能够使用WebService的类,它生成所有用于WebService发布的源代码文件和经过编译过的二进制类文件。它还生成WSDL和符合规范的该类的WebService。
Target名称为wsgen,具体执行的命令的参数:
-cp 为类路径
-keep后产生的java文件
-s 产生的源文件放在哪
-d 产生的输出问价放在哪

然后使用Ant Build选项运行:

在成功执行的提示后,我们刷新一下Project

我们在Project区域可以看到,结果如下:

5.分布Web Service
org.gnuhpc.wsServer下建立一个类RunService:
package org.gnuhpc.wsServer;
import javax.xml.ws.Endpoint;
public class RunService {
/**
*@paramargs
*/
public static void main(String[] args) {
System.out.println("SayHello Web Service started.");
Endpoint.publish("ht tp:/ /localhost:8080/wsServerExample" ,
new SayHello());
}
}
运行Run As>Java Application。我们得到结果,说明这个web service的Server端已经启动。

6.查看WSDL:
Window>Show View>Other>General>Internal Web Browser,在其中输入:ht tp:/ /localhost:8080/wsServerExample?wsdl

你可以看看到底WSDL都记录了哪些信息。看完后可以停止该Server。
7.监测Server
我们创建完Server可以用过Eclipse Web Services Explorer监测Server,
Window>Open Perspective>Other >JavaEE

打开Eclipse Web Services Explorer

点击右上角的WSDL Page按钮:

单击WSDL Main,在URL中输入:htt p:// localhost:8080/wsServerExample?wsdl 按Go按钮后出现一下视图:

我们可以触发一个Web Service操作:点击getGreetings,添加一个参数,比如gnuhpc,然后点击Go按钮:

8.创建Client端 工程和相关包与类:
创建一个Java Project,命名为wsClientHelloWorld,在这个项目下建立包:org.gnuhpc.wsClient

9.使用Ant产生Client代码框架:
编写Web service时,可以使用工具来利用WSDL生成进行调用的客户端桩;或者也可以使用底层API来手动编写Web service。前者方便,后者灵活,现在我们通过前者做说明:
新建文件build.xml
New>File>build.xml

<project default="wsimport">
<target name="wsimport">
<exec executable="wsimport">
<arg line="-keep -s ./src -p org.gnuhpc.wsClient
-d ./bin ht tp: //localhost:8080/wsServerExample?wsdl"/>
</exec>
</target>
</project>

注意:wsgen 支持从 Java class 创建 Web services,wsimport 支持从 WSDL 创建 Web services,分别对应于 JAX-RPC 方式下的 Java2WSDL 和 WSDL2Java。要根据发布的WSDL进行创建,这也就是为什么要先运行RunServer的原因了。
运行Server的RunService : Run As>Java Application>
运行该Ant脚本,产生Client代码:Run As>Ant Build
运行成功的提示如下:

生成的代码如下:

这一步读取WSDL并生成客户端桩。这些桩是将为我们的代码所用的Java类和接口。这些桩给服务器端功能提供了一个客户端接口。例如,如果我们的服务器提供一个Maths服务,该服务带有一个叫做add的方法。我们的客户端代码将调用桩上的一个方法,而桩实现将对该方法使用参数封装,把Java方法调用变为Webservice请求。这个请求将基于HTTP发送给服务器,而且将使用SOAP作为RPC协议。监听服务器接收该SOAP消息,然后(十有*)将其转换为服务器处的一次方法调用。

热心网友 时间:2022-04-09 06:27

Calculate the number of lines per page.
PrintPreviewDialog pPDlg;
build_os='darwin11.4.0d1'
build_vendor='apple'Calculate the number of lines per page.
PrintPreviewDialog pPDlg;
build_os='darwin11.4.0d1'
build_vendor='apple'
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我的天语T590手机怎么内存很小啊?也找不到删什么东西来腾出空间。 急!急!我的天语T590 G.手机上网老死机是怎么回事才刚买2天 天语T590手机,手机系统内存用手机视频看一会就满了,怎么删除啊?下QQ为... 天语t590系统内存太满如何删除 天语T590的手机系统内存满了怎么办?而且删东西也没有多大效果。 天语手机T590去年五月买的,现在用得很郁闷,老是没信号,上网已经是件... 天语T590我把游戏下载到内存卡里(1G)可是安装时却说内存不足(内存卡内... ...说内存不够 可是够啊 要不就是..反正用不了 有没有跟我一个型号的... 平安嘉护定期重疾险有没有坑?线上怎么买? 没有离职 个人做工伤鉴定拍的片子可以报销吗 有办法修复手机边角的磕碰吗 四川省选调优秀大学毕业生到基层工作录用考察表中的个人总结怎么写_百度问一问 选调生个人思想总结、院系党总支鉴定材料? 陕煤集团张福来好像说过陕煤要加快科技成果的开发和转化,是什么意思? 卡西欧EDIFICE哪款太阳能手表好用些?求推荐 小孩子每次大便都要把衣服脱光,这该怎么办? 为什么我那么在乎,但是我感觉不到你对我的爱。 女朋友说我感觉不到你爱我什么意思怎么办? 六十亿美元等于人民币是多少61美元等于人民币多少?一美元值人民币多少?61美元值人民币多少钱?61 武汉地铁小孩子随意上厕所还和工作人员顶嘴事件你怎么看? 60亿日元折合人民币是多少? 两节电池串联并联的总电压总内阻分别怎么算 孩子到底需不需把尿?给孩子把尿有什么好处呢? 木耳为什么臭乎乎的 孩子多大开始有上厕所的意识?该如何培养这个意识? 干黑木耳用水来泡时为什么会散发出一种臭 60亿元人民币等于多少平方米 卡西欧和天王表哪个好?求推荐一个热门款 如何看待有些中国人随地大小便的行为? 买来的干黑木耳,泡发后晾晒过程中为啥有股脚气臭味,闻之倍感很不舒服,食用会对人有害吗? 红米手机边框磕碰这样才可以修复。 手机因外观有掉漆磕碰现象不维修怎么办我想问下可以修复不华为的高端些的机子 报考选调生需要准备哪些材料呢? 选调生资格复审需要提交哪些材料? 考选调都需要哪些材料啊? 是不是所有企业交的保险都属于社保? 报考选调生需要准备哪些资料呢? 选调生报名需要准备什么材料? 选调生面试需要准备哪些材料? 急!!选调生公示证明材料怎么写啊? 还有政审材料怎么写啊? 有高手帮忙吗,在线等! 选调生都考哪些材料啊? 假发片一式3片总共5个怎么佩带 最近买了MACBOOKPRO,谁能告诉我怎么下载豆瓣里的音乐啊??? 秋月春花开过什么生肖? 秋月春花,指十二生肖中的猴龙猪鼠哪个最合适? 二本第一次报考没被录取 第二次补录的时候还会有公办大学吗 2011年内蒙古本科第二批进行补录院校有哪些?(理科) 春花,秋月何时了,代表什么生肖 春花秋月连年好,猴蛇羊鸡遇冤家。 猜一生肖 耽美快穿 虐渣攻