首页 > 其他分享 >【学习笔记】Filter 过滤器

【学习笔记】Filter 过滤器

时间:2022-10-22 11:48:01浏览次数:71  
标签:乱码 show 笔记 Filter 过滤器 import servlet

Filter 过滤器

过滤器的作用:用来过滤网站的数据(处理中文乱码、登录验证....)

过滤器加在服务器和servlet、jsp、静态资源 中间,用来过滤服务器的请求

我们以处理乱码问题为例:

之前处理乱码都是在servlet中设置 setCharacterEncoding("utf-8"),但如果servlet数量太多,我们不可能在每一个servlet中都这样设置,所以我们可以在过滤器中去设置。

步骤:

  1. 编写过滤器

    • 实现Filter接口,

    • 导包,注意一定要导入servlet包下的Filter

    • 重写方法 init() 初始化、destory() 销毁、doFilter() 实现过滤

    import jakarta.servlet.*;
    ​
    import java.io.IOException;
    ​
    public class CharacterEncodingFilter implements Filter {
    ​
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("过滤器初始化");
        }
    ​
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            servletResponse.setCharacterEncoding("utf-8");
            servletResponse.setContentType("text/html;Character=UTF-8");
            servletRequest.setCharacterEncoding("utf-8");
    ​
            filterChain.doFilter(servletRequest,servletResponse);  //让请求继续执行,如果不写就被截断在这里了
        }
    ​
        @Override
        public void destroy() {
            System.out.println("过滤器销毁");
        }
    }

    注意点:在doFilter()方法中,必须要写filterChain.doFilter(servletRequest,servletResponse)

    必须让过滤器继续通行

    过滤器中的所有代码,在过滤特定请求的时候都会执行,意思就是要配置过滤器,使过滤器在什么请求下可以使用

  2. 配置过滤器

    <filter>
        <filter-name>CharacterEncoding</filter-name>
        <filter-class>CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncoding</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

    这段配置和配置servlet相同,意思就是 /servlet的任何请求都会走过滤器

 

测试:

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
​
public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.getWriter().write("你好世界");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
</servlet-mapping>

我们配置了两个路径,一个是/servlet/show 一个是/show

访问/servlet/show ,没有出现乱码问题

访问/show ,出现乱码问题

对应了上面配置的 filter 路径

 

过滤器初始化在服务器已启动就执行了

过滤器销毁是在服务器关闭的时候执行

标签:乱码,show,笔记,Filter,过滤器,import,servlet
From: https://www.cnblogs.com/wztblogs/p/16815686.html

相关文章

  • Redis笔记8
    (ObjectivelyDown)stateonlyifatleast<quorum>sentinelsagree. #(客观下降)仅状态至少法定人数同意。 NotethatwhateveristheODOWNquorum,aSentinelw......
  • Redis笔记8
    (ObjectivelyDown)stateonlyifatleast<quorum>sentinelsagree. #(客观下降)仅状态至少法定人数同意。 NotethatwhateveristheODOWNquorum,aSentinelw......
  • 【Kubernetes】K8s笔记(十一):Ingress 集群进出流量总管
    目录0.Ingress解决了什么问题1.IngressController2.指定IngressClass使用多个IngressController3.使用YAML描述Ingress/IngressClass3.1Ingress3.2Ingr......
  • 程序员的修炼之道:从小工到专家 读书笔记四
    第四章注重实效的的偏执本章开头就说明了:你不可能写出完美的软件。给定了这么压抑的事实,那么注重实效的程序员如何把他转化为有利条件呢?他们不信任自己,这对自己会犯的错......
  • Vue笔记4 过滤器、表单v-model\高级函数
      item.price|showPrice过滤器用法              -------------------------------------------------------  --------------......
  • 程序员的修炼之道:从小工到专家 读书笔记一三
    可撤销性可撤销性表现的是我们的架构要足够灵活,能根据需求随时进行更改,同时就算该项目被废弃也不会损失过多的资源,并能应对更多的可控情况。曳光弹它的作用是反馈当前子......
  • 红黑树学习笔记
    代码的红黑树部分138行。本文的图中,红/黑点代表红/黑色节点,蓝点代表无关点(或者子树),绿点代表无所谓颜色的点。红黑树的性质:是一颗二叉搜索树每个节点是红色或者黑色根......
  • 2022-10-21 看李晓军视频笔记不测而测第一讲
    http://www.365chanlun.com/live/playBack_45_2151.html还是2022-07-26这一节课日线笔,可能是30分钟线段,可能是5分钟走势,一定是1分钟走势。现在是只有日线一笔,所以之后的......
  • 20201318李兴昕学习笔记八
    第五章:定时器及时钟服务知识点归纳总结:本章讨论了定时器和定时器服务;介绍了硬件定时器的原理和基于Intelx86的PC中的硬件定时器;讲解了CPU操作和中断处理;描述了Linux......
  • 珂朵莉树学习笔记
    0x00前言0x01关于其命名  最开始出现在CodeforcesRound#449(Div.1)C题上,这位珂学家在题解中用了一种玄学的数据结构解题,开始命名为ODT树(OldDriverTree,老......