功能:
1、实现一个类多个请求处理方法的简化
2、根据处理方法返回值处理请求
package com.acme.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 一个类多个请求处理方法,每个请求处理方法的原型与service相同
*
* 原型=返回值 + 方法名称 + 参数列表
*
* @author acme.w
*
*/
public class BaseServlet extends HttpServlet {
private static final long serialVersionUID = -1904145359611258739L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1、获取方法名称
String methodName = req.getParameter("method");
//2、根据方法名称和参数列表,获取方法
Method method = null;
try {
method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
} catch (Exception e) {
throw new RuntimeException("获取(" + methodName + ")方法失败:", e);
}
//3、执行方法
try {
String result = (String) method.invoke(this, req, resp);
if (result != null && !"".equals(result)) {
String[] datas = result.split(":");
//转发
if ("f".equals(datas[0])) {
req.getRequestDispatcher(datas[1]).forward(req, resp);
} else //重定向
if ("r".equals(datas[0])) {
resp.sendRedirect(req.getContextPath() + datas[1]);
}
}
} catch (Exception e) {
throw new RuntimeException("执行(" + methodName + ")方法失败:", e);
}
}
}