设计一个通用的servlet负责处理请求分配(Designing a generic servlet

2019-10-17 02:23发布

我有一个设计问题:)

我想有多个servlet,但我不希望每次都配置一个新的servlet用新名称,并延长了HttpServlet。 我想有一个通用的servlet其分派不同的参数,这实际上是处理请求的不同的具体类。

例如:theese两个电话将使用相同的通用servlet处理,但分派给不同的服务(类)。

/ serviceservlet?动作=动作1&参数1 = TEST1&param2的= TEST2 / serviceservlet?动作= 1动作&param21 =测试

这可以在许多不同的方式来完成,我不知道去哪个设计师。 一个我现在是使用吉斯对引导和看起来像这样:

@辛格尔顿公共类ServiceServlet延伸的HttpServlet {

private static final String PARAM_ACTION = "action";
private final Service1 service1; // Service1 is an interface
private final Service2 service2; // Service2 is another interface

@Inject
public ServiceServlet(final Service1 service1) {
    this.service1 = service1;
}

@Inject
public ServiceServlet(final Service2 service2) {
    this.service2 = service2;
}

@Override
public void doPost(final HttpServletRequest request, final HttpServletResponse response) {
    String action = ServletUtils.getStringParameter(request, PARAM_ACTION);

    if ("action1".equals(action)) {
    ... check that the parameters are correct before executing the below to have typesafety
        service1.process(request.getParameter("param1"), request.getParameter("param2"));
    } else if ("action2".equals(action)) {
        ... check that the parameters are correct before executing the below to have typesafety
        service2.process(request.getParameter("param21"));
    }
}

}

原则上,我想在一个更通用的方法来处理这些服务,我希望它尽可能以后添加新的服务一样容易,但我不想失去类型安全。 你认为什么是最好的策略?

/溴joynes

Answer 1:

如今Web程序员不写这种代码本身。 这些用web框架如Struts或JSF或Spring(如果你是一个Java程序员)从请求到实现请求类提供调度请求优雅的实现,映射。 还有更多,更多。

但是, 如果你真的想“滚你自己”,那么我建议,首先,如果statment你的servlet里面,你不使用。 您应该使用的地图(即一个HashMap),其映射URI请求到服务类。 在servlet初始化,则应该与服务类的实例来填充。 里面你的servlet添加了一个方法,getServiceClass(),其回报得到URI和行动从HttpServiceRequest和查找服务类。 更重要的是,你应该映射服务类,不要求参数,但要的URI:MYAPP / serviceX映射到ServiceX.class。 定义一个服务接口,服务,与执行方法和呼叫从在Servlet执行方法。

总结一下:
1)装载地图请求URI的服务类时该servlet inits一个。
2)定义的servlet和服务类之间的服务接口。
3)从servlet,抓住从请求的URI(URI的相关部分),并查找相应的服务并调用其执行方法(或任何名字,你选择放弃)。



文章来源: Designing a generic servlet which handles request dispatching