一、 内容概述
1.设计目的
1)练习WEB服务体系结构风格;2)练习B/S体系结构风格;
2. 设计前的准备
1) 熟悉B/S架构思想及掌握相关开发技术;2) 熟悉WEB服务体系结构模型,理解WEB服务的核心技术;3) 掌握至少一种WEB服务开发技术;4) 确定及搜集好开发前需要的webservice资源;
3.设计内容
1)开发一个获取天气预报Web Service 服务功能的网站。
4.设计要求
实现以下功能:
1)从网上获取一个天气预报Web服务;
2)利用获取的Web服务,提供让用户选择省和一个城市,在页面中就显示相应的天气情况的功能;
二、 设计要点及解决方案
本设计采用B/S风格及WebService风格进行设计开发。其中B/S系统通过遵循Web服务的相关协议调用网络中的某一Web服务来完成要求实现的功能,从而构成总体的WebService体系架构。系统涉及的模型图如下:
图1 Web服务体系结构
图2 天气预报服务网站体系结构
其中WEB服务器使用Apache Tomcat/7.0.8,Java Web服务引擎采用XFire 1.2。开发技术B/S系统使用JSP + JavaBean + Servlet,C/S系统使用JAVA 图形化界面。开发环境为jdk1.6.0_24 + java_ee_sdk-6u2 + MyEclipse 6 + FrontPage 2003。详细解决方案与设计如下:
2.天气预报服务网站设计
天气预报服务网站在网页中为用户查询城市天气情况提供交互接口,用户在浏览网页时可以通过两种方式获得目标城市的天气情况。第一种方式是:用户填写表单,即直接输入城市名 → 提交表单 → 服务网站返回查询结果;另一种方式是:用户选择省 → 选择市→ 服务网站返回查询结果。以下是该系统开发的目录结构图:
图3 B/S系统目录结构
其中,在mybean包中的DateInfo类产生用户访问时的日期信息及时间信息,并根据不同时间提供不同的问候语;SupportCity是业务JavaBean,提供了一个静态方法,用于获取能从天气预报WebService服务器上查到的所有的城市;SupportProvince是业务JavaBean,提供了一个静态方法,用于获取能从天气预报webservice服务器上查到的所有的省份;WeatherInfo类封装了根据给定城市,获取该城市当天、第二天、第三天的天气信息的方法,并将天气信息保存在属性weather_str:List<String>中。在myservlet包中的两个Servlet:City 和 Province分别用来处理用户查询某特定省或地区的哪些城市被系统支持的请求和处理用户查询所有的被系统支持的省份的请求。在service_client包中的两个类:ServiceClient和ServiceSoap用来产生Web服务客户端代理。Index.jsp是网站主页,网站返回的天气情况结果也显示在该网页中。
网站响应用户查询城市天气请求的具体机制如下:
1)用户通过第一种方式查询
网站从用户提交的表单中获取城市名参数city → 以city为参数分别调用javabean WeatherInfo中的getWeatherOfToday(city)、getWeatherOfTomorrow(city)、getWeatherOfATomorrow(city)获得天气信息,三个方法中均利用客户端代理调用了Web服务方法 → 返回天气信息给用户。
2)用户通过第二种方式查询
网站获得用户查询Web服务上支持哪些省的请求 → 用Servlet Province来处理请求,doPost( )方法中利用客户端代理向Web服务发送用户的查询请求 → 从Web服务上获得结果 → 将结果返回给用户 → 用户在收到的省中选择一个自己要查询的省,向网站发送该省中哪些城市的天气可从系统中查询到的请求 → 网站获得请求 →用Servlet City来处理请求,doPost( )方法中利用客户端代理向Web服务发送用户的查询请求→ 从Web服务上获得结果 → 将结果返回给用户 → 用户在收到的城市中选择一个自己要查询的城市,向网站发送查询该城市天气的请求 → 网站利用与处理第一种查询方式相同的方式处理该请求。
三、 运行截图
1.天气预报服务网站运行截图
图4 网站首页
图5 查询城市海口的天气
图6 查询城市衡阳的天气
图7 查询的城市天气信息不存在
图9 查看支持的所有的省份
图7 查看湖北省中支持查询的城市
图8 湖北武汉的天气
四、 源码
源码包括天气预报服务网站B/S源码。