繁体   English   中英

Spring Web Application-如何从页面控制器到业务层

[英]Spring Web Application - How to get from page controllers to business layer

我正在用Eclipse编写Spring Web应用程序。 在WEB-INF中,我有一个web.xml文件,该文件为myapp-servlet.xml文件提供了servlet映射。

在myapp-servlet.xml中,我有一个用于页面控制器的bean。 我猜想Spring DispatcherServlet从其自己的ApplicationContext实例化了这些bean。 当我将项目作为服务器运行时,它将显示index.jsp文件-“ hello hello hello”。

现在我也猜想是要在这个index.jsp文件中放置一个提交按钮来发送发布数据,我的页面控制器将收到HTTP请求的通知。 但是,如何从页面控制器与应用程序的其余部分(业务层)进行交互? 我正在编写LDAP目录查找应用程序,一旦用户输入名称,我想返回一封电子邮件。 因此,当用户输入名称并点击“提交”时,我想与LDAP业务层进行通信。 我怎样才能做到这一点?

我想到的一种方法是将我的业务对象作为属性添加到myapp-servlet.xml文件中的页面控制器。 但是,按照我的喜好,这似乎过多地集成了业务层和控制器,这意味着每个控制器都需要业务对象的属性。

我想到的另一种方法是创建一种工厂,所有控制器都将其列为XML中的属性。 通过这个工厂,控制者可以访问业务对象。 工厂是两层之间的接口。

这些都是自定义的想法,我怀疑有一个预制的解决方案。 已经有解决此问题的方法了吗? (将业务层与Web /页面控制器层集成在一起?)还是由程序员设计出我上面概述的定制解决方案?

谢谢,(并为很长的问题感到抱歉-粗体表示)
KTM

您的控制器需要以某种方式保留对业务对象的引用。 为了充分利用Spring,您将需要将这些依赖项注入到控制器中。

这并不是紧密耦合,特别是如果那些业务对象实现了一个接口并且您的控制器将仅知道该接口。

依赖注入消除了工厂的需要,因为您需要了解没有工厂的服务接口:

SomeBusinessServiceInterface service = businessFactory.getBusinessService();

但是要这样考虑:您必须以某种方式获取某个服务的引用(使用该服务接口进行低耦合),最有可能需要缓存该内容-将其存储为实例变量。 既然您已经拥有了,那么提供一个setter不会使您的网络和业务层之间的耦合超过现有的耦合。

如果setter看起来不自然(有时是),则使用构造函数注入将其实现为经典的OO聚合。

关于应用程序上下文配置,Spring允许您使用web.xml中的ContextLoaderListener定义Web应用程序范围的应用程序上下文。 通常,这是所有业务Bean定义都应驻留的位置。 您的-servlet.xml应用程序上下文已绑定到servlet,通常应包含MVC内容,在根上下文中引用Bean,因为该上下文自动成为所有-servlet.xml的父级(因此,所有Bean对于您而言都是可见的小服务程序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM