【发布时间】:2009-07-24 08:56:49
【问题描述】:
我有一个设计问题:)
我想拥有多个 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 乔恩斯
【问题讨论】:
-
这是作为练习还是实际使用?如果这是针对真实系统的,请使用适当的 MVC 框架,不要自己编写。例如,Spring 完全符合您的描述。