個人的には、コントローラー(サーブレット)でリフレクションを使用しているので、基本的にこれを実現できます。
UserControllerというサーブレットがある場合
サーブレットを呼び出すメインのURLは/userになります。これを知って、私は常に最初のパラメーターを?action=addとして渡します
次に、サーブレットにaddまたはactionAddというメソッドがあります。どちらでもいいです。
次に、次のコードを使用します。
String str = String str = request.getParameter("action").toLowerCase();
Method method = getClass().getMethod(str, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(this, request, response);
説明:
strにはアクションパラメータ値があります。この場合は追加します。メソッドメソッドは、指定された名前(str)とその予想されるパラメータータイプを持つメソッドへの参照になります。
次に、メソッドを呼び出して、コンテキスト、要求、および応答を渡します。
addメソッドは次のようになります。
public void add(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//do add stuff
String url = "/user/index.jsp";
RequestDispatcher dispatcher = context.getRequestDispatcher(url);
request.setAttribute("User", user);
dispatcher.forward(request, response);
}
文字列を返すだけかどうかはわかりません。しかし、これはあなたに基本的な考えを与えるはずです。
リフレクションはコストがかかる可能性があることに注意してください。ただし、このように実際に影響を与えることはないはずです。また、メソッド名/シグネチャが完全に一致する必要があるため、エラーが発生しやすくなります。
したがって、jqueryからURLに対してajaxリクエストを実行します。
localhost/projectname/user/add (if you use urlrewrite)
or
localhost/projectname/user?action=add (if you dont)