如何将错误从服务层传递到 vanilla Java Servlet? [复制]

Posted

技术标签:

【中文标题】如何将错误从服务层传递到 vanilla Java Servlet? [复制]【英文标题】:How can I pass errors from service layer to vanilla Java Servlets? [duplicate] 【发布时间】:2022-01-23 08:13:35 【问题描述】:

我目前正在使用 TomEE 8.0.8 WebProfile。除了 TomEE 中包含的内容之外,我无法使用 Spring 或其他任何东西。

我正在尝试实现一个 3 层应用程序。该应用程序已经以 2 层方式实现(业务逻辑编写在 HTTPServlet 类中,这些类调用 DAO,然后分派到 .jsp 文件)。我在尝试不将业务逻辑与 Servlet 实现细节联系起来时遇到了一些困难。

我所有的服务类都是无状态 EJB,其方法可以将 DTO 作为参数并返回其他 DTO 作为结果。

如果需要,这些服务类应该返回一个以上的错误(例如:attr 1 的长度错误,attr 2 的格式错误,attr 3 为空):我的想法是创建一个带有List<> 错误的自定义异常从服务层抛出。但是,我不知道这种方法是否正确,也不知道是否有一些干净的方法可以在控制器上处理这些异常,而无需到处“尝试/捕获”。 (也许是一个拦截器?香草 servlet 有可能吗?)

【问题讨论】:

这不是重复的。这个问题是关于解耦业务层(EJB)和前端层(Servlets)。引用的副本是关于在表示层(jsp)中显示消息。 @gmanjon 所有关于 SO 的问题都被许多人视为重复问题或 XY 问题 【参考方案1】:

您的问题更多地与设计方法有关,而不是与实施有关,因此它可以有多个答案。但是,在您的 3 层应用程序的上下文中,您遵循的是:

JSP(客户端浏览器)--> Servlet --> EJB --> 数据库

从这个角度来看(这完全是我的观点),这是传统上使用的一种合理方法,您可以在 servlet 层中进行数据验证,最好使用 Java Validation Framework 之类的框架。拦截器方法也很合理,这里可以利用 servlet 过滤器来提供验证。

【讨论】:

以上是关于如何将错误从服务层传递到 vanilla Java Servlet? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vanilla javascript 通过 ajax 将多张照片上传到 Laravel 应用程序?

如何将对象类型从业务层传递到数据层

无法将具有 Enum 属性的对象从存储库项目传递到服务结构服务

如何将位图从 Activity 传递给服务

如何将数据从表示层传递到业​​务逻辑层? (ASP.NET MVC 5)

如何将结果集作为输入从java传递到oracle存储过程