【问题标题】:How to send request parameters to business logic [closed]如何将请求参数发送到业务逻辑[关闭]
【发布时间】:2016-03-03 03:46:30
【问题描述】:

我知道将业务逻辑嵌入到您的 servlet 中是个坏主意,在应用程序服务器端这样做是可以接受的。有时您的请求中有很多参数,您需要将所有参数发送到代表您的业务逻辑的类。怎么做会更好? (我考虑过 JavaBeans,但它们是为另一个目的而设计的。) 谢谢。

【问题讨论】:

  • 如果你说 JavaBeans,你是指 EJB 的吗?因为它们实际上是业务逻辑应该存在的地方。
  • 不,我是说 JavaBeans。我还没学过EJB。
  • 任何具有零参数构造函数的类,其属性通过可序列化的 getter 和 setter 访问,都是 JB。见here。最初(当 COM 和 SOM 成为流行语时)bean 旨在成为组件框架的基石,同时它们的使用更加普遍。所以请随意使用 bean,尽管我觉得如果您同时开始学习 EJB,您会帮自己一个忙。 Oracle JEE 教程非常好,IMO。

标签: java servlets business-logic application-server


【解决方案1】:

你应该把你的业务逻辑分离成一个单独的类,它实现一个接口,servlet类应该简单地负责将输入流反序列化为某种请求对象,将其传递给业务逻辑对象,然后序列化响应。如果您添加一点 DI 魔法,那么定位和构建要使用的业务逻辑类的正确实现会变得相当简单。

例子

public interface TheBusiness {
    MyBusinessResponse doProcess(MyBusinessRequest request);
}

public final class MyBusinessClass implements TheBusiness {
    @Override
    public MyBusinessResponse doProcess(MyBusinessRequest request) {
        // all  the complex logic goes here.
        return response;
    }
 }

 public class MyBusinessServlet extends HttpServlet {
     private final TheBusiness theBusiness;
     private final ObjectMapper objectMapper;

     public MyBusinessServlet() {
         theBusiness = // locate and construct implementation.
         objectMapper = // Initialise Jackson deserialisation.
     }

     public void doGet(HttpServletRequest request, HttpServletResponse response) {
         final MyBusinessRequest requestBody = objectMapper.readValue(
                                              request.getInputStream(), MyBusinessRequest.class);
         final MyBusinessResponse responseBody = theBusiness.doProcess(requestBody);
         objectMapper.writeValue(response.getOutputStream(), responseBody));
     }
 }

这里唯一棘手的事情是实例化您的 MyBusinessClass。不同的 DI 框架有一些模式可以提供帮助。大多数情况下,它们涉及使用框架提供的 servlet 为您完成所有编组和解组,您只需要编写业务逻辑并适当地注释一个类。 Spring-MVC 和 Jersey 都是这样做的。重要的是 servlet 类处理所有 HTTP 类型的交互和序列化,而逻辑被封装在接口后面的其他地方 - 因此每个类都可以单独进行很好的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多