学习目标

第一章-Filter【重点】

知识点-Filter概述

1.目标

2.路径

  1. 什么是filter
  2. 过滤器的作用

3.讲解

3.1什么是filter

​ Filter:一个实现了特殊接口(Filter)的Java类. 实现对请求资源(jsp,servlet,html,)的过滤的功能.

​ 过滤器是一个运行在服务器的程序, 优先于请求资源(Servlet或者jsp,html)之前执行. 过滤器是javaweb技术中最为实用的技术.

3.2过滤器的作用

​ 对目标资源(Servlet,jsp,html)进行过滤.

应用场景:登录权限检查,解决网站乱码,过滤敏感字符 ...

4.小结

  1. Filter:过滤器,运行在服务器上的一个小程序,对请求资源进行过滤,优先于请求资源执行。

image-20210816085407943

  1. 应用场景

    1. 权限控制

    2. 中文乱码处理

    3. 敏感字符过滤

      ......

知识点-Filter入门【重点】

1.目标

  • 掌握配置文件方式和注解方式配置Filter

2.步骤

2.1配置文件方式

  1. 创建一个过滤器类,实现Filter接口
  2. 在web.xml中配置Filter

2.2注解方式

  1. 创建一个过滤器类,实现Filter接口
  2. 在Filter类上面添加@WebFilter("拦截路径")

建议:可以直接new Filter

image-20201221115749600

3.代码

3.1 通过xml配置方式

  • 创建一个类实现Filter接口
/**
 * Filter入门
 */
public class FilterDemo01 implements Filter {

    //init:初始化
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    //doFilter:执行过滤
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FilterDemo01...");

        //过滤器放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    //destroy:销毁
    @Override
    public void destroy() {

    }
}
  • 在web.xml对过滤器进行配置
<!--配置过滤器-->
<filter>
    <filter-name>FilterDemo01</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo01</filter-class>
</filter>
<!--过滤器映射  配置过滤器过滤哪些请求资源    /*:过滤所有请求资源-->
<filter-mapping>
    <filter-name>FilterDemo01</filter-name>
    <!--配置过滤【拦截】路径-->
    <url-pattern>/*</url-pattern>
</filter-mapping>

3.2通过注解方式

  • 创建一个类实现Filter接口
  • 直接在这个类上面添加注解进行配置
package com.itheima.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * Filter入门:
 *  1.创建一个Filter类 实现Filter接口
 *  2.在类上添加@WebFilter("拦截路径")  eg:@WebFilter("/demo01"):表示只过滤/demo01的请求资源
 */
@WebFilter("/demo01")
public class FilterDemo02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FilterDemo02...");

        //放行
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

4.小结

4.1入门步骤

  1. xml方式

    • 创建一个java类,实现Filter接口,重写接口中的抽象方法
    • 在web.xml配置文件中进行配置
<!--配置过滤器-->
<filter>
    <filter-name>FilterDemo01</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo01</filter-class>
</filter>
<!--过滤器映射  配置过滤器过滤哪些请求资源    /*:过滤所有请求资源-->
<filter-mapping>
    <filter-name>FilterDemo01</filter-name>
    <!--配置过滤【拦截】路径-->
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 注解方式

    • 创建一个java类,实现Filter接口

    • 在类上添加注解@WebFilter("拦截路径")

      image-20210904092109745

  2. 注意:过滤器一定要放行!!!

知识点-Filter的生命周期【重点】

1.目标

2.路径

  1. Filter生命周期介绍
  2. 生命周期方法
  3. Filter生命周期描述
  4. FilterConfig【了解】

3.讲解

3.1Filter生命周期介绍

​ 过滤器从创建到销毁的过程。

3.2生命周期方法

​ init(FilterConfig):初始化

​ doFilter(ServletReqeust req,ServletResponse resp,FilterChain chain):执行过滤

​ destroy():销毁

3.3Filter生命周期描述

  1. 服务器启动的时候, 会调用init()方法进行初始化 【调用一次】

  2. 当每次请求路径和过滤器的拦截路径一致时就执行一次doFilter()方法,进行过滤 【调用多次】

  3. 服务器正常关闭或者项目从服务器移除, 调用destory()方法进行销毁 【调用一次】

回顾一下Serlvet生命周期:

init:初始化 默认在来了第一次请求时初始化,可以配置启动项loadOnStartup在服务器启动提前加载

service:服务 当来了请求时,提供服务

destroy:销毁 服务器正常关闭或者项目从服务器移除

Servlet和Filter生命周期的区别:

​ Filter是在服务器启动时进行初始化,而Servlet是默认来了第一次请求时进行初始化。

​ Filter是在来了请求并且请求资源刚好是要拦截的资源,就会执行过滤。

3.4 FilterConfig【了解】

获得过滤器的初始化参数

  • 配置初始化参数
<!--配置过滤器-->
<filter>
    <filter-name>FilterDemo04</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo04</filter-class>
    <!--配置Filter初始化参数 只能在当前Filter中获取 -->
    <init-param>
        <param-name>akey</param-name>
        <param-value>aaa</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>FilterDemo04</filter-name>
    <!--配置过滤器要过滤的请求资源   过滤路径: /demo01:表示只过滤/demo01请求资源 -->
    <url-pattern>/demo01</url-pattern>
</filter-mapping>
  • 在Filter的init()方法里面获得了
package com.itheima.web.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 *  FilterConfig:过滤器配置对象
 *      1.获取Filter的初始化参数
 *      2.获取ServletContext对象
 *  使用web.xml方式配置filter初始化参数
 */
public class FilterDemo04 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //1.获取Filter的初始化参数
        String akey = filterConfig.getInitParameter("akey");
        System.out.println("FilterDemo04-akey = " + akey);
        //2.获取ServletContext对象
        ServletContext servletContext = filterConfig.getServletContext();
        System.out.println("FilterDemo04-servletContext = " + servletContext);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FilterDemo04...");

        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

4.小结

  1. Filter生命周期
    1. init():当服务器启动时,过滤器执行init方法初始化 【执行一次】
    2. doFilter():当请求路径和过滤器要过滤的请求资源匹配时,执行doFilter方法进行过滤 【执行多次】
    3. destroy():服务器正常关闭或项目从服务器移除,执行destroy销毁Filter对象 【执行一次】
  2. Filter和Servlet生命周期的区别
    1. Filter在服务器启动时进行初始化,Servlet默认在来了第一次请求时,进行初始化
  3. FilterConfig对象作用
    1. 获取初始化参数
    2. 获取servletContext对象

知识点-拦截路径【重点】

1.目标

2.路径

  1. 完全路径匹配
  2. 目录匹配
  3. 扩展名匹配
  4. 全局匹配

3.讲解

​ 假设有一个管理员权限的过滤器,它应该对用户发出的管理员功能的请求进行条件的过滤。但是当用户发出登录、注册等请求的时候,不应该进行过滤。所以我们过滤器,应该有选择的过滤请求。这就需要学习配置过滤器不同的映射路径,从而让过滤器过滤希望过滤的请求。

3.1完全路径匹配

以"/"开始

/demo01 ---> 过滤器只能拦截路径/demo01; 

3.2目录匹配

以"/"开始 以 *结束 .

