能处理多个请求的Servlet需要继承BaseServlet
请求之后如果需要“请求转发”则return “forward:/xxx.html”
请求之后如果需要“重定向”则return “redirect:/xxx.html”
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Objects; public class BaseServlet extends HttpServlet { private static final String SUFFIX_FORWARD = "forward:"; private static final String SUFFIX_REDIRECT = "redirect:"; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String uri = req.getRequestURI(); int index = uri.lastIndexOf("/"); String methodName = uri.substring(index + 1); Class<? extends BaseServlet> clz = this.getClass(); try { //根据方法名称和参数类型获取方法对象 Method method = clz.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); //执行方法 Object returnVal = method.invoke(this, req, resp); if (Objects.nonNull(returnVal)) { String path = returnVal.toString(); if (path.startsWith(SUFFIX_FORWARD)) { req.getRequestDispatcher(path.replace(SUFFIX_FORWARD, "")).forward(req, resp); } else if (path.startsWith(SUFFIX_REDIRECT)) { resp.sendRedirect(path.replace(SUFFIX_REDIRECT, "")); } else { req.getRequestDispatcher(path).forward(req, resp); } } } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } }