编写一个天气客户端调用<webxml>网站的天气服务端应用

<webxml>是一个提供webservice服务端模块应用的网站,用户可以自己编写一个客户端来请求该网站的应用,例如:请求天气预报应用

先做一个测试:打开myeclipse,找到这个图标

并打开,点击这里

切换到wsdl界面

输入网址,点击Go

点击:

  

这样就可以获取的指定地区的天气情况,可以搜索到县级

现在要写一个客户端,来调用该网站的服务端的天气预报应用模块,然后打印出天气预报的信息

 

 1.创建一个Java工程 weather_client

 (1)获取该网站的天气预报应用模块的服务端接口代码,并生成到src目录下

在src目录下打开dos,输入:wsimport -keep http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,回车报错:

 

 

解决方法:

在项目下创建一个wsdl文件,weather.wsdl,在浏览器中输入:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,回车,右键查看页面源代码,全部拷贝粘贴到weather.wsdl中

移到文件头部,按住Ctrl+F,输入:<s:element ref="s:schema" />,把所有的下面两行替换成:<s:any minOccurs="2" maxOccurs="2"/>,记住:要全文替换,然后保存文件。

重新回到dos,输入:wsimport -keep weather.wsdl的文件全路径(输入wsimport -keep 然后直接把weather.wsdl文件拖进来即可),按回车,生成服务器端代码:

-------------------------------------------------

编写一个测试类:

package com.lvshitech.webservice.weather_client.test;

import java.util.List;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;

public class ClientTest {
	public static void main(String[] args) {
		// 获取ws生产类
		WeatherWS weatherWS = new WeatherWS();
		
		// 获取天气接口
		WeatherWSSoap weatherWSSoap = weatherWS.getWeatherWSSoap();
		
		// 获取天气,第一个参数:地区,第二参数:可为空
		ArrayOfString weather = weatherWSSoap.getWeather("徐闻", null);
		
		// 得到天气List
		List<String> weatherList = weather.getString();
		
		// 输出
		System.out.println(weatherList);
	}
}

得到的是一个k-v字符串,需要进一步解析之后才能显示

 用同样的方法也可以得到其他的模块信息,比如获取手机归属地

新建web工程:

在src目录下打开dos,输入:wsimport -keep http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,回车,生成服务端代码

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>获取手机归属地</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body>
	<form action="seachPhonenumber" method="post">
		请输入手机号码:<input type="text" name="phonenumber"
			value="<%=(request.getAttribute("phonenumberRet")==null ? "" : request.getAttribute("phonenumberRet")) %>"/>
		<input type="submit" value="搜索"/>
	</form>
	<h3>查询结果:</h3>
	<div>
		1. 手机号:<%=(request.getAttribute("phonenumberRet")==null ? "" : request.getAttribute("phonenumberRet")) %>
		<br/>
		<br/>
		2. 归属地:<%=(request.getAttribute("phoneAddr")==null ? "" : request.getAttribute("phoneAddr")) %>
	</div>
</body>
</html>

 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
	<servlet>
		<servlet-name>seachPhonenumber</servlet-name>
		<servlet-class>com.lvshitech.phone.client.PhoneSeach</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>seachPhonenumber</servlet-name>
		<url-pattern>/seachPhonenumber</url-pattern>
	</servlet-mapping>
</web-app>

 PhoneSeach.java

package com.lvshitech.phone.client;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.com.webxml.MobileCodeWS;
import cn.com.webxml.MobileCodeWSSoap;

@SuppressWarnings("serial")
public class PhoneSeach extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		// 获取前台手机号
		String phonenumber = req.getParameter("phonenumber");
		
		// 获取手机信息
		String phoneInfo = getPhoneInfo(phonenumber);
		
		
		int index = phoneInfo.indexOf(":");
		String phonenumberRet = phoneInfo.substring(0, index);
		String phoneAddr = phoneInfo.substring(index+1, phoneInfo.length());
		
		// 返回信息
		req.setAttribute("phonenumberRet", phonenumberRet);
		req.setAttribute("phoneAddr", phoneAddr);
		req.getRequestDispatcher("index.jsp").forward(req, resp);
	}

	public static String getPhoneInfo(String phonenumber) {
		// 获取生产类
		MobileCodeWS mobileCodeWS = new MobileCodeWS();
		
		// 获取手机信息模块接口
		MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();
		
		// 获取指定号码归属地信息
		String mobileCodeInfo = mobileCodeWSSoap.getMobileCodeInfo(phonenumber, null);
		
		// 返回手机信息
		return mobileCodeInfo;
	}
	
	/*public static void main(String[] args) {
		String str = "15989622055:广东 湛江 广东移动全球通卡";
		int index = str.indexOf(":");
		String phonenumberRet = str.substring(0, index);
		String phoneAddr = str.substring(index+1, str.length());
		System.out.println(phonenumberRet);
		System.out.println(phoneAddr);
	}*/
}

 执行:

 

posted @ 2018-03-17 15:58  半生戎马,共话桑麻、  阅读(245)  评论(0)    收藏  举报
levels of contents