JAVA-EE关于Filter在WEB-APP中使用的优先级------计算机网络经典

Filter过滤器
每一个Servlet都需要解决自己业务的问题,但是它们都需要判断用户是否已经登陆,
如果登陆了,才可以执行后续操作,如果没有则需要登录
这部分我们可以使用Filter过滤器来将这部分从Servlet中抽离,达到复用效果
我们可以把Servlet程序看作是需要执行的目标,我们可以使用过滤器Filter来添加过滤代码
Filter可以添加到Servlet执行之前也可以是执行之后
过滤器也是根据请求路径来执行的
Servlet对象默认情况下,服务器启动,不会创建对象
Filter对象默认在服务器启动创建对象
chain.doFilter()
这行代码用来放行,执行下一个过滤器,如果没有过滤器,执行最终的servlet
注意Filter的优先级比Servlet高
XML配置和注解配置都会让tomcat服务器创建对象,因为这个是伪单例模式
会有两个同名的对象存在,一起执行方法
在web.xml配置时,filter-mapping配置越靠上,优先级越高
过滤器优先顺序遵循的栈数据结构
Filter过滤器
每一个Servlet都需要解决自己业务的问题,但是它们都需要判断用户是否已经登陆,
如果登陆了,才可以执行后续操作,如果没有则需要登录
这部分我们可以使用Filter过滤器来将这部分从Servlet中抽离,达到复用效果
我们可以把Servlet程序看作是需要执行的目标,我们可以使用过滤器Filter来添加过滤代码
Filter可以添加到Servlet执行之前也可以是执行之后
过滤器也是根据请求路径来执行的
Servlet对象默认情况下,服务器启动,不会创建对象
Filter对象默认在服务器启动创建对象
chain.doFilter()
这行代码用来放行,执行下一个过滤器,如果没有过滤器,执行最终的servlet
注意Filter的优先级比Servlet高
XML配置和注解配置都会让tomcat服务器创建对象,因为这个是伪单例模式
会有两个同名的对象存在,一起执行方法
在web.xml配置时,filter-mapping配置越靠上,优先级越高
过滤器优先顺序遵循的栈数据结构
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <session-config>
<!--        代表session的超时时间是30分钟,如果30分钟到,session对象就会被销毁-->
        <session-timeout>30</session-timeout>
    </session-config>
<!--    使用欢迎页机制跳转到cookie登录-->
    <welcome-file-list>
        <welcome-file>Welcome</welcome-file>
    </welcome-file-list>
<!--    XML的写法-->
    <filter>
        <filter-name>filter1</filter-name>
        <filter-class>com.bjpowernode.oa.web.Servlet.Filter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter1</filter-name>
<!--        <url-pattern>/Test/A</url-pattern>-->
<!--        <url-pattern>/Test/B</url-pattern>-->
        <url-pattern>/Test/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>filter2</filter-name>
        <filter-class>com.bjpowernode.oa.web.Servlet.Filter2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter2</filter-name>
        <!--        <url-pattern>/Test/A</url-pattern>-->
        <!--        <url-pattern>/Test/B</url-pattern>-->
        <url-pattern>/Test/*</url-pattern>
    </filter-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <session-config>
<!--        代表session的超时时间是30分钟,如果30分钟到,session对象就会被销毁-->
        <session-timeout>30</session-timeout>
    </session-config>
<!--    使用欢迎页机制跳转到cookie登录-->
    <welcome-file-list>
        <welcome-file>Welcome</welcome-file>
    </welcome-file-list>
<!--    XML的写法-->
    <filter>
        <filter-name>filter1</filter-name>
        <filter-class>com.bjpowernode.oa.web.Servlet.Filter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter1</filter-name>
<!--        <url-pattern>/Test/A</url-pattern>-->
<!--        <url-pattern>/Test/B</url-pattern>-->
        <url-pattern>/Test/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>filter2</filter-name>
        <filter-class>com.bjpowernode.oa.web.Servlet.Filter2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter2</filter-name>
        <!--        <url-pattern>/Test/A</url-pattern>-->
        <!--        <url-pattern>/Test/B</url-pattern>-->
        <url-pattern>/Test/*</url-pattern>
    </filter-mapping>
</web-app>
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/Test/A")
public class AServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        System.out.println("AServlet执行了");
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/Test/A")
public class AServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        System.out.println("AServlet执行了");
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/Test/B")
public class BServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        System.out.println("BServlet执行了");
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/Test/B")
public class BServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        System.out.println("BServlet执行了");
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;

import java.io.IOException;

//"*.do"这个路径属于模糊匹配的拓展匹配,以*开始,注意这种路径不要以/开始
//还有一种写法/*匹配所有的路径,/dept/*匹配这个下所有的
//@WebFilter("/Test/*")
public class Filter1 implements Filter
{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        //请求发送的时候添加过滤规则
        System.out.println("doFilter方法执行");
        //往下走,下一个是过滤器,就继续过滤,不是就走Servlet
        //放行,但是该过滤器方法执行未结束,servlet结束才结束
        chain.doFilter(request,response);
        //响应的时候添加过滤规则
        System.out.println("doFilter方法结束");
    }

    @Override
    public void destroy()
    {
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;

import java.io.IOException;

//"*.do"这个路径属于模糊匹配的拓展匹配,以*开始,注意这种路径不要以/开始
//还有一种写法/*匹配所有的路径,/dept/*匹配这个下所有的
//@WebFilter("/Test/*")
public class Filter1 implements Filter
{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        //请求发送的时候添加过滤规则
        System.out.println("doFilter方法执行");
        //往下走,下一个是过滤器,就继续过滤,不是就走Servlet
        //放行,但是该过滤器方法执行未结束,servlet结束才结束
        chain.doFilter(request,response);
        //响应的时候添加过滤规则
        System.out.println("doFilter方法结束");
    }

    @Override
    public void destroy()
    {
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.*;

import java.io.IOException;

public class Filter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("filter2开始");
        chain.doFilter(request,response);
        System.out.println("filter2结束");
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
package com.bjpowernode.oa.web.Servlet;

import jakarta.servlet.*;

import java.io.IOException;

public class Filter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("filter2开始");
        chain.doFilter(request,response);
        System.out.println("filter2结束");
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值