《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > STRUTS框架应用中Web服务扩展模型的研究
STRUTS框架应用中Web服务扩展模型的研究
王力生 沈 骏
上海同济大学电子与信息工程学院计算机系(200092)
摘要: 分析了Struts框架和Web服务在体系结构和应用模式上的异同点,提出了一种通过改写开源Struts框架的部分代码来扩展Web服务的实现方式,并给出了简单的构造。
关键词: Struts框架
Abstract:
Key words :

摘   要: 分析了Struts框架和Web服务在体系结构和应用模式上的异同点,提出了一种通过改写开源Struts框架的部分代码来扩展Web服务的实现方式,并给出了简单的构造。
关键词: Struts框架  Web服务  MVC框架模型

  将Web服务应用集成进现有的基于Struts框架的企业Web应用中,能够很好地实现以松耦合的方式共享和协调各类分散的计算资源,同时又能够保持Struts应用原有的可扩展性、可维护性好的优点。本文主要讨论在开源Struts框架中基于Action类扩展Web服务的模型。
1  Struts框架应用模式
  Struts以一个MVC(模型视图控制器)框架的形式提供给企业应用开发者使用。它规定了MVC应用的体系结构, 明析了整个设计、协作构件之间的依赖关系及责任分配和控制流程,为构件复用提供了上下文(Context)关系。
  Struts其实是一个MVC设计模式的J2EE表现。它通过把一组相互协作的类(组件)、Java Servlet以及JSP tag lib结合在一个统一的框架内(其中ActionServlet处理客户请求),利用配置的ActionMapping对象把请求映射到Action处理器对象进行处理。Action处理对象访问ActionForm中的数据,处理和响应客户请求,调用后台封装了具体业务逻辑的Bean组件。Action处理器对象根据处理结果通知Controller,由Controller进行下一步的处理。Struts的体系结构如图1 所示。


  下面通过图1所示的体系结构图分析Struts框架的Web应用模式。
  (1)模型部分。在Struts中,模型(Model)由一系列的JavaBean和EJB组件构成,用来设计和实现系统的业务逻辑。根据不同的请求从Action派生具体Action处理对象。使用“做什么”的任务来调用由Bean构成的业务组件。创建由ActionForm的派生类实现对客户端表单数据的封装。
  (2)控制器部分。Struts中的Controller 主要是其自身提供的ActionServlet,而ActionServlet 的核心就是struts-config.xml配置文件,它包含了所有页面导航的定义。ActionServlet 接受请求并根据配置文件中的定义将控制转移到适当的Action 类。其余的控制逻辑以及对Model的访问由Action类负责完成。
  (3)视图部分。Struts中的View主要由JSP技术实现,并利用自定义的标记库方便地和系统的Model部分交互。这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装,同时这些自定义标记还提供了很多定制页面的功能。
2  STRUTS框架扩展Web服务模型
2.1 MVC模型特征的Web服务体系结构
   通常有二种基于J2EE实现Web服务的方式:一种是把Servlet作为Web服务端点进行开发;另一种是公开无状态EJB组件作为Web服务端点进行开发。相比较而言,把EJB作为Web服务端点进行开发具有明显的优势。
  通过无状态 EJB 组件把各种服务和业务流程公开为 Web 服务的SOA框架如图2所示。图中所示的Web服务的体系结构是一种典型的MVC model2的框架。

  客户端(Client):用户通过 Web 浏览器与不同的应用程序交互。
应用程序控制器(Application controller):对应于Struts框架中的Controller部分,提供主控制器 servlet。它负责初始化、委派请求和响应请求处理程序。
  请求处理程序(Request processor)、请求执行程序(Request handlers)和业务定位程序(Business locators):这三部分功能的组合对应于Struts框架中的Action部分。其中请求处理程序调用相应的请求执行程序完成要求的处理,对请求进行预处理。请求执行程序依靠业务定位程序发现相应的服务,完成具体的请求活动。业务定位程序负责隐藏查找服务的复杂性,并提供缓存逻辑。
  会话 Facades(Session Facades)和EJB Web 服务(EJB Web services):对应于Struts框架中的ActionForm部分,通过聚合来自多个系统或服务的方法简化复杂对象的视图。会话 facades是EJB Web服务方法的包装器。根据 EJB 1.4规范,Web服务端点可以模型化为无状态的会话 Bean。
