zoukankan      html  css  js  c++  java
  • 8-过滤器Filter和监听器Listener

    一。web监听器:监听特殊事件的发生
    1.监听实现步骤
      a。写一个java类,实现特定的接口,重写相关方法
      b。在web.xml中,牌配置
        <listener>
          <listener-class>com.listener.MyContextLisenter</listener-class>
        </listener>
      c.注解方式:在java类上写一个@WebLisenter
    2.可以在web.xml中可以配置servetContext初始化的参数
      <context-param>
        <param-name>basePath</param-name>
        <param-value>http://localhost:8888/StudentManager/</param-value>
      </context-param>
      在程序中获取方式:sce.getServletContext().getInitParameter("basePath");

    3.三种监听:请求监听(ServletRequestListener),会话监听(HttpSessionListener),上下文监听(ServletContextListener)

    二。过滤器
    1、特点:在服务器中第一个被执行,可以拦截任意指定的路径请求
    2.用于项目中的非法访问,字符集设置等等
    3.实现步骤:
      a.写一个java程序,实现Filter接口,重写方法
      b.在web.xml中配置
      <filter>
        <filter-name>charfilter</filter-name>
        <filter-class>com.filter.CharSetFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>charfilter</filter-name>
        <!-- 拦截根目录下的所有请求 -->
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      c.dofilter方法里面的最后一句,应该将请求继续放行china.doFilter(req,resp);

      web.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>javaweb06</display-name>
    <!--   <listener> -->
    <!--       <listener-class>com.listener.MyRequestListener</listener-class> -->
    <!--   </listener> -->
        <context-param>
            <param-name>basePath</param-name>
            <param-value>http://localhost:8888/StudentManager/</param-value>
        </context-param>
      <filter>
          <filter-name>charset</filter-name>
          <filter-class>com.filter.CharSetFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>charset</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
        
      <servlet>
          <servlet-name>loginservlet</servlet-name>
          <servlet-class>com.control.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>loginservlet</servlet-name>
          <url-pattern>/login</url-pattern>
      </servlet-mapping>
      <servlet>
          <servlet-name>loginservlet2</servlet-name>
          <servlet-class>com.control.LoginServlet2</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>loginservlet2</servlet-name>
          <url-pattern>/login2</url-pattern>
      </servlet-mapping>
      
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    实例1:

    package com.listener;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    public class MyRequestListener implements ServletRequestListener{
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            sre.getServletContext();
            sre.getServletRequest();
            System.out.println("请求开始");
        }
        
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("请求结束");
        }
    }

    实例2:

    package com.listener;
    
    import javax.servlet.ServletContext;
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    @WebListener
    public class MySessionListener implements HttpSessionListener{
        
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            String path = se.getSession().getServletContext().getInitParameter("basePath");
            System.out.println("初始化参数为:"+path);
            ServletContext app = se.getSession().getServletContext();
            Integer online = (Integer)app.getAttribute("online");
            if(online==null){
                online = 0;
            }
            System.out.println("当前在线人数是:"+ ++online);
            app.setAttribute("online", online);
        }
        
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            ServletContext app = se.getSession().getServletContext();
            Integer online = (Integer)app.getAttribute("online");
            System.out.println("当前在线人数为:"+ --online);
            app.setAttribute("online", online);
        }
    }

    实例3:

    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebFilter("/student/*")
    public class IsLoginFilter implements Filter{
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
                throws IOException, ServletException {
            //1.从session中获取用户信息
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            String username = (String) request.getSession().getAttribute("username");
            
            System.out.println(request.getRequestURI());
            if(request.getRequestURI().endsWith("/login.jsp")||request.getRequestURI().endsWith("/login3")){
                arg2.doFilter(req, resp);
                return;
            }
            
            if(username==null){//非法登录
                response.sendRedirect("login.jsp");
            }else{
                arg2.doFilter(req, resp);
            }
        }
    
    }

    实例4:

    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    /**
     * 将所有请求的字符集统一修改
     * @author allen
     */
    @WebFilter("/*")
    public class CharSetFilter implements Filter{
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
                throws IOException, ServletException {
            System.out.println("请求字符集修改为utf-8");
            req.setCharacterEncoding("utf-8");
            arg2.doFilter(req,resp);//将请求继续往下放行
        }
    }
  • 相关阅读:
    异常显示页面
    SpringBoot项目打包的两种类型1-WAR方式
    SpringBoot项目打包的两种类型1-JAR方式
    Spring Boot项目打包部署
    json转义处理
    xadmin使用
    nginx 反向代理
    python 队列、栈
    Django logging配置
    Tensorflow学习教程------普通神经网络对mnist数据集分类
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10743159.html
Copyright © 2011-2022 走看看