• 封装servlet控制器 BaseServlet


    最开始我们要实现处理一个表单时就需要一个Servlet,这样如果需要提交的表单越多,我们就需要创建越多的Servlet类 实在是非常不方便,后来我们发现可以通过隐藏域传值的方法实现一个Servlet实现多个功能的实现 但是这样其实也不是特别方便 因为当功能多的时候 写的switch case语句就很多 非常的繁琐 因此我们就萌生出一个想法: 能不能封装一个工具类 实现一个Servlet类实现多个功能并且构建起来很方便 , 之后通过努力 封装出了BaseServlet工具类 具体代码如下

    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 target = obj.toString();
    if(target.startsWith("redirect:")){
    //重定向
    target = target.substring("redirect:".length());
    resp.sendRedirect(target);
    }else{
    //
    req.getRequestDispatcher(target).forward(req,resp);
    }
    }

    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
    e.printStackTrace();
    }

    }

    首先通过反射原理 得到隐藏域method参数的在值(即方法的名字) 加上方法参数的类对象 获得方法本身 调用此方法 得到该方法的返回值
    之后进行判断 : 如果返回的字符串是以"redirect:"开头 那么就是重定向 否则就是请求转发 这样我们就能实现基本的多表单的请求响应和
    response响应





    }
  • 相关阅读:
    HDU4911——归并排序——Inversion
    HDU5400——Arithmetic Sequence
    HDU5396——区间DP+排列组合——Expression
    DFS(连通块) ZOJ 2743 Bubble Shooter
    Codeforces Round #345 (Div. 2)
    Codeforces Round #344 (Div. 2)
    8VC Venture Cup 2016
    Manthan, Codefest 16
    DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
    全排列 UVA 11525 Permutation
  • 原文地址:https://www.cnblogs.com/j-1-z-2-s-3/p/13583464.html
Copyright © 2020-2023  润新知