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应用程序,具有独立于平台 ...
随机推荐
- 区分重载(overload),覆盖(Override)和隐藏(hide)
重载overload,这个概念是大家熟知的.在同一可访问区内被声名的几个具有不同参数列的(参数的类型.个数.顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制就是重载.重载不关 ...
- C#往SQLServer中插入大数据
以前插入大数据的时候都是一条一条的插入,由于电脑配置不行,有一次17万条数据用了半个小时才插入完成,那个蛋疼啊! 前面听杨中科老师的课,发现一个很好的东西,25万条数据配置好的电脑几秒钟就完成了,那是 ...
- webrtc 在MAC下和iOS下的编译
一:安装brew和git 1. mkdir /usr/local 2. curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo ...
- 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...
- (笔记)Linux下的静态库和动态库使用详解
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...
- EXP-00056遇到Oracle错误1455问题解决办法
简单描述一下问题:需要备份一下生产环境的数据库到测试环境,使用EXP命令备份数据库时出现错误 EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 E ...
- PHP获取MySql新增记录ID值的3种方法
From: http://www.jb51.net/article/51473.htm 这篇文章主要介绍了PHP获取MySql新增记录ID值的3种方法,一般使用PHP自带函数mysql_insert_ ...
- vue form表单绑定事件与方法
使用v-on绑定事件 <button @click="hello">Hello</button><br /> <button @click ...
- SOFA企业应用框架
前言 从业这么多年,接触过银行的应用,Apple的应用,eBay的应用和现在阿里的应用,虽然分属于不同的公司,使用了不同的架构,但有一个共同点就是都很复杂.导致复杂性的原因有很多,如果从架构的层面看, ...
- Hadoop学习笔记——安装Hadoop
sudo mv /home/common/下载/hadoop-2.7.2.tar.gz /usr/local sudo tar -xzvf hadoop-2.7.2.tar.gz sudo mv ha ...