0
点赞
收藏
分享

微信扫一扫

Servlet过滤器

念川LNSC 2022-07-27 阅读 85


首先,什么是过滤器?

Servlet过滤器_servlet


过滤器有什么功能?

Servlet过滤器_servlet_02


过滤器的执行流程:

Servlet过滤器_servlet_03


方法说明:

Servlet过滤器_servlet_04


首先,创建三个过滤器:

第一个:

package com.xust.jia.filter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;


/**
*
* @author

public class Filter implements javax.servlet.Filter{

@Override
public void destroy() {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器0将被销毁");
System.out.println();
System.out.println();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"filter0访问的地址:"+((HttpServletRequest)request).getServletPath());
System.out.println();
System.out.println();
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器0将被创建");
System.out.println();
System.out.println();
}

}

第二个:

package com.xust.jia.filter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class Filter1 implements Filter{

@Override
public void destroy() {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器1将被销毁");
System.out.println();
System.out.println();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(request.getParameter("user") != null){
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"filter1参数:"+request.getParameter("user"));
}
if(request.getParameter("user") != null){
System.out.println(sdf.format(new Date())+"filter1参数:"+request.getParameter("password"));
System.out.println();
System.out.println();
}
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println();
System.out.println();
System.out.println(sdf.format(new Date())+"过滤器1将被创建");
System.out.println();
System.out.println();

第三个:

package com.xust.jia.filter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Filter2 implements Filter{

@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被销毁");
System.out.println();
System.out.println();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被使用");
System.out.println();
System.out.println();
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println();
System.out.println();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Filter2被创建");
System.out.println();
System.out.println();

然后在Web.xml中进行配置:

<filter>
<filter-name>filter</filter-name>
<filter-class>com.xust.jia.filter.Filter</filter-class>
</filter>
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.xust.jia.filter.Filter1</filter-class>
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>com.xust.jia.filter.Filter2</filter-class>
</filter>

<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

注意:

mapping的顺序就是过滤器链的顺序:

比如:filter1在mapping的第一个,那么,当过滤器开始工作的时候,最先进入的就是filter1的doFilter函数。所以需要注意。

然后,启动服务器,开始运行项目:

Servlet过滤器_ide_05


这就是服务器创建过滤器的顺序,这个顺序是不确定的,但是这一次是这个顺序,那么以后只要数量不发生变化,那么顺序就是一样的。

具体原因是因为服务器里的HashMap,但具体在那里,请各位百度。

Servlet过滤器_xml_06


这里的过滤链的先后顺序就是mapping的顺序了。

Servlet过滤器_im_07

所以,总结如下:
过滤器在Web.xml中配置,mapping的顺序就是链的顺序。
如果需要拒绝这个请求,在最里层不加chain.doFilter().
最后一层如果添加了chain.doFilter()函数,那么服务器会在Web.xml中进行搜索,如果是最后一层的过滤器,那么就通过这个请求,否则就拒绝。
通过请求是通过默认调用servlet的doGet方法,将request,respones参数传入来进行实现。


举报

相关推荐

servlet过滤器

SERVLET过滤器

Servlet与过滤器

Servlet-过滤器

Java学习---servlet过滤器

Servlet监听器&过滤器介绍

0 条评论