《JavaEE》第五周day5学习笔记-Filter、Listener

一、Filter

(一)概述


Java的特殊类,当用户访问服务器资源时,请求优先被过滤器捕获,完成一些特殊的处理,如:登录验证、统一编码、敏感字符过滤等。

(二)创建Filter


1.创建一个类,实现Filter接口;
2.重写init、doFilter、destroy方法;
3.doFilter方法中配置过滤条件
filterChain.doFilter(servletRequest,servletResponse);

XML细节:

<filter>
	<filter-name>demo</filter-name>
	<filter-class>com.coastline.web.filter.FilterDemo</filter-class>
</filter>

<filter-mapping>
	<filter-name>demo</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

(三)生命周期


  • init:服务器启动后,创建Filter对象,然后调用init方法;只执行一次,用于加载资源
  • doFilter:每一次请求被拦截时,会执行;会多次执行
  • destroy:服务器关闭后,Filter对象被销毁;只执行一次,用于释放资源

(四)其他特性


1.拦截器配置
(1)/index.jsp,仅拦截index.jsp资源
(2)/user/*,拦截/user路径下的所有资源
(3)*.jsp,拦截所有后缀名为.jsp资源
(4)/*,拦截所有资源

2.过滤器先后顺序
按照字符串比较规则,值小的优先放行(AFilter优先于BFilter);如果配置了web.xml,<filter-mapping>定义在上面的优先执行。

3.登录验证

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response =(HttpServletResponse)resp;
        String requestURI = request.getRequestURI();
        if(requestURI.contains("login.jsp")||requestURI.contains("/loginServlet")){
            chain.doFilter(req, resp);
        }else{
            Object user = request.getSession().getAttribute("user");
            if(user!=null){
                chain.doFilter(req,resp);
            }else{
                request.setAttribute("login_error","您尚未登录,请登录");
                request.getRequestDispatcher("/login.jsp").forward(request,resp);
            }
        }
    }

二、Listener

(一)概述


Java的特殊类,通过绑定事件、事件源、监听器,实现:当事件源发生某个事件时,执行监听器代码。常用的监听器分类:

  • ServletContext
  • HttpSession
  • ServletRequest

(二)创建Listener


1.创建一个类,实现ServletContextListener/ServletContextAttributeListener/…接口;
2.重写接口方法

  • contextInitialized():对象创建后会调用该方法
  • contextDestroyed():对象销毁后会调用该方法

3.配置web.xml

<!--配置监听器-->
       <listener>
              <listener-class>listener.ContextLoaderListener</listener-class>
       </listener>

<!--指定初始化的参数-->
       <context-param>
              <param-name>contextLoadConfig</param-name>
              <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
       </context-param>

3+.注解
@WebListener

发布了31 篇原创文章 · 获赞 0 · 访问量 805

猜你喜欢

转载自blog.csdn.net/u010761121/article/details/103760657
今日推荐