JavaWeb之过滤器和监听器

过滤器基础

相关代码演示

package cn.servlet.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class FirstFilter implements Filter {

    /**
     *  过滤器的使用:
     *          作用:对服务器接受的请求资源和响应给浏览器的资源进行管理
     *               保护servlet
     *          使用:创建一个实现了Filter借口的普通java类
     *               复写借口的方法:
     *                      init:服务器开启执行
     *                      doFilter:拦截请求方法,在此方法中可以对资源进行管理
     *                          注意:需要手动对请求进行放行:
     *                                  filterChain.doFilter(servletRequest,servletResponse);
     *                      destroy:服务器关闭执行
     *               配置web.xml文件:
     *                          <filter>
     *                               <filter-name>myfirst</filter-name>
     *                               <filter-class>cn.servlet.filter.FirstFilter</filter-class>
     *                           </filter>
     *                           <filter-mapping>
     *                               <filter-name>myfirst</filter-name>
     *                               <url-pattern>/*</url-pattern>
     *                           </filter-mapping>
     *                           注意:/*:表示拦截所有
     *              过滤器的生命周期:服务器启动到关闭
     *          总结:
     *              程序员声明和配置过滤器,服务器根据请求中的uri信息调用
     *          执行:浏览器发起请求到服务器,服务器接收到请求后,根据uri信息在web.xml中找到对应的过滤器执行
     *          doFilter方法,该方法对此次请求处理后,如果符合要求则放行,放行后如果还有符合要求的过滤器则继续
     *          进行过滤,找到执行对应的servlet进行请求处理,servlet对请求处理后,也就service方法结束了,还
     *          继续返回相应的doFilter方法继续执行。
     *
     *          案例:
     *               统一编码格式
     *               session管理
     *               权限管理
     *               资源管理
     */

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter初始化:");
    }

    @Override
    public void destroy() {
        System.out.println("filter销毁了!");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter被执行了!");
        //  设置编码
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");

        //判断session
        HttpSession httpSession = ((HttpServletRequest)servletRequest).getSession();
        if (httpSession.getAttribute("user") == null){
            ((HttpServletResponse)servletResponse).sendRedirect("loginpractice.jsp");
        }else {
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
}

监听器基础

相关代码演示

package cn.servlet.listenr;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

/**
 * 监听器的学习:
 *      作用:监听作用域对象request,session和application的创建、销毁和内容的改变
 *      使用:创建一个实现了指定接口的Java类
 *              监听request:
 *                  监听request对象的创建和销毁:ServletRequestListener
     *                  requestDestroyed(ServletRequestEvent sre) //销毁
     *                  requestInitialized(ServletRequestEvent sre) //创建
 *                  监听request对象的:ServletContextAttributeListener
 *                      attributeAdded(ServletContextAttributeEvent scae)
 *                      attributeRemoved(ServletContextAttributeEvent scae)
 *                      attributeReplaced(ServletContextAttributeEvent scae)
 *                      获取数据:scae.getName()
 *                              scae.getValue()
 *
 *           在web.xml中配置监听器:
 *                  <listener>
 *                      <listener-class>cn.servlet.listenr.FirstListener</listener-class>
 *                  </listener>
 */

public class FirstListener implements ServletRequestListener, ServletContextAttributeListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("request对象被销毁!"+sre.getServletRequest());
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("request创建了!"+sre.getServletRequest());
    }

    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("request增加了一条数据:"+scae.getName()+" "+scae.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("request减少了一条数据:"+scae.getName()+" "+scae.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("request修改了一条数据:"+scae.getName()+" "+scae.getValue());
    }
}

总结

过滤器和监听器都是保护servlet的组件。

发布了28 篇原创文章 · 获赞 5 · 访问量 2207

猜你喜欢

转载自blog.csdn.net/qq_40307379/article/details/95073907