zoukankan      html  css  js  c++  java
  • 过滤器的简介

    01为什么使用过滤器?

            我们目前书写项目中遇到的问题?

    A、目前使用的baseServlet的优点就是方便可以进行乱码的统一的处理,但是如果我们以后不使用servlet,那么我们在进行中文乱码处理的时候就需要在每一个servlet 中去书写,但是比较麻烦。

    B、在进行登陆拦截处理的时候,我们需要把拦截的代码在每一个页面中重复的书写,这样,就会变的非常的麻烦。

     

          最终的问题: 重复的代码在项目中多次的使用书写。

          解决方案: 过滤器

    02什么是过滤器?

    使用过滤器进行乱码解决

    Class文件

    public class EncFilter  implements Filter {
         //初始化方法 --执行一次
        String abc;
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //UTF-8
            abc = filterConfig.getServletContext().getInitParameter("abc");
        }
        //服务请求方法---执行多次
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
            //到达目标资源之前的处理操作
            req.setCharacterEncoding(abc);
            //执行下一个过滤器或者目标资源
            chain.doFilter(req,resp);
            //离开服务器之前的处理操作
        }
        //销毁--执行一次
        @Override
        public void destroy() {
        }
     <!--全局参数-->
     <context-param>
         <param-name>abc</param-name>
         <param-value>utf-8</param-value>
     </context-param>
    <filter>
        <filter-name>EncFilter</filter-name>  <filter-class>com.bjsxt.filter.EncFilter</filter-class>
    </filter>
    

      

    使用过滤器进行登陆的控制

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest  request=(HttpServletRequest) req;
        HttpServletResponse  response=(HttpServletResponse)resp;
    
        Object emp = request.getSession().getAttribute("emp");
        String uri = request.getRequestURI();
        String queryString = request.getQueryString();
        System.out.println(uri+"--"+queryString);
    if("/sxtoa/login.jsp".equals(uri)||"/sxtoa/servlet/EmployeeServlet?method=empLogin".equals(uri+"?"+queryString)){
            filterChain.doFilter(request,response);
        }else {
            if(emp==null){
                //用户没有登陆           response.sendRedirect(request.getContextPath()+"/login.jsp");
            }else {       //直接放行  --执行目标的资源
                filterChain.doFilter(request,response);
           }
        }
    }
    

      

    过滤器更多内容

    问题1:多个过滤器,执行的顺序怎么确定?

    <filter-mapping>的顺序确定执行的顺序

    问题2:每个请求和响应都要经过过滤器吗?

    不是,是否经过过滤器,经过几个过滤器由过滤器的路径来定;

    <url-pattern>/servlet/*</url-pattern>     <url-pattern>/*</url-pattern>

    问题3:请求和响应时是不是分别将过滤器代码从头到尾执行一遍

    不是;请求时执行预处理操作,响应时执行后处理操作;

    请求时过滤器的执行顺序如果是1,2,4,响应时过滤器的执行顺序4,2,1

    问题4:在过滤器中能否跳转到项目的其他任意资源

    可以

    举例:如果一个过滤器是进行权限验证,没有登录,就不让访问目标资源,直接跳转到login.jsp

    问题5:重定向和转发是否经过过滤器

    重定向经过

    默认转发不经过,因为是服务器端跳转。可以通过配置解决

  • 相关阅读:
    Ajax调用WCF报405错误
    字符串转json方法
    正则取括号里面的内容
    string[] 转int[] 的方法
    C# 中结构与类的区别
    通用的权限模块是如何设计的?
    .net打包自动安装数据库!
    VS.net 2005快捷键一览表
    Windows Forms DataGridView 中合并单元格
    VS2005 制作安装程序
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14291698.html
Copyright © 2011-2022 走看看