VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望(無理難題)っぽく
見えてしまっていますが、おそらく単純に
「現在唯一サーブレットで条件分岐だらだら書いてるロジックを
1リクエスト1クラス(1メソッド)で処理させたいんだよね~」
という話ですよね。
であれば、単純にSpringフレームワークを導入して、リクエストURLと
Controllerのマッピングを行えば、リクエストごとの処理をクラスやメソッドに切り分けて
処理をすることができます。
今から外部FWの導入を検討するのは難しい、とか、どうしてもサーブレットは1つで処理させたい
(現状の動きはあまり壊したくない)ということであれば
・各画面の処理を記述するためのベースクラス(インターフェース)を用意する
・処理分岐用パラメータと、実処理クラスのマッピングを行う
(enumにString param, BaseClass execClass みたいなフィールドを持たせる)
・処理分岐用パラメータから、実処理クラスを取得する
(処理分岐用パラメータからenumを取得して、classをnewInstance()とかでインスタンス化する)
・ベースクラスのexecを呼ぶ
こんな感じにすれば、今If文で処理している個所を、別クラスに切り出して
ぱっと見、formのsubmit毎にイベントが処理されているように作ることができます。
Java
1 public void exec() throws InstantiationException, IllegalAccessException {
2 String param = "foo";
3
4 ActionMapping m = ActionMapping.of(param);
5 if (m == null) {
6 // 404
7 return;
8 }
9
10 BaseAction action = m.getAction().newInstance();
11 action.execute();
12 }
13
14
15 public enum ActionMapping {
16
17 FOO("foo", FooAction.class);
18
19 private String param;
20 private Class<? extends BaseAction> action;
21
22 private ActionMapping(String param, Class<? extends BaseAction> action) {
23 this.param = param;
24 this.action = action;
25 }
26
27 public String getParam() {
28 return param;
29 }
30
31 public Class<? extends BaseAction> getAction() {
32 return action;
33 }
34
35 public static ActionMapping of(String param) {
36 for (ActionMapping m : ActionMapping.values()) {
37 if (m.getParam().equals(param)) {
38 return m;
39 }
40 }
41 return null;
42 }
43 }
44
45 public interface BaseAction {
46 void execute();
47 }
48
49 public class FooAction implements BaseAction {
50
51 @Override
52 public void execute() {
53 //リクエストごとの処理を記述する
54 }
55 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/08/25 03:45