filter是过滤的意思:在web开发中,是请求会先到过滤器,然后由过滤器再转发到具体的借口上去,此时过滤器就可以对捕捉到的请求作出适当的逻辑了。

一般如果用第三方的filter但是此filter又不是专门服务于spring开发环境,此时就不会被扫描到,因此需要加个@Configuration注解,有了此注解spring会在启动之初就去加载该filter这和以前在spring.xml中配置创建类是一样的效果,urls是指定要过滤那些请求,没有指定的则直接去访问不需要过滤器。

创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot

1.创建一个maven项目:

2.点击next后配置父项目及版本号

3.点击finish后就可查看pom.xml文件中已经有父级项目了。

好了,创建项目演示已经做完,现在粘贴整个各个组件的代码:说明在注释中

1.启动类:

package com.mr.li;

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.ServletListenerRegistrationBean;
/**
* 启动类:
* 1.@springBootApplication:表示此类是spring boot的启动类.
* 2.@ServletComponentScan:此注解的意思是在spring boot启动时,主动去扫描所有的Servlet类,filter类....
* @author Administrator
*
*/
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean; import com.mr.li.filter.MyFilter2;
import com.mr.li.listener.MyListener2;
import com.mr.li.servlet.MyServlet;
@SpringBootApplication
@ServletComponentScan
public class Application { public static void main(String[] args) {
//此方法是spring boot启动时必须调用的一个静态方法,第一个参数是启动类的模板,第二个参数就是main方法中的参数。
SpringApplication.run(Application.class, args);
} //方法名叫什么无所谓:在启动类中创建一个新的filter
@Bean
public ServletRegistrationBean getServletRegistrationBean() {
ServletRegistrationBean bean = new ServletRegistrationBean(new MyServlet(), "/hhhh");
return bean;
} //过滤器方式二:在启动类中创建一个新的filter对象,加载到spring容器中,然后但凡以他配置的过滤的后缀名结束的请求都会过滤掉,
@Bean
public FilterRegistrationBean getFilterRegistrationBean() {
FilterRegistrationBean bean = new FilterRegistrationBean(new MyFilter2());
bean.addUrlPatterns("/hhhh","/my");
return bean;
} //注册Listener监听器方式二:启动类中方法注册Listener类。
@Bean
public ServletListenerRegistrationBean<MyListener2> getListenerRegistrationBean(){
ServletListenerRegistrationBean<MyListener2> bean = new ServletListenerRegistrationBean<MyListener2>(new MyListener2());
return bean;
}
}

2.整合servlet

package com.mr.li.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* spring boot整合Servlet:
* 在spring boot中演示:正常的web项目下的Servlet编写方式。现在在spring boot中编写是当前这种方式的,简化了非常多。
* 其中
* 1.@WebServlet注解中my和/my相当于以前web.xml中配置的servlet标签和servlet-mapping标签的所有内容。
相当于web.xml中的:
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>com.mr.li.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
*/
@WebServlet(name = "my", urlPatterns = "/my")
public class MyServlet extends HttpServlet{ private static final long serialVersionUID = 8908779617494799833L; @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("访问到MyServlet");
// resp.setCharacterEncoding("UTF-8");
resp.getWriter().write("你好,世界");
} }

3.整合filter方式一:

package com.mr.li.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方式一:
* 编写Filter,是Servlet的拦截器,指定某个请求到达此请求(一般是servlet)之前就将一些条件过滤掉
* 相当于web.xml中的:
* <filter>
* <filter-name>MyFilter</filter-name>
* <filter-class>com.mr.li.filter.MyFilter</filter-class>
* </filter>
* <filter-mapping>
* <filter-name>MyFilter</filter-name>
* <url-parrern>/my</url-parrern>
* </filter-mapping>
* 本filter的名字叫:MyFilter
* 拦截:/my 结尾的请求
* @author Administrator
*
*/
@WebFilter(filterName = "MyFilter", urlPatterns = {"/my"})
public class MyFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter初始化了");
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("进入:MyFilter");
chain.doFilter(request, response);//放行
System.out.println("离开:MyFilter");
} @Override
public void destroy() {
System.out.println("filter销毁了");
} }

4.整合filter方式2:方法注册,注册方法在启动类中,这里只提供对象

package com.mr.li.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;
/**
* spring boot整合filter方式二:在启动类中调用
*/
public class MyFilter2 implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter222初始化了");
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("进入:MyFilter222");
chain.doFilter(request, response);//放行
System.out.println("离开:MyFilter222");
} @Override
public void destroy() {
System.out.println("filter销毁了");
} }

5.整合Listener方式一:

package com.mr.li.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; /**
* spring boot整合Listener监听器方式一:配置监听器,主要看针对哪个去配置监听器,这里配置的监听器主要是针对Servlet配置的监听器。
* 此配置相当于web.xml中:
*<listener-calss>com.mr.li.listener.MyListener</listener-calss>
*/
@WebListener
public class MyListener implements ServletContextListener { @Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Listener监听器开始工作了。。。init。。。。。");
} @Override
public void contextDestroyed(ServletContextEvent sce) { } }

6.整合Listener方式二:整合方法在启动类中,这里只提供对象

