- 浏览: 3547935 次
- 性别:
- 来自: 大连
博客专栏
-
使用Titanium Mo...
浏览量:38135
-
Cordova 3.x入门...
浏览量:607261
-
常用Java开源Libra...
浏览量:682256
-
搭建 CentOS 6 服...
浏览量:89318
-
Spring Boot 入...
浏览量:401805
-
基于Spring Secu...
浏览量:69685
-
MQTT入门
浏览量:91692
文章分类
最新评论
-
afateg:
阿里云的图是怎么画出来的?用什么工具?
各云服务平台的架构图 -
cbn_1992:
博主,采用jdbctoken也就是数据库形式之后,反复点击获取 ...
Spring Security OAuth2 Provider 之 数据库存储 -
ipodao:
写的很是清楚了,我找到一份中文协议:https://mcxia ...
MQTT入门(6)- 主题Topics -
Cavani_cc:
还行
MQTT入门(6)- 主题Topics -
fexiong:
博主,能否提供完整源码用于学习?邮箱:2199611997@q ...
TensorFlow 之 构建人物识别系统
用户认证授权、日志记录MDC、编码解码、UA检查、多端对应等都需要通过拦截请求来共通处理,这时就需要Filter、Listener、Interceptor。而把非Spring Boot项目转换成Spring Boot项目需要沿用以前的这些代码,所以有必要了解这几个东西的用法。
通常来说,用户通过浏览器发起Request进入服务器后侧处理顺序如下:
具体可以看看这里:http://rensanning.iteye.com/blog/2355214
大部分框架采用一个servlet分发请求到不同controller去处理,只有极个别场景会定义多个servlet来处理比较特殊需求。而Filter、Listener、Interceptor按需求一般来说都会是多个。
(1)Servlet 2.5采用web.xml定义Servlet、Filter、Listener
(2)Servlet 3.0开始不再需要web.xml,可以通过注解或Java代码定义Servlet/Filter等。
1)注解定义
2)动态注册
(3)Spring Boot也采用无web.xml,以Filter为例,添加方法如下:
1)通过@Component让Spring扫描到即可处理拦截处理所有请求
2)通过@Configuration + @Bean来管理未被扫描到的Filter
3)通过@Configuration + @Bean + FilterRegistrationBean更灵活的设置Filter
4)通过@ServletComponentScan自动扫描@WebServlet, @WebFilter, @WebListener
SpringBoot默认已经为应用添加了以下Servlet/Filter
定义Interceptor
通常来说,用户通过浏览器发起Request进入服务器后侧处理顺序如下:
引用
Client -> Listener -> ServletContainer -> Filter -> Servlet -> Interceptor
具体可以看看这里:http://rensanning.iteye.com/blog/2355214
大部分框架采用一个servlet分发请求到不同controller去处理,只有极个别场景会定义多个servlet来处理比较特殊需求。而Filter、Listener、Interceptor按需求一般来说都会是多个。
(1)Servlet 2.5采用web.xml定义Servlet、Filter、Listener
<web-app ...> <servlet> <servlet-name>spring</servlet-name> <servlet-class>com.rensanning.springtest.HelloWorldServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <url-pattern>/*</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>com.rensanning.springtest.TestServletContextListener</listener-class> </listener> </web-app>
(2)Servlet 3.0开始不再需要web.xml,可以通过注解或Java代码定义Servlet/Filter等。
1)注解定义
@WebServlet(name="HelloWorldServlet",urlPatterns={"/HelloWorld"}, initParams={@WebInitParam(name="name",value="rensanning")}) public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("Hello " + getInitParameter("name")); } }
@WebFilter(filterName="HelloWorldFilter", urlPatterns="/HelloWorld") public class HelloWorldFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void destroy() {} }
引用
Servlet规范不支持注解Filter的执行顺序,仍需在 web.xml 中定义,web.xml中定义的<filter-mapping>的顺序就是他们的执行顺序。
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
@WebListener public class TestServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent event) { } @Override public void contextInitialized(ServletContextEvent event) { } }
2)动态注册
public class WebInitializer implements WebApplicationInitializer { public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException { // Servlet ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); dispatcher.addMapping("/"); dispatcher.setLoadOnStartup(1); dispatcher.setInitParameter("defaultHtmlEscape", "true"); // Filter FilterRegistration.Dynamic filter = container.addFilter("encodingFilter", CharacterEncodingFilter.class); filter.addMappingForUrlPatterns(null, false, "/*"); filter.setInitParameter("encoding", "UTF-8"); filter.setInitParameter("forceEncoding", "true"); // Listener servletContext.addListener(TestServletContextListener.class); } }
(3)Spring Boot也采用无web.xml,以Filter为例,添加方法如下:
1)通过@Component让Spring扫描到即可处理拦截处理所有请求
@Component public class TestFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
2)通过@Configuration + @Bean来管理未被扫描到的Filter
public class MultipleFilter1 implements Filter { } public class MultipleFilter2 implements Filter { } @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public Filter filter1() { return new MultipleFilter1(); } @Bean public Filter filter2() { return new MultipleFilter2(); } }
3)通过@Configuration + @Bean + FilterRegistrationBean更灵活的设置Filter
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public FilterRegistrationBean filter1() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new MultipleFilter1()); bean.setOrder(2); return bean; } @Bean public FilterRegistrationBean filter2() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new MultipleFilter2()); bean.setOrder(1); return bean; } }
4)通过@ServletComponentScan自动扫描@WebServlet, @WebFilter, @WebListener
@SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
SpringBoot默认已经为应用添加了以下Servlet/Filter
引用
o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
定义Interceptor
public class TraceLoggingInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { } } @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { // <mvc:interceptors> registry.addInterceptor(traceLoggingInterceptor()) .addPathPatterns("/**/*.do") .addPathPatterns("/**/*.json"); } }
发表评论
-
Spring Boot 入门 - 进阶篇(8)- 应用监控(Actuator)
2017-03-16 14:57 17572作为Spring Boot的另外一大亮点,就是actuator ... -
Spring Boot 入门 - 进阶篇(7)- 自动配置(AutoConfigure)
2017-03-16 11:05 62260自动配置是Spring Boot的最大亮点,完美的展示了CoC ... -
Spring Boot 入门 - 进阶篇(6)- 启动加载(CommandLineRunner)
2017-03-15 15:04 15090启动成功后可以通过以下方法运行自己的初始代码: @PostCo ... -
Spring Boot 入门 - 进阶篇(5)- 数据缓存(@Cacheable)
2017-03-14 16:28 34670缓存可以缓解数据库访 ... -
Spring Boot 入门 - 进阶篇(4)- REST访问(RestTemplate)
2017-03-14 11:07 45283经常需要发送一个GET/POST请求到其他系统(REST AP ... -
Spring Boot 入门 - 进阶篇(3)- 定时任务(@Scheduled)
2017-03-13 13:23 23752主要用于定时发送邮件、夜间自动维护等。 (1)开启定时任务功 ... -
Spring Boot 入门 - 进阶篇(2)- 异步调用(@Async)
2017-03-07 15:59 20085异步处理 Java的异步处理Thread/Runnable、 ... -
Spring Boot 入门 - 基础篇(15)- 工程部署
2017-02-16 15:31 9052(1)开发阶段 一般开发过程: 1)-写代码 2)- [Ru ... -
Spring Boot 入门 - 基础篇(14)- 参数设置
2017-02-16 15:25 5734(1)读取优先顺序 a - 命令行参数 --key=val ... -
Spring Boot 入门 - 基础篇(13)- 异常处理
2017-02-16 10:23 8670先要了解Spring的异常处理:http://rensanni ... -
Spring Boot 入门 - 基础篇(12)- 数据校验
2017-02-16 09:53 19919除过在客户端做JavaScript数据校验外,服务器端做数据校 ... -
Spring Boot 入门 - 基础篇(11)- 数据源配置
2017-02-15 11:12 16399(1)单一数据源 默认Spring Boot会在classp ... -
Spring Boot 入门 - 基础篇(10)- 发送邮件
2017-02-14 10:04 2484(1)配置 pom.xml <dependency> ... -
Spring Boot 入门 - 基础篇(9)- 文件上传下载
2017-02-14 10:01 15888(1)单文件上传 Form方式 <form id=&qu ... -
Spring Boot 入门 - 基础篇(8)- 数据库操作
2017-02-10 16:17 8673(1)导入mybatis-spring-boot-starte ... -
Spring Boot 入门 - 基础篇(7)- 国际化
2017-02-10 13:58 13143Spring Boot默认支持国际化配置,只需要添加配置文件即 ... -
Spring Boot 入门 - 基础篇(6)- 页面模板
2017-02-09 15:00 6467Spring Boot支持很多模板引擎,但嵌入式容器JSP有限 ... -
Spring Boot 入门 - 基础篇(5)- 使用WebJars
2017-02-09 14:20 11747WebJars能使Maven的依赖管理支持OSS的JavaSc ... -
Spring Boot 入门 - 基础篇(4)- 静态资源
2017-02-09 13:10 10700静态资源包括:HTML、CSS、JS、图像、视频、PDF/Of ... -
Spring Boot 入门 - 基础篇(3)- 日志管理
2017-02-09 09:39 8482Spring Boot支持JUL,Log4J2和Logback ...
相关推荐
Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法 标题:Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法 描述:Spring Boot 中如何定义过滤器、监听器和拦截器,对 Spring Boot ...
- **WebApplicationInitializer**:Spring Boot自动配置Servlet、Filter和Listener,无需传统web.xml配置。 - **DispatcherServlet**:Spring Boot会默认创建一个DispatcherServlet,处理所有HTTP请求。 - **...
4. 过滤器(Filter):在Spring Boot应用中,过滤器用于在请求处理前和处理后进行预处理和后处理。你可以自定义过滤器实现诸如GZIP压缩、日志记录、字符集转换等功能,过滤器按照注册顺序依次执行。 5. 拦截器...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
"springboot-web"这个项目显然关注的是SpringBoot与Web相关的集成技术,包括Servlet、Filter、Listener以及Interceptor。这些组件是构建高效、可扩展的Web应用不可或缺的部分。现在,我们将深入探讨这些知识点。 ...
在本文档中,我们将深入探讨Spring Boot如何使用注解来管理和配置Controller、Servlet、Filter、Listener以及Interceptor。 首先,让我们关注Spring Boot中的Controller加载。在Spring Boot应用中,`@SpringBoot...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
4. Filter(过滤器):过滤器是Servlet规范的一部分,Spring Boot 也支持。它们在请求被处理前和处理后执行,可用于修改请求或响应,例如实现URL编码、登录验证等功能。 5. Event(事件)与 ...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
- **Java Web进阶**:介绍Filter、Listener的使用,以及如何处理客户端请求和服务器响应。 ### Java EE技术栈 - **Java EE概述**:介绍Java EE平台的历史、核心组件和技术栈,包括EJB、JPA、JSF等。 - **Java EE...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
在Spring Boot框架中,过滤器(Filter)、拦截器(Interceptor)和监听器(Listener)是三个重要的组件,它们各自承担着不同的职责,用于扩展和增强应用程序的功能。下面将详细讲解这三个概念及其在实际开发中的应用...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
- **部署描述符(web.xml)**:配置Servlet,Filter,Listener,会话超时等。 3. **Spring框架** - **依赖注入(DI)**:通过XML配置或注解实现组件间的依赖关系。 - **AOP(面向切面编程)**:切面、通知、切入...
- Filter与Listener:掌握过滤器和监听器的配置及应用场景。 - Session与Cookie:理解会话管理和客户端持久化数据的方式。 - JDBC与数据库连接池:了解JDBC操作数据库的基本步骤,以及Druid、HikariCP等连接池的...
- **过滤器与监听器**:学习如何使用Filter和Listener来增强Web应用程序的功能。 3. **框架部分**: - **Spring框架**:理解依赖注入(DI)和面向切面编程(AOP),学习使用Spring管理Bean。 - **Spring MVC**:...