/* --->当前项目下的所有的路径都可以拦截;   /user/*  ---> 可以拦截 /user/login, /user/register

3.3扩展名匹配

以"*"开始 例如: *.jsp *.do ,注意前面不要再有路径限制

*.do--->可以拦截路径的后缀是 do的 ;  *.jsp--->拦截所有JSP

3.4全局匹配

/* 过滤所有请求

/ 当前Filter里面不支持, Servlet里面可行的. 后面在Servlet(SpringMVC)里面遇到

/在Servlet中表示接收除了jsp以外的所有请求

/*在Servlet中表示接收所有请求,当然如果存在具体路径匹配则选择具体路径匹配,否则选择/*的servlet

实际使用中:

在filter和servlet充当控制器时,filter拦截路径一般设置为 /*,而Servlet一般设置 /(SpringMVC)

package com.itheima.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 过滤器拦截路径
 *     1.完全路径匹配:以/开头 /不能丢  eg:/demo01  表示只过滤/demo01的请求资源
 *          @WebFilter("/demo01")
 *     2.目录匹配:以/开头 以*结尾     eg:/user/*   表示过滤user下的所有请求资源
 *          @WebFilter("/user/*")
 *     3.扩展名匹配:以*开头          eg:*.do      表示过滤所有以.do结尾的请求资源
 *          @WebFilter("*.do")
 *     4.全局匹配:/*  表示过滤所有请求资源
 *
 */
@WebFilter("/*")
public class FilterDemo05 implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

        System.out.println("FilterDemo05...");

        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {

    }

}

4.小结

  1. 完全路径匹配:以/开头 eg:/demo01
  2. 目录匹配:以/开头 以结尾 eg:/user/
  3. 扩展名匹配:以开头 eg:.do
  4. 全局匹配:/*

知识点-拦截方式

1.目标

2.分析

​ 有了上面学习的映射路径,我们可以控制过滤器过滤指定的内容,但是我们在访问资源的时候,并不是每次都是直接访问,有时是以转发的方式访问的,这就需要我们要让过滤器可以区分不同的访问资源的方式,有不同的拦截方式。 是通过 DispatcherType 来指定的.

转发 | 直接访问【重定向】

3.讲解

  • DispatcherType.REQUEST

默认值,过滤从浏览器直接发送过来的请求和重定向 不过滤转发

  • DispatcherType.FORWARD

​ 只过滤转发过来的请求

package com.itheima.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * Filter拦截方式配置
 *  1.Filter默认拦截直接访问的请求资源  默认DispatcherType.REQUEST 表示拦截直接访问和重定向
 *  2.DispatcherType.FORWARD:表示只拦截转发方式的请求
 *  3.实际使用中,一般不会进行拦截方式的配置,直接使用默认配置,拦截直接访问和重定向的请求
 *      因为转发时服务器内部操作的,并且表示客户端一次请求,所以一般不作拦截
 */

@WebFilter(value="/demo04",dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})
public class FilterDemo06 implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("FilterDemo06...");
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {

    }

}

3.小结

  1. 通过dispatcherTypes配置拦截方式

    • DispatcherType.FORWARD: 【只】过滤转发请求

    • DispatcherType.REQUEST: 表示过滤浏览器的直接请求和重定向【默认值】

  2. 拦截方式的这个值,我们可以配置多个

@WebFilter(value="/demo01",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})

一般情况下, 转发我们不会过滤的. 转发属于服务器内部的行为. 直接使用默认值的情况偏多

知识点-过滤器链

1.目标

2.分析

​ 过滤器链:一个项目中多个过滤器一起工作就组成了过滤器链。过滤器链中就记录了过滤器的信息。

​ 过滤器链作用:当一个filter收到请求的时候,调用chain.doFilter()才可以访问下一个匹配的filter,若当前的filter是最后一个filter,调用chain.doFilter()才能访问目标资源

3.讲解

image-20201221175520519

3.小结

  1. 过滤器链:一个项目中,多个过滤器一起工作,就组成了过滤器链,在过滤器链中就记录的过滤器的信息,以及过滤器的执行顺序,过滤器链对象 FilterChain通过doFilter()方法调用下一个过滤器执行,如果当前过滤器是最后一个,则会调用web资源处理请求。
  2. 过滤器执行顺序
    1. xml配置先执行,注解配置后执行
    2. xml配置的按照filter-mapping的先后顺序执行
    3. 注解配置的按照filter的名称字母先后顺序执行