package com.mr.li.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; /**
* spring boot整合Listener监听器方式二:通过在启动类中的方法注册Listener监听器。
* 此配置相当于web.xml中:
*<listener-calss>com.mr.li.listener.MyListener</listener-calss>
*/
public class MyListener2 implements ServletContextListener { @Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Listener2222监听器开始工作了。。。init。。。。。");
} @Override
public void contextDestroyed(ServletContextEvent sce) { } }

7.controller

package com.mr.li.controller;

import java.util.HashMap;
import java.util.Map; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 单独演示Controller
*
*/
@Controller
public class HelloWorld { @RequestMapping("/show")
@ResponseBody
public Map<String, Object> show(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("hello", "world");
return map;
}
}

8.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- spring boot项目需要继承父项目,现为2.1.4版本的父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.mr.li</groupId>
<artifactId>springboot_001</artifactId>
<version>0.0.1-SNAPSHOT</version> <!-- 修改jdk版本 -->
<properties>
<java.version>1.7</java.version>
</properties>
<!-- 添加启动器:spring boot启动器中包含各个项目所需要的jar包,总共有44个启动器,例如web,jdbc,redis...想要使用哪个技术
就要添加哪个启动器。启动器是各个技术的组件,想用哪个技术就将哪个技术的启动器加入进来,这样此服务器就会拥有哪个技术的组件 -->
<dependencies>
<dependency>
<!-- web启动器:此启动器中包含:tomcat + spring mvc的所有jar包,所以如果做web项目就必须有此启动器 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

具体的项目结构如下:

*如果jdk不对就项目右键 -> maven -> updata Project... 一下

*访问的url:http: //localhost:8080/my  这里是访问的servlet , controller一样可以访问,将my换为show即可

spring boot整合servlet、filter、Listener等组件方式的更多相关文章

  1. Spring Boot整合Servlet,Filter,Listener,访问静态资源

    目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...

  2. spring boot 2.x 系列 —— spring boot 整合 servlet 3.0

    文章目录 一.说明 1.1 项目结构说明 1.2 项目依赖 二.采用spring 注册方式整合 servlet 2.1 新建过滤器.监听器和servlet 2.2 注册过滤器.监听器和servlet ...

  3. Spring Boot 整合Servlet

    冷知识,几乎用不到 在spring boot中使用Servlet有两种实现方法: 方法一: 正常创建servlet,然后只用注解@ServletComponentScan package clc.us ...

  4. Spring Boot整合Servlet、Filter、Listener

    整合 Servlet   方式一:   编写 servlet package com.bjsxt.controller; import javax.servlet.ServletException; ...

  5. SpringBoot整合WEB开发--(九)整合Servlet,Filter,Listener

    简介: 如果需要整合第三方框架时,可能还是不得不使用Servlet,Filter,Listener,Springboot中也有提供支持. @WebServlet("/my") pu ...

  6. 【Spring Boot学习之三】Spring Boot整合数据源

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...

  7. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  8. Spring Boot 整合 Web 开发

    这一节我们主要学习如何整合 Web 相关技术: Servlet Filter Listener 访问静态资源 文件上传 文件下载 Web三大基本组件分别是:Servlet,Listener,Filte ...

  9. Spring Boot 注册 Servlet 的三种方法,真是太有用了!

    本文栈长教你如何在 Spring Boot 注册 Servlet.Filter.Listener. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spr ...

随机推荐

  1. spark submit参数及调优

    park submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数.   使用格式:  ./bin/spark-submit \   ...

  2. js FileReader 笔记

    以上传图片为例 通过input type='file' 上传完成图片后,获取图片 $('#input').files[0] var reader = new FileReader();    read ...

  3. 通过awk 和 sed 将多余的列剔除

    通过awk 和 sed 将多余的列剔除 名词注释: awk -F 指定分隔符 OFS 指定输出分隔符 sed sed "s/|/test/2" a.log 将第二个 | 线替换为 ...

  4. SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset

    SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...

  5. XML使用与总结

    xml是一种比较方便的数据储存方式,它适用于小数据的存储.最常见的适用地方莫过于各种web.config与app.config了.   一.创建一个简单的xml路径 public static str ...

  6. 解决AS gradle下载同步卡慢的问题

    国内因为GFW的原因,导致同步谷歌等服务器的插件源非常非常慢,几乎是龟爬,还好有阿里云的镜像源,据说速度很快,还不快试试: 1.build.gradle里的buildscript和allproject ...

  7. DBEntityEntry类

    DBEntityEntry是一个重要的类,可用于检索有关实体的各种信息.您可以使用DBContext的Entry方法获取特定实体的DBEntityEntry实例. DBEntityEntry允许您访问 ...

  8. 山寨版 WP8.1 Cortana 启动 PC

    8.1 dev preview 发布以来 Cortana 很受关注 前一段看到有视频演示用 Cortana 来启动 PC 看视频也是启动第三方应用实现的,简单来弄其实就是个语音启动应用 + 网络唤醒么 ...

  9. 次小生成树(POJ1679/CDOJ1959)

    POJ1679 首先求出最小生成树,记录权值之和为MinST.然后枚举添加边(u,v),加上后必形成一个环,找到环上非(u,v)边的权值最大的边,把它删除,计算当前生成树的权值之和,取所有枚举加边后生 ...

  10. Linux centos7安装python3并且不影响python2

    一.安装依赖 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel opens ...