filter和servlet有着很大联系 filter实现就是对接口的一种过滤 在接口处调用前和接口调用后的数据处理和判定
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
实现的方法和上两章中提到的servlet也及其相似首先创建一个filter的包在创建一个filterclass
为了方便创建的时候可以直接实现 filter类 记得是filter -java.servlet
接下来是内部代码本章是衔接上一张的在servlet定义上可以翻阅以往的文章
package com.wqc.filter;
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;
/**
* spring boot filter实现就是对接口的一种过滤 在接口处调用前和接口调用后的数据处理和判定
* @author Administrator
* *以往的filter配置是在web.xml定义接口
* <filter>
* <filter-name>MyServlet</filter-name>
* <filter-class>com.wqc.filter.FirstFilter</filter-class>
* </filter>
* <filter-mapping>
* <filter-name>Firdtfilter</servlet-name>
* <url-pattern>/first</url-pattern>
* </filter-mapping>
*
*
*
*/
//@WebFilter(filterName="FirstFilter",urlPatterns= {"*.do","*.jsp"})
//其中一个filter可以匹配多个接口 urlPatterns是以数组的形式传递的
@WebFilter(filterName="FirstFilter",urlPatterns="/first")
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("进入Filter");
chain.doFilter(request, response);
System.out.println("俩开Filter");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
其实监听的是first servlet
//@WebFilter(filterName="FirstFilter",urlPatterns= {"*.do","*.jsp"})
//其中一个filter可以匹配多个接口 urlPatterns是以数组的形式传递的
@WebFilter(filterName="FirstFilter",urlPatterns="/first")、
接下先就可以直接定义一个启动器或者说是面入口
切记以下两条是必不可少的
@SpringBootApplication
@ServletComponentScan //在启动的时候扫描项目内的 @WebServlet 并将该类实例化
然后在浏览器上访问你的servlet就会打印出以下结果
第二种就是利用方法绑定
创建第二个filter
内部代码为
package com.wqc.filter;
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;
public class SecondFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("2 - filter 进入");
chain.doFilter(request, response);
System.out.println("2- filter likai");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
入口绑定代码
package com.wqc;
import javax.servlet.annotation.WebServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import com.wqc.filter.SecondFilter;
import com.wqc.serverlet.MyServlet2;
/**
* 启动
* @author Administrator
*
*/
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
@Bean
public ServletRegistrationBean getServletRegistrationBean() {
ServletRegistrationBean bean = new ServletRegistrationBean(new MyServlet2());
bean.addUrlMappings("/second");
return bean;
}
@Bean
public FilterRegistrationBean getFilterRegistrationBean() {
FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
//bean.addUrlPatterns(new String[] {"*.do","*.jsp"});//可以用方法绑定多个servlet
bean.addUrlPatterns("/second");
return bean;
}
}
入口类上面只加一个@SpringBootApplication就可因为方法绑定不需要对servlet进行筛选
切记在绑定的时候加@bean
访问http://localhost:8080/second
console打印为