博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8-过滤器Filter和监听器Listener
阅读量:5136 次
发布时间:2019-06-13

本文共 5432 字,大约阅读时间需要 18 分钟。

一。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配置文件

javaweb06
basePath
http://localhost:8888/StudentManager/
charset
com.filter.CharSetFilter
charset
/*
loginservlet
com.control.LoginServlet
loginservlet
/login
loginservlet2
com.control.LoginServlet2
loginservlet2
/login2
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

实例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;@WebListenerpublic 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);//将请求继续往下放行    }}

转载于:https://www.cnblogs.com/wlxslsb/p/10743159.html

你可能感兴趣的文章
StringBuffer的用法
查看>>
js编写时间选择框
查看>>
PHP压缩文件操作
查看>>
Java数据结构和算法(四)--链表
查看>>
JIRA
查看>>
ssl介绍以及双向认证和单向认证原理
查看>>
【BZOJ2441】【中山市选2011】小W的问题(树状数组+权值线段树)
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
对我来说,只有一件事情是重要的
查看>>
完整的Socket代码
查看>>
PE知识复习之PE的导入表
查看>>
POJ 3280 Cheapest Palindrome
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
Objective-C非正式协议与正式协议
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
SPOJ DQUERY D-query(主席树 区间不同数个数)
查看>>