デザインに関する質問があります:)
複数のサーブレットが必要ですが、毎回新しい名前で新しいサーブレットを構成してHttpServletを拡張したくありません。私は、実際にリクエストを処理しているさまざまな特定のクラスにさまざまなパラメータをディスパッチする汎用サーブレットを用意することを考えていました。
例:これらの2つの呼び出しは、同じ汎用サーブレットによって処理されますが、異なるサービス(クラス)にディスパッチされます。
/ serviceservlet?action = action1&param1 = test1&param2 = test2 / serviceservlet?action = action2&param21 = test
これはさまざまな方法で行うことができ、どのデザインを使用するかわかりません。私が今持っているのは、ブートストラップにguiceを使用していて、次のようになります。
@Singleton public class ServiceServlet extends 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 joynes