gpt4 book ai didi

java - Spring Web Application - 如何从页面 Controller 到业务层

转载 作者:行者123 更新时间:2023-11-28 22:10:01 24 4
gpt4 key购买 nike

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

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

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

我想到的一种方法是将我的业务对象作为属性添加到 myapp-servlet.xml 文件中的页面 Controller 。然而,这似乎将业务层和 Controller 集成得太多了,我不喜欢 - 这意味着每个 Controller 都需要业务对象的属性。

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

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

谢谢,(很抱歉问了这么长的问题 - 因此加粗了)
公里数

最佳答案

您的 Controller 需要以某种方式保存对您的业务对象的引用。为了充分利用 Spring,您需要将这些依赖项注入(inject)到您的 Controller 中。

这不是紧耦合,特别是如果这些业务对象实现了一个接口(interface),而您的 Controller 将只知道该接口(interface)。

依赖注入(inject)消除了对工厂的需求,因为您需要了解我们没有工厂的服务接口(interface):

SomeBusinessServiceInterface service = businessFactory.getBusinessService();

但请这样想:您必须以某种方式获取某个服务的引用(使用该服务接口(interface)以实现低耦合),并且很可能您需要缓存它——将其存储为实例变量。既然你已经有了它,提供一个 setter 就不会像现在这样耦合你的 web 和业务层。

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

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

关于java - Spring Web Application - 如何从页面 Controller 到业务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4763421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com