针对servlet的缺点,可以对servlet进行重构,使其开发起来更简便,更容易,更适合团队开发。

重构的目标:
    1.只写一个servlet或者只写过滤器.
    2.不用再写其它的serlvet,这样可以减少web.xml这个配置文件中的代码
    3.原来需要写的servlet,改写成action
    3.在action中把HttpServletRequest和HttpServletResponse参数传递过去
    4.在过滤器中就采用java的反射机制来调用action
eg:
做一个转发过滤器
     public void doFilter(ServletRequest request, ServletResponse response,FilterChain arg2)                       throws IOException, ServletException {
        this.request = (HttpServletRequest)request;
        this.response = (HttpServletResponse)response;
        //获取请求路径
        String uri = this.request.getRequestURI();
 
        String actionName = ServletUtils.convert(uri);
       //利用java的反射机制调用该方法
       try {
              Action action = (Action)Class.forName(actionName).newInstance();
              //forward指定要跳转到的jsp页面
              String forward = action.execute(this.request, this.response);
              
               // 跳转的方法
               //  * 重定向
               //  request里的参数不起作用
               //  this.response.sendRedirect(jsp页面);
               //  * 转发
               //  放在request作用域里的值可以取出来 
              this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
           } catch (InstantiationException e) {
                    e.printStackTrace();
           } catch (IllegalAccessException e) {
                    e.printStackTrace();
           } catch (ClassNotFoundException e) {
                    e.printStackTrace();
           }
   }