java求职学习day38
5.1 Filter过滤器(重点)
5.1.1 基本概念
5.1.2 工作方式

分析:
在这张图里面,我觉得有几个内容,大家应该还是非常熟悉的,比如说左侧的浏览器,比如说右侧的外部资源,
实际上是不是就代表的是我们的外部服务器呀?这不就是我们在讲JAVA web的时候,一开始所讲的BS架构呗。对不对?当然,这个外部资源可以是静态的,也可以是动态的,有印象吧?我们前面画的那张图。只不过呢,学完过滤器之后啊,我们会发现在我们的浏览器跟外部服务器中间又多了一层叫过滤器。那它的话呢,你就把它想象成是一道过滤网。也就是说,
它能做什么事情,它可以进行数据的过滤呗。明白这意思吧,好,那具体的工作流程又是怎么进行的呢?首先还是通过浏览器发送请求。那么,当我们发送请求的时候,大家要注意它跟以前我们讲的BS架构不一样的地方在于,不再是单纯的将这个请求发送到。外部服务器,而是将这个请求发给哪里,发给了过滤器。明白这意思吧,好那么当我们的过滤器接收到这个请求之后呢,
我们可能会对请求的内容或者数据进行修改。我可能要进行判断,我甚至可能进行拦截等等一系列操作之后,经过过滤器之后,再将这个请求交给外部服务器。那当然了,外部服务器呢?接到这个请求之后,要做出响应,但是大家注意观察,做出响应的时候也是同样的,先将这个响应信息。交给了过滤器。明白这意思吧,再通过过滤器,
最终是不是交给了我们的浏览器显示出来?对吧,这是它的一个工作方式。
那有的小伙伴可能在想那过滤器在我们的以后开发中到底都有哪些作用呢?在这张图里面啊,实际上已经给大家罗列了三种场合,对吧?第一种场合叫身份的认证。啥意思啊?就是我要去验证一下,或者说认证一下你是否是已经登录?对不对?如果你登录了注册了,登录了,那你有你该具备的会员的一些什么来着?甚至VIP的一些什么来着?权限呗。当然,你如果的话呢?充钱了是不?那就是v VIP。是不是好,这是我们要做的身份认证,
还有可能呢,我们要进行一些什么来着,资源的审核就说你当前登录的这个账户是否有权限来访问?我这里面的某些资源呢,对不对?你v可能有些数据的话是v VIP是不是才能访问的?是不是所以我可以进行审核,
当然我们还可以对我们的数据进行加密,防止第三方窃取。对不对?所以这是我们过滤器的一个工作流程,
你只需要把它想象成就是浏览器,跟我们web服务器中间的一道过滤网就可以了。明白了吧好,这是有关于我们filter的基本概念和工作方式,目前就介绍到这里。
5.1.3 使用方式
public class LoginFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,ServletException {
//TODO 处理逻辑,必须调用下面的方法
chain.doFilter(request,response);
}
}
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.lagou.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分析:
接下来我们说一说过滤器具体的一个使用方式,那么首先呢,我们先回想一个这样的场景,你们呢?平时在上网的时候有没有遇到过一个这样?这样的情况呢?什么呢?就是我们的话呢?明明呢?在很开心的浏览网页,而且很高兴的见到了一个我们期待已久的资源。对不对?于是有些小伙伴情不自禁,迫不及待的,是不是就想点击右下方的下载按钮?对不对?但是当我们点击完按钮之后。让人很不开心的一件事情就发生了,就是立刻弹出一个新的界面,要求我们怎么办?登录或者注册。对不对?那我相信很多小伙伴应该都经历过这样的场景,对不对?
那这一点是怎么做到的呢?实际上就是我们的过滤器。那接下来我带着大家来模拟这么一个场景,当然要想模拟这么一个场景,首先我们是不是得要先有一个登录,还有我们的一个主页面?
那么到目前为止呢,我们已经实现了这个前端页面,以及我们后面的。servlet对不对?但是接下来的话呢,有一个很大的问题,什么问题呢?就是无论用户登录成功还是失败,我们实际上是不是仅仅是在后台里面?做了一个输出信息,对不对?
但是大家会发现,在我们的前端页面里面根本就没有任何的。提示或者反馈,那这样一来呢,会带来一个什么问题,你想想假设你是这样的一个用户的时候,当你输完用户名儿密码之后,没有反应,给你一个空白页面。你会有一个什么样的感受,
5.1.4 Filter接口

5.1.5 FilterConfig接口

5.1.6 多个过滤器的使用

5.1.7 过滤器优点
5.2 Listener监听器(重点)
5.2.1 基本概念
5.2.2 基本分类

5.2.3 监听器详解







<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true">
<!-- 配置文件存放的路径信息,可以自由指定 -->
<Store className="org.apache.catalina.session.FileStore"
directory="C:\session"/>
</Manager>
5.2.4 实战案例
public class OnlineUser implements HttpSessionListener,ServletContextListener {
ServletContext ctx = null;
// 初始化ServletContext
public void contextInitialized(ServletContextEvent e) {
ctx = e.getServletContext();
}
// 销毁ServletContext
public void contextDestroyed(ServletContextEvent e) {
//将ServletContext设置成null;
}
// 当新创建一个HttpSession对象时
public void sessionCreated(HttpSessionEvent e) {
//将当前的在线人数加上1,并且保存到ServletContext(application)中
}
// 当一个HttpSession被销毁时(过期或者调用了invalidate()方法)
public void sessionDestroyed(HttpSessionEvent e) {
//将当前人数减去1,并且保存到ServletContext(application)中
}
}
<listener>
<listener-class> com.lagou.listener.OnlineUser </listener-class>
</listener>