有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何向业务逻辑发送请求参数

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


共 (1) 个答案

  1. # 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类型的交互和序列化,而逻辑封装在接口后面的其他地方,因此每个类都可以单独进行测试