webservice的第一个例子

来源:互联网 发布:web关联数据库 编辑:程序博客网 时间:2024/05/16 11:11

注意微笑只有在Jdk1.6.0_20上开发的,因为在次版本开始提出的。

那么如何才可以发布一个WebService呢?

         JDK1.6JAX-WS规范定义了如何发布一个webService服务

   JAX-WS是指Java Api for XML – WebService.

(SUN司发布的JAX-WS白皮书)

  1. Jdk1.6.0_20以后的版本发布一个WebService服务.
  2. Web服务相关的类,都位于javax.ws.*包中。
    1. 主要类有:
      1. @WebService-它是一个注解,用在类上指定将此类发布成一个ws.
      2. Endpoint此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

 

3.        JAX(Java Api for Xml)-WS规范是一组XML web servicesJAVA APIJAX-WS允许开发者可以选择RPC-oriented或者message-oriented来实现自己的web services

4.          在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息。 

5.          在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEIservice endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

6.          在客户端,用户可以通过JAX-WSAPI创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。 

7.          当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAPXML消息。 

8.          通过web service所提供的互操作环境,我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net等)的互操作。 

9.          JAX-WSJAX-RPC之间的关系

10.      Sun最开始的web services的实现是JAX-RPC 1.1  (JSR 101)。这个实现是基于JavaRPC,并不完全支持schema规范,同时没有对BindingParsing定义标准的实现。

11.      JAX-WS2.0 (JSR  224)Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming  API for XML (StAX, JSR 173),同时它还完全支持schema规范。

12.    1:需要注意的是,jdk1.6._07以后jdk版本发布WebService时必须要完整的对代码进行注解,如果使用的是jdk1.6.0_21以后版本,因为它已经内含了ws2.1所以,可以只对类添加@WebService的注解.

13.    以下是两段不同的代码:

14.    jdk1.6.0_13的版本上发布的ws:

15.    package com.itcast;

16.    import javax.jws.WebMethod;

17.    import javax.jws.WebService;

18.    import javax.jws.soap.SOAPBinding;

19.    import javax.jws.soap.SOAPBinding.Style;

20.    import javax.xml.ws.Endpoint;

21.    @WebService(targetNamespace="http://loalhost:9999/helloworld")

22.    @SOAPBinding(style=Style.RPC)//只支持RPC的消息风格

23.    public class HelloWorld {

24.    //以下通过@WebMethod注解,对外公开方法

25.    @WebMethod

26.    public String sayHello(){

27.    return "HelloWorld";

28.    }

29.    public static void main(String[] args) {

30.    Endpoint.publish("http://localhost:9999/helloworld",new  HelloWorld());

31.    }

32.    }

33.    2:以下是在jdk1.6.0_24上发布的WebService代码:

34.    package com.itcast;

35.    import javax.jws.WebService;

36.    import javax.xml.ws.Endpoint;

37.    @WebService//注意只有此一个注解,此注解也是必须的,默认的SOAP消息风格为:DOCUMENT

38.    public class HelloWorld {

39.    public String sayHello(){

40.    return "HelloWorld";

41.    }

42.    public static void main(String[] args) {

43.    Endpoint.publish("http://localhost:9999/helloworld",new  HelloWorld());

44.    }

45.    }

46.     

/**

 *1:创建一个准备发布的类-准备对外公布

 *2:在此类添加注解@WebService

 *   在一个添加了ws注解的类上,必须要至少拥有一个方法(非静态的,非私有的)

 *3:对外发布

 *   Endpoint - 端点服务指定一个ip和一个post,服务名

 *   http://localhost:9999/hello

 *   http://192.168.1.254:9999/hello

 *   

 *如何访问

 *1:必须要先获取使用说明书:wsdl

 *2: 根据wsdl生成本地代码。 wsimport -s . url

 *3:放到一个项目中来。调用测试。

 */

 

@WebService

public class HelloWorld {

         //声明一个容器,

         private  List<User> users = new ArrayList<User>();

        

        

         public  String sayHi(String ss){

                  SimpleDateFormat sdf = new  SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

                   String  str = "你好:"+ss+",现在的时间是:"+sdf.format(new  Date());

                   return  str;

         }

        

         //获取一个用户

         public  User getUser(int idx){

                   if(idx<0  || idx>=users.size()){

                            return  null;

                   }else{

                            return  users.get(idx);

                   }

         }

         //保存用户

         public  void saveUser(User user){

                   users.add(user);

         }

         //获取所有的用户

         public  List<User> getAll(){

                   return  users;

         }

        

         public  User remove(int idx){

                   if(idx<0  || idx>=users.size()){

                            return  null;

                   }else{

                            return  users.remove(idx);

                   }

         }

        

        

        

        

         public  static void main(String[] args) {

                   //1:声明准备被发布的类的对象

                   HelloWorld  hw = new HelloWorld();

                   //2:发布:后台会打开一个serverSocket

                   //while(server.accept()){

                   Endpoint.publish("http://192.168.1.254:2345/hello",hw);

                  

                   System.err.println("发布完成。。。。");

         }

}

 

杀掉后台一直运行的进程:

netstat -no:查看所有端口,带端口的pid

tasklist  :查看所有的进程,带端口的pid

taskkill -f -pid3824:强制杀死进程,f代表强制,3824pid号,在任务管理器里也可以查看pid

 

 在运行键入cmd->netstat  -an就会显示出你开的端口了!!

当前最为常见的木马通常是基于TCP/UDP协议进行client端与server端之间的通讯的,既然利用到这两个协议,就不可避免要在server端(就是被种了木马的机器了)打开监听端口来等待连接。例如鼎鼎大名的冰河使用的监听端口是7626Back Orifice2000则是使用54320等等。那么,我们可以利用查看本机开放端口的方法来检查自己是否被种了木马或其它hacker程序。以下是详细方法介绍。
 
1 Windows本身自带的netstat命令

 
  关于netstat命令,我们先来看看windows帮助文件中的介绍:

 
Netstat
 
  显示协议统计和当前的 TCP/IP网络连接。该命令只有在安装了 TCP/IP协议后才可以使用。

 
netstat [-a] [-e] [-n] [-s] [-p protocol]  [-r] [interval]
 
  参数

 
-a :显示所有连接和侦听端口。服务器连接通常不显示。

 
-e :显示以太网统计。该参数可以与 -s选项结合使用。

 
-n :以数字格式显示地址和端口号(而不是尝试查找名称)。

 
-s :显示每个协议的统计。默认情况下,显示 TCPUDPICMP IP 的统计。-p 选项可以用来指定默认的子集。

          -p protocol
:显示由 protocol指定的协议的连接;protocol可以是 tcp udp。如果与 -s选项一同使用显示每个协议的统计,protocol可以是 tcpudpicmp ip

         -r
显示路由表的内容。

          interval
:重新显示所选的统计,在每次显示之间暂停 interval秒。按 CTRL+B 停止重新显示统计。如果省略该参数,netstat将打印一次当前的配置信息。

 
 
  好了,看完这些帮助文件,我们应该明白netstat命令的使用方法了。现在就让我们现学现用,用这个命令看一下自己的机器开放的端口。进入到命令行下,使用netstat命令的an两个参数:

 
C:\>netstat -an
 
Active Connections
 
Proto Local Address Foreign Address State 
 
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
 
TCP 0.0.0.0:21 0.0.0.0:0 LISTENING
 
TCP 0.0.0.0:7626 0.0.0.0:0 LISTENING
 
UDP 0.0.0.0:445 0.0.0.0:0
 
UDP 0.0.0.0:1046 0.0.0.0:0
 
