• 封装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响应





    }
  • 相关阅读:
    LoadRunner最新版本11.5
    NeoLoad 4.1 号称第一款全面支持移动性能测试的工具
    【广州】QTP自动化测试实战训练
    Oracle动态性能视图V$SESSION_LONGOPS
    Oracle体系(转)
    DBMS学习(一)
    C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
    .NET下读取PDF文本总结[转]
    处女篇
    网站开发周期
  • 原文地址:https://www.cnblogs.com/j-1-z-2-s-3/p/13583464.html
Copyright © 2020-2023  润新知