package com.softeem.servlet;
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;
/*
*中央控制器: 统一控制客户端的请求跳转目标
*@Author Keerloo 2020/8/27 8:58
*/
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取需要执行的方法名称
String methodName = req.getParameter("method");
//根据方法的名称获取需要执行的方法对象
try {
Method method = this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
//执行servlet目标方法,并获取方法的返回值
Object obj = method.invoke(this, req, resp);
System.out.println("返回值:"+obj);
//当返回值部位null是才处理跳转
if(Objects.nonNull(obj)){
//将返回值转换为String类型
String target = obj.toString();
if(target.startsWith("redirect:")){
//重定向
target = target.substring("redirect:".length());
System.out.println("重定向目标位置:"+target);
resp.sendRedirect(target);
}else{
//请求转发
req.getRequestDispatcher(target).forward(req,resp);
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
简单的中央控制器BaseServlet
最新推荐文章于 2024-07-22 14:15:06 发布