UDP 0.0.0.0:1047 0.0.0.0:0
 
 
  解释一下,Active Connections是指当前本机活动连接,Proto是指连接使用的协议名称,LocalAddress是本地计算机的 IP 地址和连接正在使用的端口号,Foreign  Address是连接该端口的远程计算机的 IP地址和端口号,State则是表明TCP连接的状态,你可以看到后面三行的监听端口是UDP协议的,所以没有State表示的状态。看!我的机器的7626端口已经开放,正在监听等待连接,像这样的情况极有可能是已经感染了冰河!急忙断开网络,用杀毒软件查杀病毒是正确的做法。2.工作在windows2000下的命令行工具
fport
 
  使用windows2000的朋友要比使用windows9X的幸运一些,因为可以使用fport这个程序来显示本机开放端口与进程的对应关系。

 
FportFoundStone出品的一个用来列出系统中所有打开的TCP/IPUDP端口,以及它们对应应用程序的完整路径、PID标识、进程名称等信息的软件。在命令行下使用,请看例子:

 
D:\>fport.exe
 
FPort v1.33 - TCP/IP Process to Port  Mapper   Copyright 2000 by Foundstone, Inc.
 
http://www.foundstone.com
 
Pid Process Port Proto Path
 
748 tcpsvcs -> 7 TCP C:\WINNT\System32\  tcpsvcs.exe
 
748 tcpsvcs -> 9 TCP  C:\WINNT\System32\tcpsvcs.exe
 
748 tcpsvcs -> 19 TCP  C:\WINNT\System32\tcpsvcs.exe
 
416 svchost -> 135 TCP  C:\WINNT\system32\svchost.exe
 
  是不是一目了然了。这下,各个端口究竟是什么程序打开的就都在你眼皮底下了。如果发现有某个可疑程序打开了某个可疑端口,可千万不要大意哦,也许那就是一只狡猾的木马!

 
Fport的最新版本是2.0。在很多网站都提供下载,但是为了安全起见,当然最好还是到它的老家去下:
http://www.foundstone.com/knowledge/zips/fport.zip 
 
3.Fport功能类似的图形化界面工具
Active Ports
 
Active PortsSmartLine出品,你可以用来监视电脑所有打开的TCP/IP/UDP端口,不但可以将你所有的端口显示出来,还显示所有端口所对应的程序所在的路径,本地IP和远端IP(试图连接你的电脑IP)是否正在活动。

 
  更棒的是,它还提供了一个关闭端口的功能,在你用它发现木马开放的端口时,可以立即将端口关闭。这个软件工作在Windows  NT/2000/XP平台下。你可以在http://www.smartline.ru/software/aports.zip得到它。

 
  其实使用windows xp的用户无须借助其它软件即可以得到端口与进程的对应关系,因为windows xp所带的netstat命令比以前的版本多了一个O参数,使用这个参数就可以得出端口与进程的对应来。

  上面介绍了几种查看本机开放端口,以及端口和进程对应关系的方法,通过这些方法可以轻松的发现基于TCP/UDP协议的木马,希望能给你的爱机带来帮助。但是对木马重在防范,而且如果碰上反弹端口木马,利用驱动程序及动态链接库技术制作的新木马时,以上这些方法就很难查出木马的痕迹了。所以我们一定要养成良好的上网习惯,不要随意运行邮件中的附件,安装一套杀毒软件,像国内的瑞星就是个查杀病毒和木马的好帮手。从网上下载的软件先用杀毒软件检查一遍再使用,在上网时打开网络防火墙和病毒实时监控,保护自己的机器不被可恨的木马入侵

 

 

 

C:\Users\YUHUADONG\Desktop>taskkill  -f -pid 7552

成功: 已终止 PID 7552 的进程。

 

C:\Users\YUHUADONG\Desktop>netstat  -ano|findstr 8888

   TCP    192.168.1.2:8888       0.0.0.0:0              LISTENING       8812

 

C:\Users\YUHUADONG\Desktop>taskkill  -f -pid 8812

成功: 已终止 PID 8812 的进程。

 

C:\Users\YUHUADONG\Desktop>

 

Jdk 1.6 用的是soap 1.1 jdk1.7开始时soap 1.2

 

本地生产,Js urlconnection

Js->xhr

                Jquery

 

原创粉丝点击