首页 > 其他分享 >Servlet-3-Filter01

Servlet-3-Filter01

时间:2022-10-31 15:01:59浏览次数:52  
标签:filterConfig servlet Filter01 Filter public import Servlet javax


文章目录

  • ​​1.Filter是Servlet规范的三大组件之一(不用导包)​​
  • ​​2.怎么创建Filter​​
  • ​​方法1:​​
  • ​​方法2:直接右击创建一个Filter​​
  • ​​3.Filter的生命周期​​
  • ​​1.初始化(只执行一次)​​
  • ​​2.销毁 destroy(只执行一次)和init相似​​
  • ​​3.服务doFilter每次请求过滤运行一次​​
  • ​​4.FilterConfig指的是Filter在web.xml中的注册信息​​
  • ​​1filterConfig.getFilterName()获取拦截器的名字​​
  • ​​2.filterConfig.getInitParameterNames();生成初始化的拦截器初始化的名字枚举集合​​
  • ​​5.filterMapping​​
  • ​​/和/*不同​​
  • ​​对指定的Servlet进行拦截​​
  • ​​6.dispatcher​​

1.Filter是Servlet规范的三大组件之一(不用导包)

就是一个过滤器,在请求道网页上之前进行一个过滤

Servlet-3-Filter01_java


Servlet-3-Filter01_filter_02


这个代码分别在显示网页之前,之后,在控制台打印

2.怎么创建Filter

方法1:

先写一个普通的类实现接口Filter

在web.xml进行注册

Servlet-3-Filter01_filter_03

<!--  注册filter -->
<filter>
<filter-name>Some-filter</filter-name>
<filter-class>dao.Filter_2</filter-class>
</filter>
<filter-mapping>
<filter-name>Some-filter</filter-name>
<url-pattern>/*</url-pattern><!--这里是进行拦截的url-->
</filter-mapping>

方法2:直接右击创建一个Filter

@WebFilter("/*")这个里面是拦截的path-pattern

Servlet-3-Filter01_过滤器_04


Servlet-3-Filter01_过滤器_05


Servlet-3-Filter01_filter_06

package dao;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
* Servlet Filter implementation class Servelct_Filter
*/
@WebFilter("/Servelct_Filter")
public class Servelct_Filter implements Filter {

/**
* Default constructor.
*/
public Servelct_Filter() {
// TODO Auto-generated constructor stub
}

/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here

// pass the request along the filter chain

System.out.println("我也拦截了你,咋地");
chain.doFilter(request, response);
}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}

}

3.Filter的生命周期

1.初始化(只执行一次)

启动时候是,被创建
Filter是单列多线程的
Filter在停止程序的时候被销毁

public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}

2.销毁 destroy(只执行一次)和init相似

public void destroy() {
// TODO Auto-generated method stub
}

3.服务doFilter每次请求过滤运行一次

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here

// pass the request along the filter chain
chain.doFilter(request, response);
}

4.FilterConfig指的是Filter在web.xml中的注册信息

1filterConfig.getFilterName()获取拦截器的名字

2.filterConfig.getInitParameterNames();生成初始化的拦截器初始化的名字枚举集合

package dao;

import java.io.IOException;
import java.util.Enumeration;

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 Filter_2 implements Filter {

private FilterConfig filterConfig;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO 自动生成的方法存根
System.out.println("拦截了你,咋地");
chain.doFilter(request, response);
String filterName=filterConfig.getFilterName();
System.out.println("filterName="+filterName);
Enumeration<String> names=filterConfig.getInitParameterNames();
//这里是把名字作为枚举集合存在一起
while (names.hasMoreElements()) {
String string = (String) names.nextElement();
//这里有参数。取名字对应的值
String value=filterConfig.getInitParameter(string);
System.out.println(string+":"+value);
}
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO 自动生成的方法存根
this.filterConfig=filterConfig;
System.out.println("我是初始化2");
}

}

5.filterMapping

就是在初始化的时候wenb.xml的时候
url-pattern的

/和/*不同

/*:表示当前的Servlet可以匹配所有的请求,无论是静态的还是动态的,统统会被拦截

/ :不会拦截动态的资源请求,就是不会对JSP的页面请求进行拦截,但是会拦截静态的资源请求

对指定的Servlet进行拦截

Servlet-3-Filter01_java_07

6.dispatcher

Servlet-3-Filter01_过滤器_08


Servlet-3-Filter01_java_09


标签:filterConfig,servlet,Filter01,Filter,public,import,Servlet,javax
From: https://blog.51cto.com/u_15854304/5809771

相关文章

  • Cannot resolve Servlet 'DispatcherServlet'
    问题:    明明自己包导入(org.springframework.web.servlet.DispatcherServlet)的没有问题,按ctrl键可以直接进入DispatcherServlet,却一直有红色警告。后来通过清除缓存......
  • 你怎么设计一个线程安全的Servlet?
    1.最直接的办法,就是用上面的SingleThreadModel接口既然单例会有共享实例变量导致线程不安全的问题,那就改成多例的呗。但是,这个接口都已经被官方废弃了,这就说明官方也不推荐......
  • 你能证明Servlet线程不安全吗?
    Servlet默认是线程不安全的!Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。  当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml......
  • 秋招面试:如何证明Servlet是单例的?
    今天和大家分享一个经典的面试题:如何证明Servlet是单例的?Servlet一般都是单例的,并且是多线程的。如何证明Servlet是单例模式呢?很简单,重写Servlet的init方法,或者添加一个构......
  • 面试题:如何让Servlet变成多例?
    方法1.实现 SingleThreadModel接口(不推荐,官方已经将这个接口废弃)publicclassMyServletextendsHttpServletimplementsSingleThreadModel{publicMyServlet(){......
  • Servlet
    CookieCookie定义:Cookies是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。JavaServlet显然支持HTTPCookies。Cookie,有时也用其复数形式Cookies。类型为......
  • JAVAWeb - HttpServletRequest
    一.Request入门HttpServletRequest:代表客户端的请求,通过http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户......
  • 找到多个名为spring_web的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规
    问题描述:解决办法:1:检查pom.xml中是否包含多个spring-web字段;2:删除掉多余的spring-web.jar,保留一个即可;......
  • SpringMVC源码-DispatcherServlet初始化
    web容器启动后会实例化Servlet,会执行Servlet的init方法且只会执行一次。后续调用doService处理客户请求。DispatcherServlet的构造方法publicDispatcherServlet(){ su......
  • 学习笔记——ServletConfig,ServletContext
    2022-10-29一、web中的两个接口:(1)ServletConfig:说明:每当有一个servlet对象时,就会有唯一一个servletConfig配置文件对象功能:能获得Servlet名称(该名称是web.xml......