zoukankan      html  css  js  c++  java
  • 过滤器和监听器

    一、过滤器

      1、过滤器的实现

        1)实现java.servlet.Fileter接口

          

        2)重写方法

           init():初始化,服务启动时加载,只加载一次

          doFilter():过滤处理方法

          destroy():销毁,服务关闭时销毁

      2、过滤器链执行顺序

        先配置先执行(请求时的执行顺序);响应时:以相反的顺序执行。

          

      3、filter过滤器

        1)在请求到达资源之前,拦截request请求

        2)在响应到达客户端之前,拦截response响应

        3)当访问资源时,如果设置了过滤器的路径,过滤器需要放行,否则请求无法到达资源

        4)过滤器链:

          顺序:请求的顺序是配置文件中的先后顺序,响应的顺序相反

          过滤器链中,第一个过滤器如果没有放行,则无法到达下一个过滤器,资源也无法访问

          原理:会拦截到请求的过滤器:第一个过滤器如果放行,会进入下一个过滤器,如果没有下一个过滤器,则进入指定资源

        5)chain.doFilter(request,response);方法之前处理请求相关信息,方法之后处理响应相关信息

      

      4、过滤器过滤Tomcat7和Tomcat8针对GET和POST请求乱码

        

    package com.shsxt.filter;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    import javax.servlet.http.HttpServletResponse;
    
    public class EncodingFilter implements Filter{
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
                throws IOException, ServletException {
            //http
            HttpServletRequest request=(HttpServletRequest)req;
            HttpServletResponse response=(HttpServletResponse)resp;
            //请求post
            request.setCharacterEncoding("UTF-8");
            //响应
            response.setContentType("text/html;charset=utf-8");
            //得到请求方式get/post
            String method=request.getMethod();
            //判断是post还是get请求
            if ("GET".equals(method.toUpperCase())) {
                //获取服务器版本
                String serverInfo=request.getServletContext().getServerInfo();
                //判断服务器版本是Tomcat7还是Tomcat8
                String versionStr=serverInfo.substring(serverInfo.indexOf("/")+1, serverInfo.indexOf("/")+2);
                if (Integer.parseInt(versionStr)<8) {
                    MyEncoding myEncoding=new MyEncoding(request);
                    HttpServletRequest request2=(HttpServletRequest)myEncoding;
                    chain.doFilter(request2, response);
                    return;
                }
            }
            
            chain.doFilter(request, response);
            //判断
            
            
            
        }
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
        class MyEncoding extends HttpServletRequestWrapper{
            HttpServletRequest request;
            public MyEncoding(HttpServletRequest request) {
                super(request);
                // TODO Auto-generated constructor stub
                this.request=request;
            }
            String value="";
            @Override
            public String getParameter(String name) {
                try {
                    value=new String(request.getParameter(name).getBytes("ISO-8859-1"),"utf-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return value;
            }
            
        }
    
    }
    EncodingFilter

    二、监听器

      监听器是一种servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HTTPSession,ServletRequest的创建和销毁等。

      1、实现

        监听器有三类8种:

          ⑴监听生命周期:实现接口ServletRequestListener、HttpSessionListener、ServletContextListener

          ⑵监听值的变化:实现接口ServletRequestAttributeListener、HttpSessionAttributeListener、ServletContextAttributeListener

          ⑶针对session中的对象:监听session中的java对象(javaBean)是javaBean直接实现监听器的接口

      

      2、servlet2.5 监听器配置

         

    三、Servlet3.0注解

      1、解释

        @WebServlet,配置Servlet

        @WebFilter,配置过滤器

        @WebListener,注解监听器

        @MultipartConfig,将一个Servlet标识为支持上传

          Servlet3.0将mulipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。

      2、通过注解,上传文件

        如果是文件上传表单

          1、必须设置enctype="multipart/form-data",设置MIME编码

          2、请求方式为POST

          3、文件域需要设置name属性值     

          使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。
          Servlet3.0 将 multipart/form-data 的 POST 请求封装成 Part,通过 Part 对上传的文件进行操作

          

  • 相关阅读:
    一文让你彻底了解卷积神经网络
    处理 3d 视频的简单理论基础
    ffmpeg 学习:000-概述和库的组成
    Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁
    “反向传播算法”过程及公式推导
    机器学习:梯度下降算法原理讲解
    神经网络浅讲:从神经元到深度学习
    Git详解之安装
    Git详解之Git起步
    Git详解之协议/速度/安全
  • 原文地址:https://www.cnblogs.com/dhome/p/9563109.html
Copyright © 2011-2022 走看看