ws之天气预报
? ?前两天学习了使用Axis开发WebService程序,写了一个HelloWorld程序,感觉流程明白了,可是其中的原理还是不够清楚,今天在写一个demo,使用别人发布的一个天气预报webservice,根据提供的wsdl文件,生成本地的java框架,写自己的业务方法,使用jsp做页面展示. ?????? 这个天气预报的webservice来自于网上http://fhs.6617.com/getweather.asmx,下面我们将使用最原始的开发方法,不实用任何辅助工具来写代码,这样有助于我们了解详细的步骤和其中的原理. ? 目的:这个demo要做成web项目,在jsp页面上,用户输入城市名称后,调用webservice,显示出天气预报的信息 步骤: 1.?首先建立项目的目录结构,我们这里还是使用,axis-bin-1_4.zip包中的axis目录.本demo的目录为D:jakarta-tomcat-5.5.7webappsaxis 2.使用 命令提示符 进入D:jakarta-tomcat-5.5.7webappsaxis,设置classpath,主要是编译文件所需要的一些jar包的路径,关于设置classpath 可以参考我的另一篇博客?使用Axis框架开发webservice的HelloWord?中的init.bat文件 3.得到wsdl(webservice描述文件),使用WSDL2Java?命令将它转化为本地java框架,方便自己调用 ?? a.进入http://fhs.6617.com/getweather.asmx?WSDL?你将看到这个webservice的描述,复制其中的内容,保存为getweather.wsdl,放在axis目录下 ?? b.在设置好环境变量,命令提示符为当前的D:jakarta-tomcat-5.5.7webappsaxis 目录后 运行 java org.apache.axis.wsdl.WSDL2Java getweather.wsdl -s?? 之后你可以看到该目录下多了一个文件夹 com 其中的 目录结构为 axiscom_6617fhsWeatherService 下面有 11个文件,其中有9个 .java文件 和两个 wsdd文件 ? c.由于我们使用了 -s 选项,则生成了两个wsdd 文件,其中deploy.wsdd 是帮助我们发布webservice 的,undeploy.wsdd,是卸载webservice服务的. ??d.我们也可以不下载getweather.wsdl 文件,使用下面这种方式也可以生成本地java文件框架 java org.apache.axis.wsdl.WSDL2Java?http://fhs.6617.com/getweather.asmx?WSDL ?4.进入axiscom_6617fhsWeatherService 文件夹下,编译这些.java文件?? javac *.java ??? 如果这一步有问题,一般是classpath变量设置的问题,仔细检查所需要的jar 包是否都设置正确了吗?还有我们编译可能会遇到一大堆警告,没关系,这是字符编码的问题,不属于错误,不影响我们后续的使用,将这些.class文件拷贝到axisWEB-INFclasses 目录下 5.这时候我们客户端的框架就搭好了,现在我们可以在写jsp页面,servlet,字符集过滤器了,为了方便开发,我们现在使用eclipse,在eclipse下新建立一个web项目名字交 webservice,按照web项目的目录结构将 我们的axis目录下的 文件分门别类的放入到webservice目录下,比如 java源文件放在src下,.class文件放在web-inf/class下等. 注意把servlet.jar包和 jsp.jar包添加到项目的classpath中 6.在webservice项目的根目录下写3个页面 ?? a.index.html 这是一个框架页面 一个frameset 中套两个frame (我们把页面分成上下两个部分) ???b.top.html??? 这是页面上部分的查询页面 用户输入城市名称 点击查询 在下部分的页面中显示查询结果 ?? c.bottom.jsp 这是西部分的结果显示页面 如图看项目结构,包括时候WSDL2Java? 生成的9个java文件
index.html ?
top.html??? style?type="text/css" <!--??
<%@?page?contentType="text/html;?charset=utf-8"%>WebService?天气预报meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8" ???
7.在web开发中,一个头疼的问题就是字符编码问题,在这里我们虽然是一个demo,为了有好的习惯,我们也来使用一个过滤器,来解决字符编码的问题,而不是每次在servlet中使用request.setCharacterEncoding(),或者用new String(....)等来手动转码. ??? a.这个过滤器是SetCharacterEncodingFilter.java 它继承子Filter
?b.部署过滤器,在web.xml中 |