案例一:统一全网站中文乱码的处理

1,需求分析

​ 在整个网站中,可能会有get请求或post请求向服务器提交参数.参数中往往有中文信息.在后台每个Servlet中都需要去处理乱码.

​ 我们想做的是:请求到达Servlet中.就可以直接调用getParameter方法获得请求参数,请求参数已经没有乱码了.

2,思路分析

image-20201222093153825

3,代码实现

package com.itheima.web.filter;

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

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //1.强转两个对象
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        // 2.中文乱码处理
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        // 3.过滤器放行【放行强转后的对象】
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {

    }
}

4.小结

  1. 关键点

    • 拦截路径:/* 拦截所有请求
    • 一定要放行
  2. 思路

    1. 强转两个对象
    2. 中文乱码处理
    3. 放行【放行强转后的两个对象】

案例二:非法字符过滤

1,需求分析

​ 当用户发出非法言论的时候,提示用户言论非法。

​ 效果:

img

2,思路分析

1.创建一个表单用于发表言论。

2.创建一个txt文件,其中存入敏感字符。

3.创建一个Filter,拦截请求。在init方法中将txt文件中的非法字符读取到集合中。、

编写doFilter方法代码

4.获取请求中的参数,对请求的参数进行非法字符的校验。

5.如果言论中不含有非法字符,就放行。

6.如果言论中含有非法字符,就拦截,并且使用***替换掉。

image-20210816110130663

3,代码实现

  • IllegalFilter
package com.itheima.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

@WebFilter("/illegal")
public class IllegalFilter implements Filter {
    private List<String> list = new ArrayList<>();
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //1.强转两个对象request和response 
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        //2.获取请求参数 【用户发表言论】
        String message = request.getParameter("message");
        //3.遍历敏感词list集合
        //设置一个标识   如果包含敏感词为true  不包含为false
        boolean flag = false;
        for (String word : list) {
            //4.判断用户发表言论中是否包含敏感词
            if(message.contains(word)){
                flag = true;
                break;
            }
        }
        //5.1:包含  给出提示  5.2:不包含:放行
        if(flag){
            response.getWriter().print("您发表的言论含有非法词汇,请重新发表!");
        }else{
            chain.doFilter(request,response);
        }
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        BufferedReader br = null;
        try {
            //读取敏感词文档 存入到list集合中
            //1.获取ServletContext对象
            ServletContext servletContext = config.getServletContext();
            //2.使用ServletContext对象获取web目录下的资源文件输入流
            InputStream is = servletContext.getResourceAsStream("IllegalWords.txt");
            //3.将输入流转为字符缓冲流进行读取 添加到list集合中
            br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
            String line = null;
            while((line=br.readLine())!=null){
                list.add(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

4.小结

  1. 思路

    • 准备页面表单、Filter、Servlet
    • 在Filter的init方法中 读取敏感词文档加载内容到list集合中
    • doFilter()
      • 1.强转两个对象
      • 2.获取用户发表言论
      • 3.遍历list集合,判断用户发表言论中是否包含敏感词
      • 4.处理 包含进行提示 不包含放行【放行强转后的对象】
  2. 注意事项

    • 读取非法字符文件 指定utf-8

    image-20191214122032908

    • 我这个案例里面没有处理请求和响应乱码, 因为我已经写了CharacterEncodingFilter已经处理好了, C在I的前面, 所以在IllegalFilter执行之前, CharacterEncodingFilter已经把乱码处理好了
    • 要进行用户是否发表言论的判断,如果用户没有发布言论,则IllegalFilter过滤器直接放行

第二章-监听器Listener【了解】

知识点-Listener概述

1.目标

2.路径

  1. 什么是Listener
  2. 监听器的应用
  3. 监听器的术语

3.讲解

3.1什么是Listener

​ 监听器就是一个Java类,用来监听其他的JavaBean对象的变化

​ 在javaweb中监听器就是监听三个域对象的状态的。request,session,servletContext(application)

3.2监听器的应用

​ 主要在Swing编程

​ 在Android/ios大量应用

​ JS里面的事件

3.3监听器的术语

eg: 一个狗仔卓伟偷拍明星出轨

事件源 :被监听的对象.(目标对象) 明星

监听器对象:监听的对象. 卓伟

事件:事件源行为的称呼. 出轨

注册(绑定):将"监听器"对象注册给"事件源". 卓伟跟踪明星

4.小结

  1. 监听器:就是java中的一个类,用来监听javabean对象状态变化
  2. 应用:js中的事件
  3. 监听器术语
    1. 事件源:被监听的对象
    2. 监听器对象:监听者
    3. 事件:被监听的对象 发生了某件事
    4. 注册:将事件源对象和监听器对象进行绑定 这样监听器才能监听到被监听的对象发生某件事件,然后做后续处理

知识点-javaweb中的监听器

1.目标

2.路径

  1. 说明
  2. JavaWeb中的监听器类型
  3. JavaWeb的监听器使用步骤

3.讲解

3.1 javaweb的监听器

​ javaweb的监听器:监听ServletContext,HttpSession,HttpServletRequest三个域对象状态

​ 事件源和监听器绑定的过程:通过配置web.xml或注解配置完成

3.2 JavaWeb中的监听器类型

  • 三类8个

只讲解 监听ServletContext的创建和销毁.

ServletContext对象创建:表示服务器启动 方便提前加载资源

ServletContext对象销毁:表示服务器关闭或项目从服务器移除 关闭对象 释放资源

3.3JavaWeb的监听器使用步骤

  1. 创建一个类实现监听器接口【ServletContextListener】
  2. 在web.xml进行配置(将事件源与监听器绑定)

4.小结

  1. 学习监听器就学一个 监听ServletContext的创建和销毁

知识点-监听ServletContext的创建和销毁的监听器

1.目标

2.路径

3.讲解

说明: 监听ServletContext对象的创建和销毁

  • 方法

    img

  • 问题

    ServletContext对象何时创建和销毁:应用在,它就在

    创建:服务器启动时候(前提是这个项目在这个服务器里面). 服务器为每个WEB应用创建一个单独的ServletContext.

    销毁:服务器关闭的时候,或者项目从服务器中移除.

  • 企业中应用

    ​ 初始化工作:服务器启动时完成初始化工作,在后续使用时就可以直接调用,无需等待

    ​ 加载配置文件:Spring框架,ContextLoaderListener

步骤:

  1. 创建一个java类,实现ServletContextListener接口,重写其方法
  2. 在web.xml中配置监听器

代码:

  • JAVA代码

    package com.itheima.web.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    
    /**
     * Servlet、Filter、Listener  javaweb的三大组件  用的最多Servlet,Listener基本很少使用
     * Servlet: @WebServlet("请求路径")
     * Filter:  @WebFilter("拦截路径")
     * Listener:@WebListener
     */
    @WebListener
    public class MyListener  implements ServletContextListener {
        //监听ServletContext对象初始化 服务器启动 初始化工作
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            System.out.println("servletContext init 1111...");
        }
    
        //监听ServletContext对象销毁 服务器关闭  关闭对象释放资源
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            System.out.println("servletContext destroy 4444...");
        }
    }
    
  • 配置(web.xml)

    <!--方式一:web.xml中配置-->
    <listener>
        <listener-class>com.itheima.web.listener.MyListener</listener-class>
    </listener>
    

