SpringBoot(四)-- 整合Servlet、Filter、Listener
SpringBoot中有两种方式可以添加 Servlet、Filter、Listener。
1.代码注册
通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。
新建WebConfig 类,用于bean的注入,内容如下:
- package com.xsjt.config;
- import java.util.ArrayList;
- import java.util.EventListener;
- import java.util.List;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
- import org.springframework.boot.web.servlet.ServletRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import com.xsjt.filter.XbqFilter;
- import com.xsjt.listener.XbqListener;
- import com.xsjt.servlet.XbqServlet;
- /**
- * ClassName:WebConfig
- * 通过 @bean 注入 servlet、filter、listener
- * Date: 2017年11月6日 下午6:10:30
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- @Configuration
- public class WebConfig {
- /**
- * servletRegistrationBean:(使用代码注册Servlet(不需要@ServletComponentScan注解)).
- * @author Joe
- * Date:2017年11月6日下午6:13:29
- *
- * @return
- */
- @Bean
- public ServletRegistrationBean servletRegistrationBean(){
- ServletRegistrationBean registrationBean = new ServletRegistrationBean();
- registrationBean.setServlet(new XbqServlet());
- List<String> urlMappings = new ArrayList<String>();
- // 访问,可以添加多个
- urlMappings.add("/xbq/servlet");
- registrationBean.setUrlMappings(urlMappings);
- registrationBean.setLoadOnStartup(1);
- return registrationBean;
- }
- /**
- * getDemoFilter:(使用代码注册拦截器).
- * @author Joe
- * Date:2017年11月6日下午6:17:31
- *
- * @return
- */
- @Bean
- public FilterRegistrationBean getDemoFilter(){
- XbqFilter demoFilter = new XbqFilter();
- FilterRegistrationBean registrationBean=new FilterRegistrationBean();
- registrationBean.setFilter(demoFilter);
- List<String> urlPatterns=new ArrayList<String>();
- urlPatterns.add("/*"); //拦截路径,可以添加多个
- registrationBean.setUrlPatterns(urlPatterns);
- registrationBean.setOrder(1);
- return registrationBean;
- }
- /**
- * getDemoListener:(使用代码 引用 监听器).
- * @author Joe
- * Date:2017年11月6日下午6:35:28
- *
- * @return
- */
- @Bean
- public ServletListenerRegistrationBean<EventListener> getDemoListener(){
- ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<>();
- registrationBean.setListener(new XbqListener());
- registrationBean.setOrder(1);
- return registrationBean;
- }
- }
其中,代码中 XbqServlet 、XbqFilter、XbqListener 代码如下:
- package com.xsjt.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * ClassName:XbqServlet
- * 通过 代码注册Servlet
- * Date: 2017年11月6日 下午5:13:10
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- public class XbqServlet extends HttpServlet{
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.setCharacterEncoding("UTF-8");
- resp.setContentType("text/html");
- PrintWriter out = resp.getWriter();
- out.println("<html>");
- out.println("<head>");
- out.println("<title>Hello World</title>");
- out.println("</head>");
- out.println("<body><center>");
- out.println("<h3>我是通过代码注册Servlet</h3>");
- out.println("</center></body>");
- out.println("</html>");
- }
- }
- package com.xsjt.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.http.HttpServletRequest;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * ClassName:JoeFilter
- * 自定义 Serlvlet 的过滤器
- * Date: 2017年11月6日 下午6:01:33
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- public class XbqFilter implements Filter {
- private static Logger logger = LoggerFactory.getLogger(XbqFilter.class);
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- logger.info("--xbq--初始化JoeFilter!");
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- HttpServletRequest req = (HttpServletRequest)request;
- logger.info(req.getRequestURL() + "---xbq---> doFilter ");
- chain.doFilter(request, response);
- }
- @Override
- public void destroy() {
- logger.info("--xbq--销毁JoeFilter!");
- }
- }
- package com.xsjt.listener;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * ClassName:JoeListener
- * Date: 2017年11月6日 下午6:28:29
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- public class XbqListener implements ServletContextListener{
- private static Logger logger = LoggerFactory.getLogger(XbqListener.class);
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- logger.info("--xbq-监听器-ServletContext 初始化");
- logger.info(sce.getServletContext().getServerInfo());
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- logger.info("--xbq-监听器-ServletContext 销毁");
- }
- }
2.通过注解自动注册
在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet(urlPatterns = "/test/*")、@WebFilter、@WebListener 注解自动注册,这些注解都是JDK的,无需其他代码。
1) Servlet
- package com.xsjt.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * ClassName:XbqServlet
- * 通过 @WebServlet 注解 整合Servlet
- * Date: 2017年11月6日 下午5:13:10
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- @WebServlet(urlPatterns = "/joe/*")
- public class JoeServlet extends HttpServlet{
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.setCharacterEncoding("UTF-8");
- resp.setContentType("text/html");
- PrintWriter out = resp.getWriter();
- out.println("<html>");
- out.println("<head>");
- out.println("<title>Hello World</title>");
- out.println("</head>");
- out.println("<body><center>");
- out.println("<h3>我是通过 @WebServlet 注解注册Servlet的</h3>");
- out.println("</center></body>");
- out.println("</html>");
- }
- }
2) Filter
- package com.xsjt.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;
- import javax.servlet.http.HttpServletRequest;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.core.annotation.Order;
- /**
- * ClassName:JoeFilter
- * 自定义 Filter
- * @Order注解表示执行过滤顺序,值越小,越先执行
- * Date: 2017年11月6日 下午6:01:33
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- @Order(1)
- @WebFilter(filterName = "joeFilter", urlPatterns = "/*")
- public class JoeFilter implements Filter {
- private static Logger logger = LoggerFactory.getLogger(JoeFilter.class);
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- logger.info("--joe--初始化JoeFilter!");
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- HttpServletRequest req = (HttpServletRequest)request;
- logger.info(req.getRequestURL() + "---joe---> doFilter");
- chain.doFilter(request, response);
- }
- @Override
- public void destroy() {
- logger.info("--joe--销毁JoeFilter!");
- }
- }
3) Listener
- package com.xsjt.listener;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import javax.servlet.annotation.WebListener;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * ClassName:JoeListener
- * Date: 2017年11月6日 下午6:28:29
- * @author Joe
- * @version
- * @since JDK 1.8
- */
- @WebListener
- public class JoeListener implements ServletContextListener{
- private static Logger logger = LoggerFactory.getLogger(JoeListener.class);
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- logger.info("--Joe-监听器-ServletContext 初始化");
- logger.info(sce.getServletContext().getServerInfo());
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- logger.info("--Joe-监听器-ServletContext 销毁");
- }
- }
3.源码下载
https://gitee.com/xbq168/spring-boot-learn
SpringBoot(四)-- 整合Servlet、Filter、Listener的更多相关文章
- SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式
在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ...
- SpringBoot整合WEB开发--(九)整合Servlet,Filter,Listener
简介: 如果需要整合第三方框架时,可能还是不得不使用Servlet,Filter,Listener,Springboot中也有提供支持. @WebServlet("/my") pu ...
- Spring Boot整合Servlet,Filter,Listener,访问静态资源
目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...
- ServletContextInitializer添加 servlet filter listener
ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference
- SpringBoot---注册Servlet,Filter,Listener
1.概述 1.1.当使用 内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener 注册到Servlet容器的方法: 1.1.1.直接注册Bean ...
- servlet filter listener interceptor 知识点
这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下: 概念 生命周期 使命 servlet ...
- springboot(3):整合Servlet,filter,listener
1.springboot整合Servlet(2种方式) 添加maven依赖:spring-boot-starter-web 1>通过注解扫描完成Servlet组件的注册(方式1) 步骤:需要3步 ...
- servlet/filter/listener/interceptor区别与联系
转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...
- 【转】servlet/filter/listener/interceptor区别与联系
原文:https://www.cnblogs.com/doit8791/p/4209442.html 一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台 ...
随机推荐
- 史上最全 Css Hack汇总
前言 每次要找个东西都得慢慢去翻自己收集的一些东西,每次都是那么花时间,再加上有时存放时间久远就忘了当时是存在哪了,为了方便查询及阅读,决定把一些Css Hack 收集起来... 1.区别不同浏览器, ...
- jQuery中ajax和post处理json的不同
近日在做门户的用户评论时,好长时间没有用jquery了正好用一下,没想到偷工用了post方法去处理ajax回调的json数据,死活取不到,后台就是有json返回了.不料这么小小一个问题挂了我好几个小时 ...
- Mac 系统上安装Lua和SubmlimeText 编译器
第一步:安装命令 curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 ma ...
- 3D Face Reconstruction
方法1 Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression http: ...
- 【转】【Html】Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)
1.Render函数 所以直接来到Render,本来也想跳过,发现后面的路由貌似跟它还有点关联.先来看看Render 1.1 官网一开始就看的挺懵的,不知道讲的是啥,动手试了一下,一开头讲的是Rend ...
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
- JUnit套件测试实例
“套件测试”是指捆绑了几个单元测试用例并运行起来.在JUnit中,@RunWith 和 @Suite 这两个注解是用来运行套件测试. 下面的例子演示这两个单元测试:JunitTest1 和 Junit ...
- (转)小议TCP的MSS(最大分段)以及MTU
[前言]漫漫51长假,没有好的去处,只能每日上网消遣,某日逛到NBO灌水,见一帖曰:无法通过2514路由器上MSN(出口为ADSL线路,通过PPPoE)吾心想,ADSL---PPPoE,那肯定就是MT ...
- A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap
List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...
- idea过期激活
1.进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用记事本编辑 2.将“ 0.0.0.0 account.jetbrains.com ”添加到h ...