我个人在我的控制器(servlet)中使用反射,这基本上让我实现了这一点。
如果我有一个名为 UserController 的 servlet
调用 servlet 的主 url 将是 /user。知道了这一点,我总是将我的第一个参数传递为 ?action=add
然后在我的 servlet 中,我有一个名为 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 你会做一个 ajax 请求到 url:
localhost/projectname/user/add (if you use urlrewrite)
or
localhost/projectname/user?action=add (if you dont)