使用open source产品组装你的web应用架构(四)

使用open source产品组装你的web应用架构()

 
 
提供一个服务定位器(Providing a Service Locator
 
既然我们已经将我们的SericesDAO搭配起来了。我们需要把我们的Service显示到其他层。 这个通常是在Struts或者Swing这层里编码。一个简单方法就是用 服务定位器返回给Spring context 。当然,可以通过直接调用Spring中的Bean来做。
 
下面是一个Struts Actin 中的服务定位器的一个例子。
 
public abstract class BaseAction extends Action {
    
    

   
   
    
     
   
   
  private IOrderService orderService;
    
    

   
   
    
     
   
   
  public void setServlet(ActionServlet
    
    
                                 actionServlet) {
    
    
    super.setServlet(actionServlet);
    
    
    ServletContext servletContext =
    
    
               actionServlet.getServletContext();
    
    

   
   
    
     
   
   
    WebApplicationContext wac =
    
    
      WebApplicationContextUtils.
    
    
         getRequiredWebApplicationContext(
    
    
                                 servletContext);
    
    

   
   
    
     
   
   
      this.orderService = (IOrderService)
    
    
                     wac.getBean("orderService");
    
    
  }
    
    

   
   
    
     
   
   
  protected IOrderService getOrderService() {
    
    
    return orderService;
    
    
  }
    
    
}
   
   
 
 
UI 层配置 UI Layer Configuration

这个例子里UI层 使用了Struts framework. 这里我们要讲述一下在给程序分层的时候, 哪些是和Struts部分的。我们就从一个Struts-config.xml文件中的Action的配置信息开始吧。

struts-config.xml file.

<action path="/SaveNewOrder"
    
    
    type="com.meagle.action.SaveOrderAction"
    
    
    name="OrderForm"
    
    
    scope="request"
    
    
    validate="true"
    
    
    input="/NewOrder.jsp">
    
    
  <display-name>Save New Order</display-name>
    
    
  <exception key="error.order.save"
    
    
    path="/NewOrder.jsp"
    
    
    scope="request"
    
    
    type="com.meagle.exception.OrderException"/>
    
    
  <exception key="error.order.not.enough.money"
    
    
    path="/NewOrder.jsp"
    
    
    scope="request"
    
    
    type="com.
    
    
          meagle.
    
    
          exception.
    
    
          OrderMinimumAmountException"/>
    
    
  <forward name="success" path="/ViewOrder.jsp"/>
    
    
  <forward name="failure" path="/NewOrder.jsp"/>
    
    
</action>
    
    

  
  
   
    
  
  

SaveNewOrder 这个Action是用来持久化UI层里的表单提交过来Order的。这是Struts中一个很典型的Action;  注意观察这个Actionexception配置,这些Exceptions也在Spring 配置文件(applicationContext-hibernate.xml)配置了(就在 business service object transactionAttributes属性里)。 当异常在业务层被被抛出时,我们可以控制他们,并适当的显示给UI层。 

第一个异常,OrderException,在持久层保存order对象失败的时候被触发。这将导致事物回滚并且通过BO把异常回传到Struts这一层。

第二个异常,OrderMinimumAmountException也同第一个一样。

 

 

搭配整和的最后一步 通过是让你显示层和业务层相结合。这个已经被服务定位器(service locator)实现了(前面讨论过了), 这里服务层作为一个接口提供给我们的业务逻辑和持久层。 

 

SaveNewOrder Action Struts中用一个服务定位器(service locator)来调用执行业务方法的。 方法代码如下:

 

public ActionForward execute(

  ActionMapping mapping,

  ActionForm form,

  javax.servlet.http.HttpServletRequest request,

  javax.servlet.http.HttpServletResponse response)

  throws java.lang.Exception {

 

  OrderForm oForm = (OrderForm) form;

 

  // Use the form to build an Order object that

  // can be saved in the persistence layer.

  // See the full source code in the sample app.

 

  // Obtain the wired business service object

  // from the service locator configuration

  // in BaseAction.

  // Delegate the save to the service layer and

  // further upstream to save the Order object.

  getOrderService().saveNewOrder(order);

 

  oForm.setOrder(order);

 

  ActionMessages messages = new ActionMessages();

  messages.add(

      ActionMessages.GLOBAL_MESSAGE,

            new ActionMessage(

      "message.order.saved.successfully"));

 

  saveMessages(request, messages);

 

  return mapping.findForward("success");

}

 

总结

       这篇文章在技术和构架方面掩盖了很多低层的基础信息, 文章的主要的意图在于让你意识到如何给你应用程序分层。  分层可以“解耦”你的代码——允许新的组件被添加进来,而且让你的代码易于维护。  这里用到的技术只是专注于把“解偶”做好。 不管怎样,使用这样的构架可以让你用其他技术代替现在的层。 例如,你可能不使用Hibernate实现持久化。既然你在DAO中面向接口的编程的,所以你完全可以用iBATIS来代替。或者,你也可能想用Struts外的其他的技术或者框架替换现在的UI层(转换久层,实现层并不应该直接影响到你的业务逻辑和业务服务层)。 用适当的框架搭建你的Web应用,其实也不是一件烦琐的工作,更主要的是它“解耦”了你程序中的各个层。

 

 

后记:

      看完这篇文章后,只是觉得很喜欢,于是就翻译了,当然同时也准备着挨大家扔来的鸡蛋:)。

      这篇文章里并没有太多的技术细节,和详细的步骤。如果你从未使用过这些框架而在运行实例程序遇上困难的话,可以到CSDN论坛Java Open Source版发贴,我一定会详细解答的(啊哦,这不算做广告吧?),

      文章是从一个构架的角度讲述了如何搭配现有的开源框架进行分层,  有太多的术语我都不知道怎么表达,而且可能有很多语句存在错误。如果影响了你的阅读,请你直接点原文地址,我同时也象你说声抱歉。

 

作者简介:Mark Eagle 高级软件工程师,亚特兰大。

翻    译:Totodo(zhangli@telecomjs.com) 软件工程师

 

 

参考:

Strutshttp://jakarta.apache.org/struts/index.html

Spring: http://www.springframework.org

Hibernate: http://www.hibernate.org

           http://www.hibernate.org.cn

关于控制反转IOC和依赖注射:http://www.martinfowler.com/articles/injection.html

 
购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值