第十九天前端jsp 过滤器和监听器

二十三过滤器和监听器

1.过滤器

限制用户的处理请求或访问资源

  1. 过滤器

    过滤器是以一种组件的形式绑定到WEB应用程序中,采用链的方式进行处理

  2. 实现

    发起请求(处理请求或资源访问请求)

    实现Filter接口

    实现接口中方法

    1. public void intit(FilterConfig filterConfig)
    2. public void doFilter(ServletRequest req, ServletResponse resp,
      FilterChain fileterChain)
    3. public void destroy()

    配置web.xml文件

过滤器本质上是Servlet

FilterChain的作用是将用户的请求向下传递给其他过滤器或Servlet,形成一个过滤链

当Tomcat启动时,过滤器会自动加载并初始化,并对发起的请求进行过滤

1Filter

<form action="2FilterPage.jsp" method= "post" >
姓名: <input type="text" name="uname" />
<input type= "submit" value= "提交" />
</form>
</body>
S1102FileterListener.S1Filter

public class S1Filter implements Filter{

	@Override
	public void init(FilterConfig config) throws ServletException {
		System.out.println("过滤器初始化");
		String charEncoding=config.getInitParameter("charset");
		System.out.println("字符编码:"+charEncoding);
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse response,
			FilterChain fileterChain) throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)req;
		request.setCharacterEncoding("UTF-8");
		System.out.println(request.getMethod());
		System.out.println(request.getServletContext());
		System.out.println(request.getServletPath());
		System.out.println(request.getRequestURL());
		System.out.println(request.getRealPath("/"));
		String uname=request.getParameter("uname");
		System.out.println("uname:"+uname);
		fileterChain.doFilter(request, response);
	}	
	@Override
	public void destroy() {
		System.out.println("过滤器销毁");
	}
}
web.xml	

<!-- 配置过滤器 -->
	<filter>
		<filter-name>myFilter</filter-name>
		<filter-class>S1102FileterListener.S1Filter</filter-class>
		<init-param>
			<param-name>charset</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>myFilter</filter-name>
		<url-pattern>/1102FilterListener/*</url-pattern>
	</filter-mapping>
2.监听器

负责监听WEB的操作,当相关事件触发之后将产生事件,可对request,session,application三种操作进行监听

实现步骤

  1. 实现相关监听器接口并实现接口抽象方法

  2. 配置该监听器的web.xml

  3. application

    1. ServletContextListener接口

      触发接口中定义的事件,可通过ServletContextEvent进行事件处理

      且不能监听application的属性

      1. public void contextInitialized(ServletContextEvent sce)

      2. public void contextDestroyed(ServletContextEvent sce)

        触发事件,都会通过ServletContextEvent 对象处理,常用方法:

        1. public ServletContext getServletContext()
      S1102FileterListener.S2ServletContextListener
      
      public class S2ServletContextListener implements ServletContextListener{
      
      	@Override
      	public void contextDestroyed(ServletContextEvent servletContextEvent) {
      		System.out.println("ServletContextListener监听器销毁");
      		System.out.println("上下文路径:"+servletContextEvent.getServletContext().getRealPath("/"));	
      	}
      
      	@Override
      	public void contextInitialized(ServletContextEvent servletContextEvent) {
      		System.out.println("ServletContextListener监听器初始化");
      		System.out.println("上下文路径:"+servletContextEvent.getServletContext().getContextPath());
      		
      	}
      
      web.xml
      
      <!-- 配置监听器 -->
      	<listener>
      		<listener-class>S1102FileterListener.S2ServletContextListener</listener-class>
      	</listener>
      
    2. ServletContextAttributelistener接口

      监听application的属性操作,触发接口中定义的事件,可通过ServletContextEvent进行事件处理

      1. public void attributeAdded(ServletContextAttributeEvent scab)

      2. public void attributeRemoved(ServletContextAttributeEvent scab)

      3. public void attributeReplaced(ServletContextAttributeEvent scab)

        触发事件都会通过ServletContextAttributeEvent 对象处理,常用方法:

        1. public String getName()
        2. public Object getValue()
    public class S3ServletContextAttributeListener implements ServletContextAttributeListener{
    
    	@Override
    	public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
    		System.out.println("添加的属性名:"+servletContextAttributeEvent.getName()+"\t属性值:"+servletContextAttributeEvent.getValue());
    		
    	}
    
    	@Override
    	public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
    		System.out.println("删除的属性名:"+servletContextAttributeEvent.getName()+"\t属性值:"+servletContextAttributeEvent.getValue());
    		
    	}
    
    	@Override
    	public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
    		System.out.println("修改的属性名:"+servletContextAttributeEvent.getName()+"\t属性值:"+servletContextAttributeEvent.getValue());	
    		
    	}
    
    
    S3ServletContextListener.jsp
    
    <body>
    S3ServletContextListener
    <%
    
    //1.添加属性
    application.setAttribute("myname", "老牛");
    //2.修改属性
    application.setAttribute("myname", "李四");
    //3.移除属性
    application.removeAttribute("myname");
    %>
    </body>
    
    web.xml
    
    <listener>
    		<listener-class>S1102FileterListener.S3ServletContextAttributeListener</listener-class>
    	</listener>
    
    1. session

      1. HttpSessionListener

        对创建或销毁session操作进行监听

        1. public void sessionCreated(HttpSessionEvent se)

        2. public void sessionDestroyed(HttpSessionEvent se)

          ​ 触发: HttpSession的 invalidate()方法

          ​ 超过了配置的 session 超时时间

          触发事件都会通过HttpSessionEvent 对象处理

          常用方法:

          1. public HttpSession getSession()
          
      2. HttpSessionAttributeListener

        对 session 的属性操作进行监听

        1. public void attributeAdded(HttpSessionBindingEvent se)

        2. public void attributeRemoved(HttpSessionBindingEvent se)

        3. public void attributeReplaced(HttpSessionBindingEvent se)

          触发事件都通过 HttpSessionBindingEvent 对象处理,常用方法:

          1. public HttpSession getSession()
          2. public String getName()
          3. public Object getValue()
          
      3. request

        1. ServletRequestListener

          对用户的每次请求进行监听

          1. public void requestInitialized(ServletRequestEvent sre)

          2. public void requestDestroyed(ServletRequestEvent sre)

            触发事件都通过ServletRequestEvent 对象处理

            常用方法:

            1. public ServletRequest getServletRequest()
            2. public ServletContext getServletContext()
        2. ServletRequestAttributeListener

          对request范围属性进行监听

          1. public void attributeAdded(ServletRequestAttributeEvent srae)

          2. public void attributeReplaced(ServletRequestAttributeEvent srae)

          3. public void attributeRemoved(ServletRequestAttributeEvent srae)

            触发事件都通过ServletRequestAttributeEvent 对象处理,常用方法:

            1. public String getName()
            2. public Object getValue()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值