2.2 Struts框架扩展Web服务
  在用扩展构建得比较好的Struts应用程序支持 Web服务的时候,可以利用Web服务体系结构的MVC模式特性在Struts框架的相应部分进行修改和扩充,从而在不改变原有应用架构和具体实现的基础上方便有效地使应用程序具有Web服务的功能。
  对比Struts框架和Web服务的体系结构,可以发现:二者在Controller部分的功能十分相似,在模型服务部分都是基于EJB模型执行一切必须的商业逻辑处理,然后从存储数据仓库中取出所需要的数据。所以Struts框架扩展Web服务的关键问题在于如何把Web服务体系结构中的请求处理程序、请求执行程序和业务定位程序三部分的功能嵌入Struts框架的结构中。
  本模型通过将Web服务的控制流程包装成相应的Action类——WSAction类,为企业应用提供Web服务和定购Web服务。在Struts框架中,根据不同的请求从Action派生具体Action处理对象,完成“做什么”的任务来调用由Bean构成的业务组件。在扩展Web服务的框架中,Servlet根据客户端的请求是Web服务的请求而调用相应的WSAction,派生具体的Action处理对象。完成“做什么”的任务调用模型服务部分,模型服务组件聚集相关的预定义数据访问对象,然后将它传回给 ActionServlet 或者 WSAction 类。所有的错误或者确认信息都会通知给 ActionServlet 或 WSAction。
  Struts框架的Web服务结构如图3所示。

  WSAction类主要包括以下功能函数调用:
  (1)请求参数的预处理。请求所包含的参数形式有 Java 对象、Java原始参数、XML文档或者SOAP文档分片(例如SOAP Element对象)。这些类型必须转化成内部所支持的schema(例如预定义的Java数据访问对象)。
  (2)身份验证和授权使用。为了保护公开的Web服务,需要对所有订购者执行身份验证。所有想使用Web服务的客户都要经过这样的身份验证逻辑。可以使用基本用户身份验证或者数字证书来实现此目的。
  (3)错误处理。错误都是在WSAction类中处理的,减少了服务器端的开销。在向外提供Web服务时,WSAction抛出诸如SOAPFaultException这样的异常,检查新来的请求并且抛出诸如缺少强制字段的异常。在订阅Web服务时,WSAction捕捉到由服务供应者所抛出的所有SOAP异常并且将它们更改为WSAction所要求的格式。Trace类用来记录这些异常。
  (4)Web服务缓存。当服务的请求信息主要是只读数据或者所请求信息比所要求的更新速率变化得还要慢时,WSAction调用缓存服务,这样可避免不必要的数据库访问。
  下面的程序给出了一个简单的WSAction实现。
  public WSActionForward perform(
    ActionMapping mapping,
    ActionForm form,
    XmlServletRequest request,
    XmlServletResponse response)
  throws IOException,ServletException {
             //对XML请求进行预处理
  WSPreTreatment
     Pretreat=new(WSPreTreatment);
     Pretreat.treat(request);
             //抽取所需的属性和参数
  WsForm wsForm=(WsForm) form;
  String parameter=wsForm.getParm( );
  WSActionErrors
  errors=new WSActionErrors( );
            //进行服务认证
  WSAuthentication
  Auth=new WSAuthentication( );
  If Auth.check(parameter)=″ok″
            //调用model service..
try {
    business.db.processaction(parameter);
             //服务结果缓存
    WSCaching
      Caching=new WSCaching( );
    Caching.Add( );
  } catch (Exception e) {
           //将错误回显给用户
          errors.add(″Web services″,new WSActionError(″db error″));
    }
//将控制权转交给Action.xml中指定的′Next′ URI
     return(mapping.findForward(″Next″));
  }
3  结束语
  通过分析开源的MVC Model2开发框架Struts,把分布式应用的一种新的形式——Web服务引入现有的、构建得较好的Struts框架的Web应用中。通过对比Struts框架和Web服务在体系结构上共有的MVC模式发现:集成的关键是在控制层和模型层之间信息的传递和衔接。因此,添加了Struts中的Action类WsAciton,取得了较好的效果,方便地实现了扩展Web服务。
参考文献
1   ApacheSoftware.User and Developer Guides.http://struts.   apache.org/userGuide/index.html,2004
2   Naveen Balani.Design Service-Oriented Architecture Frameworks with J2EE Technology.http://www-900.ibm.com/developerWorks/cn/webservices/ws-designsoa/index_eng.shtml,2004
 

此内容为AET网站原创,未经授权禁止转载。