我有一个设计问题:)
我想要多个 servlet,但我不想每次都用新名称配置一个新的 servlet 并扩展 HttpServlet。我正在考虑拥有一个通用 servlet,它将不同的参数分派给实际处理请求的不同特定类。
例如:这两个调用将由同一个通用 servlet 处理,但分派给不同的服务(类)。
/serviceservlet?action=action1¶m1=test1¶m2=test2 /serviceservlet?action=action2¶m21=test
这可以通过许多不同的方式完成,我不知道该采用哪种设计。我现在拥有的是使用 guice 进行引导,看起来像这样:
@Singleton 公共类 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"));
}
}
}
原则上,我想以更通用的方式处理服务,并且我希望以后添加新服务尽可能容易,但我不想失去类型安全性。你认为最好的策略是什么?
/Br 乔恩斯