zoukankan      html  css  js  c++  java
  • 封装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响应





    }
  • 相关阅读:
    线程资料整理
    泛型委托使用
    生成树形结构的JSON字符串代码(C#)供前端Angular tree使用.
    Bootstrap学习笔记(6)
    Bootstrap学习笔记(5)
    Bootstrap学习笔记(4)
    渗透利器-kali工具 (第一章-3) Kali Linux 基础命令介绍下
    渗透利器-kali工具 (第一章-2) Kali Linux 基础命令介绍上
    渗透利器-kali工具 (第一章-1) Kali
    渗透利器-kali工具 (第一章) 前言篇
  • 原文地址:https://www.cnblogs.com/j-1-z-2-s-3/p/13583464.html
Copyright © 2011-2022 走看看