目录:
- 基于JDK6 jax-ws开发的webservice获取客户端IP地址
- Endpoint.publish() 轻量级HTTP服务发布
- 在web容器tomcat下发布
- 基于XFire开发的webservice获取客户端IP地址
- 基于Axis开发的webservice获取客户端IP地址
[一]、基于JDK6 jax-ws开发的webservice获取客户端IP地址
以:http://www.micmiu.com/soa/webservice/jax-ws-demo/ 中的 [三] 2 具体示例为基础:
1. 情况一:如果以 Endpoint.publish() 的方式发布:
服务端接口实现类:HelloServiceImpl.java 修改如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
packagecom.micmiu.jaxws.demo.impl;
import java.net.InetSocketAddress;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import com.micmiu.jaxws.demo.HelloService;
import com.sun.net.httpserver.HttpExchange;
import com.sun.xml.internal.ws.developer.JAXWSProperties;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
@WebService()
publicclassHelloServiceImplimplementsHelloService{
@Resource
privateWebServiceContext wsContext;
@WebMethod
publicStringsayHello(@WebParam(name="userName")StringuserName){
System.out.println(" ----> 获取客户端信息开始 <---- ");
getClientInfo();
System.out.println(" ----> 获取客户端信息结束 <---- ");
return"hi,"+userName+" welcom to www.micmiu.com";
}
privatevoidgetClientInfo(){
try{
MessageContext mc=wsContext.getMessageContext();
HttpExchange exchange=(HttpExchange)mc
.get(JAXWSProperties.HTTP_EXCHANGE);
InetSocketAddress isa=exchange.getRemoteAddress();
System.out.println("InetSocketAddress : "+isa);
System.out.println("Hostname : "
+isa.getAddress().getHostAddress()+" address: "
+isa.getAddress().getHostName());
}catch(Exceptione){
e.printStackTrace();
}
}
}
|
客户端调用后,服务端运行日志:
1
2
3
4
5
|
publish webservice successful
---->获取客户端信息开始<----
InetSocketAddress:/127.0.0.1:61333
Hostname:127.0.0.1address:demo.micmiu.com
---->获取客户端信息结束<----
|
从上面的日志信息中可看出:服务端完全可以获取到客户端的IP地址。
2. 情况二:如果以web容器的方式发布(jetty 或 tomcat为例):
服务端接口实现 HelloServiceImpl.java 修改成如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
packagecom.micmiu.jaxws.demo2.impl;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import com.micmiu.jaxws.demo2.HelloService;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
@WebService(endpointInterface="com.micmiu.jaxws.demo2.HelloService")
publicclassHelloServiceImplimplementsHelloService{
@Resource
privateWebServiceContext wsContext;
publicStringsayHello(StringuserName){
System.out.println(" ----> 获取客户端信息开始 <---- ");
StringclientIP=getClientInfo();
System.out.println(" ----> 获取客户端信息结束 <---- ");
return"Hi,"+userName+" welcome to JAX-WS with IP: "+clientIP
+" . see more http://www.micmiu.com ";
}
privateStringgetClientInfo(){
StringclientIP=null;
try{
MessageContext mc=wsContext.getMessageContext();
HttpServletRequest request=(HttpServletRequest)(mc
.get(MessageContext.SERVLET_REQUEST));
clientIP=request.getRemoteAddr();
System.out.println("client IP : "+clientIP);
}catch(Exceptione){
e.printStackTrace();
}
returnclientIP;
}
}
|
客户端代码不用修改,运行如下:
1
2
3
4
|
start webservice client...
send Michael toserver
Hi,Michael welcome toJAX-WS with IP:127.0.0.1.see more http://www.micmiu.com
test client end.
|
服务端运行日志如下:
1
2
3
4
5
6
7
8
|
2012-8-619:15:24com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
信息:WSSERVLET12:JAX-WS上下文监听程序正在初始化
2012-8-619:15:25com.sun.xml.ws.transport.http.servlet.WSServletDelegate<init>
信息:WSSERVLET14:JAX-WS servlet正在初始化
2012-08-0619:15:25.645:INFO::Started SelectChannelConnector@0.0.0.0:8080
---->获取客户端信息开始<----
client IP:127.0.0.1
---->获取客户端信息结束<----
|
从上面的日志信息中可看出:服务端完全可以获取到客户端的IP地址。
[二]、基于XFire开发的webservice获取客户端IP地址
以:http://www.micmiu.com/soa/webservice/xfire-ws-base-demo/ 的示例为基础:
服务端接口实现类:HelloServiceImpl.java 修改成如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
packagecom.micmiu.xfire.demo.base;
import javax.servlet.http.HttpServletRequest;
import org.codehaus.xfire.transport.http.XFireServletController;
/**
* @blog http://www.micmiu.com
* @author Michael
*/
publicclassHelloWorldServiceImplimplementsHelloWorldService{
publicStringsayHello(Stringusername){
System.out.println(" ----> 获取客户端信息 <---- ");
StringclientIP=getClientInfo();
System.out.println("客户端IP :"+clientIP);
return"Hi,"+username+" welcome,see more http://www.micmiu.com";
}
publicStringgetClientInfo(){
StringclientIP=null;
try{
HttpServletRequest request=XFireServletController.getRequest();
System.out.println("Addr : "+request.getRemoteAddr()+" host: "
+request.getRemoteHost());
clientIP=request.getRemoteAddr();
}catch(Exceptione){
e.printStackTrace();
}
returnclientIP;
}
}
|
客户端调用后,服务端的日志信息如下:
1
2
3
|
---->获取客户端信息 <----
Addr:127.0.0.1host:127.0.0.1
客户端IP:127.0.0.1
|
从上面的日志信息中可看出:服务端完全可以获取到客户端的IP地址。
[三]、Axis开发的webservice获取客户端IP地址
以Axis最简单的部署方式为例:
服务端代码:HelloWorld.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import javax.servlet.http.HttpServletRequest;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
/**
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
publicclassHelloWorld{
publicStringsayHello(Stringusername){
System.out.println(" ----> Get client info <---- ");
StringclientIP=getClientInfo();
System.out.println("client ip"+clientIP);
return"Hi,"+username+" welcome to axis with IP: "+clientIP
+" . see more http://www.micmiu.com ";
}
privateStringgetClientInfo(){
MessageContext mc=null;
HttpServletRequest request=null;
StringclientIP=null;
try{
mc=MessageContext.getCurrentContext();
request=(HttpServletRequest)mc
.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
clientIP=request.getRemoteAddr();
}catch(Exceptione){
e.printStackTrace();
}
returnclientIP;
}
}
|
客户端调用代码:Client4Hello.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
publicclassClient4Hello{
/**
* @param args
*/
publicstaticvoidmain(String[]args){
StringwsdlUrl="http://localhost:8088/axis/HelloWorld.jws";
try{
System.out.println(" ----> 客户端调用测试 <---- ");
Services=newService();
Call call=(Call)s.createCall();
call.setOperationName("sayHello");// 这里是要调用的方法名
call.setTargetEndpointAddress(wsdlUrl);// 设置调用的wsdl
Stringret=(String)call.invoke(newObject[]{"Michael"});
System.out.println("发送 Michael ,返回的信息 :"+ret);
}catch(Exceptione){
e.printStackTrace();
}
}
}
|
运行客户端结果:
1
2
3
4
|
---->客户端调用测试 <----
2012-8-616:56:13org.apache.axis.utils.JavaUtils isAttachmentSupported
。。。。
发送Michael,返回的信息:Hi,Michael welcome toaxis with IP:127.0.0.1.see more http://www.micmiu.com
|
从tomcat的日志文件catalina.out 中看到服务端运行信息:
1
2
|
---->Get client info <----
client ip127.0.0.1
|
从上面的日志信息中可看出:服务端完全可以获取到客户端的IP地址。
到此演示了JAX-WS、XFire、Axis三种webservice的获取客户端IP的简单实现过程。
相关推荐
webService调取IP所在地,以及获得客户端真实IP
客户端IP地址是网络中设备的唯一标识,通常通过网络请求头中的`REMOTE_ADDR`字段获取。在某些情况下,如果客户端经过了代理,可能需要检查`X-Forwarded-For`字段,因为这是代理服务器通常会设置的IP地址。 MAC地址...
在IT行业中,网络编程是一项重要的技能,而获取公网IP地址是常见的需求之一。在这个场景下,我们使用Visual C++(简称VC)通过Web Service来实现这一功能。在Visual Studio 2008环境下,我们可以利用.NET框架提供的...
一、前言由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户
本示例中的"调用WebService查询IP地址所在地"是利用Web Service来获取特定IP地址的地理位置信息。在ASP.NET 2.0中,可以方便地实现对Web Service的调用,这在很多需要定位用户位置的场景中非常有用。 首先,我们...
本文实例讲述了C#实现获取本地内网(局域网)和外网(公网)IP地址的方法。分享给大家供大家参考,具体如下: 1、获取本机的IP地址集合: /// /// 获取本机所有ip地址 /// /// <param name=netType>InterNetwork:...
本教材将详细介绍如何使用CXF实现WebService,并重点讲解在不同的Web服务框架中获取客户端IP地址的方法。 #### 二、WebService基础概念 1. **SOAP (Simple Object Access Protocol)**:一种轻量级协议,用于在Web...
在本文中,我们将深入探讨如何使用Winform应用程序结合WebService来实现一个天气预报功能,并自动根据用户的IP地址识别其所在的城市。Winform是.NET框架中用于创建桌面应用的用户界面组件,而WebService则是一种通过...
在本项目中,“asp.net post/get方法运用webservice实现IP地址查询”旨在通过这两种HTTP请求方法来调用Web服务,从而获取并处理用户的IP地址信息。以下是关于这个主题的详细知识点: 1. HTTP POST与GET方法: - ...
在本案例中,"webservices查询IP地址"指的是使用Web服务来获取客户端的IP信息,或者输入特定IP地址以查询其相关详情。这在分布式系统、网络监控、数据分析等领域非常常见,因为它能帮助我们识别和跟踪网络活动。 IP...
本篇文章将详细讲解如何使用C#语言和Visual Studio 2008(VS2008)来创建一个Web Service客户端,实现IP地址查询的功能。 首先,我们需要了解Web Service的基本原理。Web Service是通过SOAP(Simple Object Access ...
#### 获取客户端IP地址的方法 无论采用哪种方式获取`HttpServletRequest`对象,我们都可以利用它来获取客户端的IP地址。下面是一个简单的示例方法,用于从`HttpServletRequest`对象中提取客户端IP地址: ```java ...
在.NET框架中,当我们使用代理类调用WebService时,通常会通过WSDL(Web Service Description Language)文件自动生成一个与WebService接口匹配的客户端代理类。这个代理类包含了所有可供调用的服务方法,使得我们...
以下是对CXF Webservice动态地址客户端相关知识点的详细解释: 1. **CXF客户端API**:CXF提供了两种主要的客户端API,即JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。...
腾讯地图WebService地址解析接口是一种基于Web服务的技术,用于将地理坐标(经纬度)转换为具体的行政区域地址。这种接口在处理地理位置数据时非常有用,尤其是在分析用户行为、位置跟踪或提供定位服务的场景中。...
svcutil http://IP地址/Webservice/MathService.asmx?wsdl -n:NameSpace -out:FileName.cs ``` 这将生成一个名为 `FileName.cs` 的 C# 文件,其中包含了客户端访问 WebService 所需的所有类型和方法。 ##### 3. ...
`:获取客户端IP地址。 - `int destport = client.getPort();`:获取客户端端口号。 - `String inline = instream.readLine();`:读取客户端发送的数据。 - **功能说明**: - 每当有新的客户端连接时,都会创建...
这里的IP地址应替换为实际部署MAS服务器的IP地址。 **2. 接口方法** #### (1) sendSM 方法 **功能**:用于发送一条MT短信至单个或多个手机号码。 **参数**: - **apicode**:接口编码,必填项。 - **loginName*...
对于测试或内部网络应用,通常会使用局域网内的IP地址,如例子中的“192.168.1.146”。 #### 调用WebService方法 ```csharp this.authors = pdaWS.GetAuthor(); ``` 通过调用`GetAuthor`方法,`pdaWS`对象向远程...