教案:开发基于JSPServletJavaBean的网上交易系统-第9章 Web服务

时间:2023-02-11 19:07:59
 
授课教师:牟勇
课时: 100 分钟
 
本章技能目标
n 掌握Web服务的基本概念
n 掌握Web服务的工作原理
n 掌握创建和调用Web服务
本章重点
nWeb服务的工作原理
nWeb服务的创建和调用
本章难点
nWeb服务的创建和调用
本章工作任务
n升级E-Book电子书店系统
l   整章授课思路
n本章依次讲解4个问题:软件发展趋势,Web服务的建立与发布,建立客户端程序调用服务,程序的测试。
n软件发展趋势:在开发程序时,会重复开发一些相同或类似的功能模块,在这种情况下,把不同程序*有的功能模块单独发布为Web服务,以供其他程序调用。
nWeb服务的建立与发布:为了实现客户端程序的调用,首先要创建和发布这个Web服务。
n建立客户程序调用服务:Web服务已经建立与发布,客户端程序通过Web服务提供的描述信息,编写代码以访问该服务。
n程序的测试:在程序开发的过程中,为了检测所编写的功能或模块是否符合功能,要进行测试。
EL的基本语法是什么?
JSTL的核心标签库中包含哪些标签?
如何使用JSTL的SQL标签进行数据查询和显示?
为什么要在JSP中使用EL和JSTL?
什么是Web服务?
为什么要使用Web服务?
如何进行Web服务的开发?
问题1 如果想在网页上显示天气预报怎么做?
问题2:购物网站的电子支付(安付通、支付宝等) ,是如何实现的?
答案:自己实现不可能,因为天气预报的数据只能通过气象局获得,而气象局不可能照你的程序的要求给你数据,同样,电子支付由银行提供,银行也同样不可能按你的程序来提供数据。
解决方案:由气象局来实现接口,我的程序来完成对接口的调用,同样的,由银行来实现接口,由我的程序来完成对接口的调用。
新的问题:气象局或者银行的程序是使用C语言完成的,而你的程序却是使用的Java语言,如何实现Java语言的程序调用C语言的程序呢?
解决议案:使用一个中间程序,完成数据的转换。这个中间程序之一就是Web服务。
什么是WEB 服务
Web Service是为了实现“基于Web无缝集成”的全新概念
实现不同系统间的相互调用(语言无关、平台无关)
Web Service 的定义:
Web Service是一个应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序
Web Service支持Web协议,如:HTTP,TCP/IP,SMTP等
Web Service 的标准
XML数据格式
SOAP (简单对象访问协议)
WSDL(Web Service描述语言)
Web服务的建立与发布[30分钟]
Web Service 的开发基本步骤
建立服务并发布
建立客户程序,调用服务
建立服务并发布
什么是XFire
XFire是一个免费的开源SOAP框架
XFire简化了Web Service的开发
XFire 和其它类库
添加XFire   
为Web工程添加XFire-all-1.2.6.jar包
为Web工程添加xalan.jar包
创建服务接口和实现类

public class ProcessCreditCard implements IProcessCredit {
public int creditProcess(String creditCard, double total) {
int result = 0;
Connection con = null;
PreparedStatement pStatement = null;
try {
con = ConnectionManager.getConnction();
String strSql = "update Account "
+ "set balance = balance - ? where creditcard = ?";
result = pStatement.executeUpdate();
} catch (SQLException sqlE) {    sqlE.printStackTrace();   } 
return result;
}
}
Web Service 的发布—services.xml 的配置

<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
       <name>CreditCard</name>
       <namespace>www.jbaptech.com.cn/CreditCard</namespace> 
       <serviceClass>
              y2javaee.sg.ch09.IProcessCredit
       </serviceClass>
       <implementationClass>
              y2javaee.sg.ch09.ProcessCreditCard
       </implementationClass>
</service>
</beans>
教员应详细说明标记的含义
web.xml 中配置XFire 的Servlet 及其配置

<servlet>
        <servlet-name>XFireServlet</servlet-name>
        <servlet-class>
       org.codehaus.xfire.transport.http.XFireConfigurableServlet
        </servlet-class>
 </servlet>
 <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
         <servlet-name>XFireServlet</servlet-name>
         <url-pattern>/servlet/XFireServlet/*</url-pattern>
 </servlet-mapping>
教员应详细说明标记的含义
服务发布测试
教员应现场演示服务发布测试。
 
 
建立客户程序,调用服务
建立客户端Servlet程序

Service serviceModel = new ObjectServiceFactory()
                            .create(IProcessCredit.class);
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);
 
String serviceUrl = "http://localhost:8080/store/services/CreditCard";
 
IProcessCredit client = null;
try {
      client = (IProcessCredit) factory.create(serviceModel, serviceUrl);
} catch (MalformedURLException e) {         }
int serviceResponse = 0;
try {
      serviceResponse = client.creditProcess(creditcard, total);
} catch (Exception e) {         }
教员应详细说明以上代码。
详细说明以上代码之后,教员应演示完整版的E-Book。
小结:
说明创建和发布Web服务的步骤 
写出客户端应用程序访问Web服务的关键代码
单元测试
单元测试就是测试程序员依据所设想的方式开发出来的程序是否产生了预期的结果
测试工具
JUnit是一个Java测试框架,用于编写和运行可重复的测试
JUnit 的安装
在项目中导入JUnit4.jar包(教员应演示JUnit包的安装)
JUnit 规范
测试类必须继承TestCase或其子类
待测方法名称以testXXX()形式命名
JUnit 测试类

public class CreditcardServiceTest extends AbstractXFireAegisTest {
       public void testCreditProcess() throws Exception {
           Service serviceModel = new ObjectServiceFactory().create(IProcessCredit.class);
          XFire xfire = XFireFactory.newInstance().getXFire();
          XFireProxyFactory factory = new XFireProxyFactory(xfire);
          String serviceUrl = "http://localhost:8080/store/services/CreditCard";
          IProcessCredit client = null;
         int serviceResponse = 0;
          try {
               client = (IProcessCredit) factory.create(serviceModel, serviceUrl);
               serviceResponse = client.creditProcess("12345678901", 200);
        assertEquals("程序运行错误",1,serviceResponse);
            } catch (Exception e) {        }
     }
}
教员应说明以上代码的含义,并现场演示。说明JUnit控制台显示的含义。
监控SOAP信息[20分钟]
Axis--TCPMonitor 工具
教员说明Axis-TCPMonitor工具的使用,并讲解各显示的含义。
如何理解Web服务的优势?
说明使用XFire创建和发布Web服务的步骤
JUnit工具测试的规范有哪些?
 
 暂无
 暂无
 习题1:221页至222页选择题
 习题2:222页第1,2,3,4题
 习题3:预习在线培训