频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Struts+Spring+Hibernate组装web应用

来源:BLOG 作者: 出处:巧巧读书 2006-06-16 进入讨论组
上一页 1 2 3 4 5 
访问地址 http://www.qqread.com/java/2006/06/f884125002.html
供一个服务定位器

  既然我们已经把我们的服务和我们的DAO连起来了,我们需要把我们的服务暴露给其它层。通常是一个像使用Struts或Swing这样的用户接口层里的代码来使用这个服务。一个简单的处理方法是使用一个服务定位器模式的类从一个Spring上下文中返回资源。这也可以靠引用bean ID通过Spring来直接完成。

  这儿是一个在Struts Action中怎样配置一个服务定位器的例子:

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;
 }
}

  用户接口层配置

  示例应用的用户接口层使用Struts框架。这儿我们将讨论当为一个应用分层时和Struts相关的部分。让我们从在struts-config.xml文件里检查一个Action配置开始。

<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被用来持久化一个用户从用户接口层提交的订单。这是一个典型的Struts Action;然而,注意这个action的异常配置。这些Exceptions为我们的业务服务对象也在Spring 配置文件中配置了。当这些异常被从业务层掷出我们能在我们的用户接口里恰当的处理它们。第一个异常,OrderException,当在持久层里保存订单对象失败时将被这个action使用。这将引起事务回滚和通过业务对象传递把异常传回给Struts层。OrderMinimumAmountException,在业务对象逻辑里的一个事务因为提交的订单达不到最小订单数量而失败也将被处理。然后,事务将回滚和这个异常能被用户接口层恰当的处理。

  最后一个连接步骤是使我们的表现层和我们的业务层交互。这已经通过使用前面讨论的服务定位器来完成了。服务层充当一个到我们的业务逻辑和持久层的接口。这儿是 Struts中的SaveNewOrder Action可能怎样使用一个服务定位器调用一个业务方法:

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层。改变UI层的实现不会直接影响你的业务逻辑层或者你的持久层。替换你的持久层不会影响你的UI逻辑或业务服务层。集成一个web应用其实也不是一件烦琐的工作,靠解耦你的各应用层和用适当的框架组成它,它能变得更容易处理。 更多文章 更多内容请看Spring开源框架技术Spring框架技术篇Spring开发技术篇专题,或进入讨论组讨论。
上一页 1 2 3 4 5 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章