题外话:
本程序利用网络上发布的公共webservice endpoint
www.webxml.com.cn/WebServices/WeatherWebService.asmx
大致步骤是
1 利用soap向webservice endpoint进行请求,取回请求结果
2 把结果显示在web界面上,web界面采用Java+Jsp(呵呵,有点丑陋,篇幅所迫)
好,废话少说,直接进入核心程序讲解。
一 WeatherReport类
方法 1 构造soap请求(请求格式请见上面的链接),用用户输入的城市名称镶在此请求里面
java 代码
-
-
-
-
-
-
-
-
-
- private static String getSoapRequest(String city) {
- StringBuilder sb = new StringBuilder();
- sb
- .append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
- + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
- + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
- + "<soap:Body> <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
- + "<theCityName>" + city
- + "</theCityName> </getWeatherbyCityName>"
- + "</soap:Body></soap:Envelope>");
- return sb.toString();
- }
方法 2 向endpoint发送上述SOAP请求,并设置一些请求属性,返回一个服务器端的InputStream(XML文档流)
java 代码
-
-
-
-
-
-
-
-
-
-
- private static InputStream getSoapInputStream(String city) throws Exception {
- try {
- String soap = getSoapRequest(city);
- if (soap == null) {
- return null;
- }
- URL url = new URL(
- "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
- URLConnection conn = url.openConnection();
- conn.setUseCaches(false);
- conn.setDoInput(true);
- conn.setDoOutput(true);
-
- conn.setRequestProperty("Content-Length", Integer.toString(soap
- .length()));
- conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
- conn.setRequestProperty("SOAPAction",
- "http://WebXml.com.cn/getWeatherbyCityName");
-
- OutputStream os = conn.getOutputStream();
- OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
- osw.write(soap);
- osw.flush();
- osw.close();
-
- InputStream is = conn.getInputStream();
- return is;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
方法 3 解析方法2返回的XML文档流,并用特定的符号分隔,以便我们在Jsp页面进行结果分析
java 代码
-
-
-
-
-
-
-
-
-
- public static String getWeather(String city) {
- try {
- Document doc;
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- DocumentBuilder db = dbf.newDocumentBuilder();
- InputStream is = getSoapInputStream(city);
- doc = db.parse(is);
- NodeList nl = doc.getElementsByTagName("string");
- StringBuffer sb = new StringBuffer();
- for (int count = 0; count < nl.getLength(); count++) {
- Node n = nl.item(count);
- if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {
- sb = new StringBuffer("#") ;
- break ;
- }
- sb.append(n.getFirstChild().getNodeValue() + "#\n");
- }
- is.close();
- return sb.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
二 weatherInfo.jsp页面
核心功能是解析 方法3 所返回的字符串,向endpoint进行请求时,一个XML文档片段是
xml 代码
- <?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
- <string>湖南</string>
- <string>长沙</string>
- <string>57687</string>
- <string>57687.jpg</string>
- <string>2007-12-26 14:35:26</string>
- <string>7℃ / 6℃</string>
- <string>12月26日 小雨</string>
- <string>西北风<=3级</string>
- <string>7.gif</string>
- <string>7.gif</string>
- <string>今日天气实况:多云;7.4℃;风向/风力:西北风2级;空气质量:较差;紫外线强度:最弱</string>
- <string>穿衣指数:感冒指数:温度较低,较易发生感冒,请适当增加衣服。体质较弱的朋友尤其应该注意防护。晨练指数:早晨天气阴沉,气温极低,请尽量避免户外晨练,若坚持户外晨练请注意保暖防冻。交通指数:中暑指数:温度不高,其他各项气象条件适宜,中暑机率极低。公园指数:天气不好,不适宜放风筝。防晒指数:属弱紫外辐射天气,长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。旅行指数:阴天,缺少阳光的陪伴,加上过低的温度会给出行带来些不便,旅游指数一般,请您在旅游时注意增加衣物。</string>
- <string>8℃ / 5℃</string>
- <string>12月27日 小雨</string>
- <string>西北风<=3级</string>
- <string>7.gif</string>
- <string>7.gif</string>
- <string>10℃ / 4℃</string>
- <string>12月28日 小雨</string>
- <string>西北风<=3级</string>
- <string>7.gif</string>
- <string>7.gif</string>
- <string>长沙市位于湖南省东部偏北,湘江下游和长浏盆地西缘。其地域范围为东经111°53′-114°15′,北纬27°51′-28°41′。东邻江西省宜春地区和萍乡市,南接株洲、湘潭两市,西连娄底、益阳两市,北抵岳阳、益阳两市。东西长约230公里,南北宽约88公里。全市土地面积11819.5平方公里,其中城区面积556平方公里。长沙是一座有2000余年悠久文化历史的古城,早在春秋时期,就是楚国雄踞南方的战略要地之一。汉朝的刘邦立国之后,于公元前206年改临江为长沙,并设立汉朝的属国----长沙国,自此之后,长沙开始筑建城墙,并逐渐成为兵家必争之地。长沙属亚热带季风性湿润气候。气候特征是:气候温和,降水充沛,雨热同期,四季分明。长沙市区年平均气温17.2℃,各县16.8℃-17.3℃,年积温为5457℃,市区年均降水量1361.6毫米。景观:岳麓山、桔子洲、天心阁、烈士公园、月亮岛等。</string>
- </ArrayOfString>
在Jsp中解析的代码如下,基本上是对字符串的操作,截取及截取长度的控制
java 代码
-
- s1 = str.substring(str.indexOf("穿衣指数:"),str.indexOf("穿衣指数:")+4) ;
- s1Content = str.substring(str.indexOf("穿衣指数:")+5,str.indexOf("感冒指数:")) ;
-
- s2 = str.substring(str.indexOf("感冒指数:"),str.indexOf("感冒指数:")+4) ;
- s2Content = str.substring(str.indexOf("感冒指数:")+5,str.indexOf("晨练指数:")) ;
-
-
- s3 = str.substring(str.indexOf("晨练指数:"),str.indexOf("晨练指数:")+4) ;
- s3Content = str.substring(str.indexOf("晨练指数:")+5,str.indexOf("交通指数:")) ;
-
- s7 = str.substring(str.indexOf("交通指数:"),str.indexOf("交通指数:")+4) ;
- s7Content = str.substring(str.indexOf("交通指数:")+5,str.indexOf("中暑指数:")) ;
-
- s4 = str.substring(str.indexOf("中暑指数:"),str.indexOf("中暑指数:")+4) ;
- s4Content = str.substring(str.indexOf("中暑指数:")+5,str.indexOf("防晒指数:")) ;
-
- s5 = str.substring(str.indexOf("防晒指数:"),str.indexOf("防晒指数:")+4) ;
- s5Content = str.substring(str.indexOf("防晒指数:")+5,str.indexOf("旅行指数:")) ;
-
- s6 = str.substring(str.indexOf("旅行指数:"),str.indexOf("旅行指数:")+4) ;
- s6Content = str.substring(str.indexOf("旅行指数:")+5) ;
程序运行效果见附件上的截图!!!运行附件:http://localhost:8080/yourProject/tianqi.jsp
好了,基本上核心代码就是上边那些了!不仅如此,加入我们想要在自己的系统里加入飞机票,火车票,股票信息等等之类的功能,只要有相应的webservice,我们都可以实现(呵呵,好像免费的少哦),各位有什么疑问,留言吧!!!
- 描述: 天气预报效果图
- 大小: 1.6 MB
分享到:
相关推荐
complex-function-plot, 基于web的复杂表达式解析器和绘图仪 复杂函数绘图仪现场实况演示基于web的复杂表达式解析器和绘图仪。有关使用和背景信息的信息,请参考 wiki 中的指令。
《前端项目:深入理解function-plot》 在前端开发领域,可视化工具的使用越来越广泛,它们可以帮助我们更好地理解和展示数据。function-plot就是一个基于d3.js库的2D函数绘图器,它提供了简单易用的接口,让我们...
- **FUNCTION-CALL子系统**:使用S-Function实现FUNCTION-CALL子系统,支持基于事件的触发机制。 #### 错误处理 S-Function需要具备良好的错误处理机制,以确保仿真过程的稳定性。 - **防超程代码**:添加代码以...
《Python库function-shield-1.1.5详解》 在Python编程中,库是开发者的重要工具,它们提供了丰富的功能,极大地提高了开发效率。本文将深入探讨名为`function-shield-1.1.5`的Python库,了解其功能、用途以及如何在...
ROOT_REPO= ' git@github.com:jon-grey/sample-app-module-federation-azure-web-app-angular-azure-function-api-python.git ' APP_REPO= ' git@github....
节点红色贡献功能节点红色功能节点,具有从npm安装和使用软件包的能力相容性节点红色版本> 1.0安装从您的节点红色目录npm install node-red-contrib-function-npm用法function-npm节点的行为类似于普通功能节点,...
在MATLAB环境中,S-Function(System Function)是一种高级的编程接口,用于创建自定义的仿真组件,可以扩展Simulink的功能。S-Functions允许用户深入到Simulink的内部,构建自己的动态系统模型,满足特定的计算需求...
综上所述,S-Function是Simulink中一个非常强大的工具,允许用户根据自己的需求定义复杂的模块。无论是使用MATLAB还是其他编程语言(如C/C++),S-Function都能提供一种高效的方式来扩展Simulink的功能。通过理解S-...
【标题】"S-function-master (4).zip" 暗示了这是一个关于Simulink S-function的项目,可能是一个更新版本或变体。S-functions是MATLAB Simulink中的一个核心概念,允许用户自定义仿真行为,扩展Simulink的功能以...
使其工作的最佳方法是包含spring-cloud-function-context作为依赖项,但不包含更高级别的适配器(例如spring-cloud-function-web或spring-cloud-function-stream )。 适配器有几个可以使用的通用请求处理程序。 最...
S-函数是System function 系统函数的简称,是指采用非图形化(即计算机语言,而非Simulink 系统模块)的方式描述的功能模块。在MATLAB 中,用户除了可以使用MATLAB 代码编写S-函数以外,还 可以使用C、C++、...
FTrace is a relatively new kernel tool for tracing function execution in the Linux kernel. Recently, FTrace added the ability to trace function exit in addition to function entry. This allows for ...
在MATLAB环境中,Simulink是用于系统建模和仿真的一种强大的工具,而S-function则是Simulink中的自定义功能模块,允许用户扩展Simulink的功能,以满足特定的计算需求。本篇将深入探讨S-function模块在蹦极系统案例中...
S-Function 使用手册 S-Function 是 Simulink 中的一种自定义驱动库,允许用户创建自定义的模型和算法,以满足特定的仿真和设计需求。以下是 S-Function 使用手册的知识点总结: 一、S-Function 概念 * S-...
- **FUNCTION-CALL子系统**:支持触发S-Function的执行。 #### 错误处理 在S-Function中正确处理错误和异常是非常重要的: - **防超程代码**:防止溢出和其他数值问题。 - **SsSetErrorStatus的终止条件**:设置...
#### FUNCTION-CALL子系统 - **错误处理**:正确处理运行时错误是保证S-Function可靠性的关键。Simulink提供了一些API函数来帮助开发者实现这一目标。 #### S-Function范例 - **连续状态的S-Function范例**:这类...
S-Function模块具有自己的属性和动作,这些属性和动作由SimStruct数据结构定义,它包含了模块的输入输出端口、状态变量、参数等信息。用户通过编写回调函数来实现具体的功能逻辑。回调函数是S-Function与Simulink...
oracle-function-执行动态sql(包括DML、DLL、DQL、DCL)
### S-Function 使用指导 #### S-Function 概述 S-Function,即系统函数(System Function),是Simulink环境中一种强大的工具,用于扩展Simulink的功能性。它允许用户自定义模型中的行为,实现Simulink本身不支持...
spring-cloud-function-web 包则提供了 HTTP 端点的实现,使得函数可以作为 HTTP 服务被访问。 在 SpringCloud Function 中,我们可以使用 application.properties 或者 yaml 配置文件来配置函数的路由规则。其中,...