4.小结

  1. 步骤

    • 创建一个类,实现ServletContextListener接口,重写方法
    • 使用web.xml配置或注解@WebListener配置
  2. 应用:在Spring框架中,通过监听ServletContext对象,提前加载Spring的配置文件

第三章-邮箱

1.邮件流程

image-20201222144554548

2.邮件服务器

2.1服务器

​ 数据库服务器:mysql数据库服务器 mysql软件+主机

​ web服务器:tomcat+主机

  • 硬件+软件(eg: mysql, tomcat...)

2.2邮箱服务器

  1. 租(企业邮箱)
  2. 自己搭建 邮箱软件+主机

3.邮箱软件安装

  1. 服务端

1564654460302

  1. 客户端

1564654712247

4.邮件的发送

  1. 直接通过Foxmail发送
  2. 通过java代码发送
    • 导入邮箱相关 jar包
    • 添加工具类到项目
    • 调用方法 发送邮件【注意:发件人账号及密码、收件人邮箱地址、邮件主题、邮件内容】

第四章-扩展

1.密码加密

  • 可逆: 加密之后还可以解密 明文-->密文-->明文 RSA【私钥、公钥】
  • 不可逆: 加密之后 不可以解密 明文-->密文 MD5

2.MD5加密算法

  • 不可逆
  • 步骤 直接拷贝工具类进行加密

3.保证MD5加密算法安全

  1. 前端控制(避免密码过于简单),加密多次(3次以上)
  2. 加盐(password+salt)

4.怎么登录

  • 登录的时候 按照 注册那种方式加密一下, 再去查询数据库 就OK了

image-20201222163530743

5.退出登录

5.1 思路

  1. 修改超链接 请求LogoutServlet
  2. 在LogoutServlet里面, 移除session里面存的user, 跳转到登录页面

5.2实现

  • 超链接
<a href="logout">退出</a>
  • LogoutServlet
package com.itheima.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(value = "/logout")
public class LogoutServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.清理session中的用户信息
        //request.getSession().removeAttribute("user");
        //手动让session失效
        request.getSession().invalidate();
        //2.跳转到登录页面
        response.sendRedirect("login.html");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

本章小结:

  1. Filter

    1. 概念:过滤请求资源,优先于请求资源先执行
    2. 使用场景:中文乱码处理、敏感字符过滤、权限验证...
    3. 入门使用
      1. 创建一个类,实现Filter接口
      2. 使用xml或注解@WebFilter配置
    4. 生命周期
      1. init:初始化 在服务器启动时初始化 【执行一次】
      2. doFilter:执行过滤 在每次请求和过滤器拦截路径一致时,就执行 【执行多次】
      3. destroy:服务器正常关闭或项目从服务器移除 【执行一次】
    5. FilterConfig
      1. 获取初始化参数
      2. 获取ServletContext对象
    6. 拦截路径【重点】
      1. 完全路径匹配: /demo01
      2. 目录匹配:/user/*
      3. 扩展名匹配:*.do
      4. 全局匹配:/*
    7. 拦截方式【了解】
    8. 过滤器链【了解】
      1. 过滤器的执行顺序(xml配置的先执行,注解配置的后执行 xml中filter-mapping在前先执行,注解配置的字母顺序在前的先执行)
  2. Listener

    1. 通过监听器对象监听在某个对象上发生某个事件 进行后续处理
    2. 编写ServletContextListener监听器
      1. 创建一个类 实现ServletContextListener接口
      2. 使用xml或注解配置
      3. 作用:可以监听到服务器的启动和关闭 方便在服务器启动时做一些初始化工作
      4. 应用:Spring加载配置文件就使用到了ServletContextListener监听器
  3. 邮箱

    1. 邮箱软件的安装
    2. java代码发送邮件
      1. 添加jar包
      2. 拷贝工具类
      3. 调用方法 发送邮件
  4. 练习:

    1. Filter入门
    2. Filter生命周期
    3. Filter拦截路径
    4. 案例一
    5. 编写一下ServletContextListener监听器
    6. 用户注册登录案例
    7. 邮箱配置
posted on 2022-04-24 23:11  ofanimon  阅读(19)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css