`
wx1569020408
  • 浏览: 26877 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Spring Boot 监听器 过滤器 Servlet 实例

 
阅读更多

Listener Filter Servlet的执行顺序通常为: 监听器、过滤器、servlet


@RestController中的主Servlet都是DispatcherServlet,其默认的url-pattern为“/”。也可以自己添加Servlet,有2种方式:1)代码实现方式; 2)注解方式

代码实现方式: 通过ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean实现

实例:

package com.test.conf;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.test.servlet.TestServletByCode;

@Configuration
public class ServletRegistrationConf {
@Autowired
private TestServletByCode testServletByCode;
@Bean
    public ServletRegistrationBean servletRegistrationBean() {
        return new ServletRegistrationBean(testServletByCode, "/ts/testCodeServlet");
    }
}

package com.test.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Service;

@Service
public class TestServletByCode extends HttpServlet{
private static final long serialVersionUID = -8685285401859800066L;


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet====");
        doPost(req, resp);
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost===");
    }
}

注解方式: 在 SpringBootApplication 上使用@ServletComponentScan 注解,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册

实例:

package com.test;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;


@SpringBootApplication
@ServletComponentScan
public class MainApplication implements CommandLineRunner {

public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
System.out.println("spring boot running........");
}
}

package com.test.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;


@WebListener
public class TestServletContextListener implements ServletContextListener{
@Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContex初始化");
        System.out.println(sce.getServletContext().getServerInfo());
    }


    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContex销毁");
    }
}

package com.test.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;

@WebFilter(urlPatterns="/*",filterName="testFilter")
public class TestFilterByAnnotation implements Filter {
@Override
    public void destroy() {
        System.out.println("过滤器销毁");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("执行过滤操作");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        System.out.println("过滤器初始化");
    }
}

package com.test.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;


@WebServlet(urlPatterns="/ts/testWebServlet", description="Servlet的说明")
public class TestServletByAnnotation extends HttpServlet{

    private static final long serialVersionUID = -8685285401859800066L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet*******");
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost*********");
    }

}


注:@ServletComponentScan在1.3版以后才有,需添加对应版本,如:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>


转载于:https://my.oschina.net/superwind20/blog/1524139

分享到:
评论

相关推荐

    Spring Boot的listener(监听器)简单使用实例详解

    "Spring Boot的listener(监听器)简单使用实例详解" 在Spring Boot中,listener(监听器)是一种非常重要的组件,它可以帮助我们在应用程序启动和停止时执行一些特定的任务。今天,我们将详细介绍Spring Boot的...

    使用servlet实例

    继续深入学习,你还可以了解Servlet的过滤器、监听器、会话管理以及MVC框架如Spring MVC中的Servlet应用等高级主题。在实际开发中,Servlet常与JSP、JSF、Struts、Spring Boot等技术结合,构建出强大的企业级Web应用...

    SpringBoot之配置嵌入式Servlet容器.pdf

    例如,要注册一个Servlet组件,首先需要编写一个继承自HttpServlet的Servlet实现类,然后创建一个ServletRegistrationBean的Bean,将Servlet实例包装后添加到Spring Boot的Bean容器中,并且可以设置Servlet的加载...

    Spring Boot启动流程断点过程解析

    Spring Boot底层的自动化都是由这些SPI实现类来实现的,包括初始化、监听器、自动配置导入监听器、自动配置导入过滤器、自动配置、失败分析器、可用模板提供者等。 6. 获取main方式 Spring Boot找到main方式的...

    spring无web.xml零配置

    在早期的Java Web应用中,`web.xml`是部署描述符,用于定义Servlet、过滤器、监听器等核心组件。然而,随着Spring的发展,特别是Spring 3.0引入的Java配置特性,我们可以通过编写Java类来完成这些配置,使得配置过程...

    Java Servlet开发与实例

    Java Servlet是Java平台上的一个核心技术,用于构建动态web应用程序。Servlet是一种服务器端的Java小程序,它可以接收并响应...同时,关注最新技术趋势,如Spring Boot和微服务架构,这些都将扩展Servlet的使用场景。

    spring session实现session共享

    4. **Filter**: 为了实现Session共享,Spring Session 使用一个自定义的Servlet过滤器(`DelegatingSessionFilter`),这个过滤器负责拦截HTTP请求,处理Session相关操作。 5. **Spring Boot集成**: 如果使用Spring...

    JavaServlet帮助文档

    六、Servlet的过滤器Filter Servlet API还提供了Filter接口,允许在请求到达Servlet之前对其进行预处理,或者在响应返回给客户端之后进行后处理。Filter可以实现URL级别的拦截、登录检查等功能。 七、...

    深入JAVA Servlet网络编程

    2. **Servlet容器**:如Tomcat、Jetty等,它们负责管理Servlet的生命周期,加载Servlet类,创建Servlet实例,并调用其方法来处理请求和响应。 3. **Servlet API**:主要包括`javax.servlet`和`javax.servlet.http`...

    servlet

    5. **多线程模型**:Servlet默认是线程安全的,因为服务器会为每个请求创建一个新的线程,所以开发者需要注意并发问题,避免在Servlet实例中使用静态变量存储请求相关数据。 6. **过滤器(Filter)**:Servlet API...

    Spring5.x官网jar文件

    6. **spring-web**: 为Web应用程序提供了基础支持,包括HTTP多部分解析、Servlet监听器、过滤器等。 7. **spring-webmvc**: 也称为Spring MVC,是Spring中的Web应用模型-视图-控制器实现,提供了一种组织和处理HTTP...

    BootCloud-master.zip

    Spring Cloud是基于Spring Boot实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的...

    34个经典javaweb项目实例.zip

    这些在web.xml中配置,实例中可能涉及登录验证、字符编码转换等过滤器。 8. **文件上传与下载**:JavaWeb可以处理文件上传和下载,使用Servlet API或者第三方库如Apache Commons FileUpload。实例中可能包含文件...

    Java Servlet编程指南

    - 每个Servlet实例通常对应多个线程,服务器接收到请求后,会在一个已存在的Servlet实例上创建新线程来处理请求,提高并发性能。 - 注意线程安全问题,避免在Servlet中使用非线程安全的全局变量。 5. **Servlet...

    spring学习需要的常用jar包

    6. **spring-web.jar**:提供了与Web相关的功能,如Servlet监听器、过滤器,以及HTTP客户端支持。 7. **spring-webmvc.jar**:Spring MVC是Spring Web模块的一部分,是一个模型-视图-控制器框架,用于构建Web应用...

    jsp-api.jar和servlet-api.jar

    6. **过滤器和监听器** - Servlet API中还包括Filter和Listener接口,它们能增强应用的功能,比如实现登录验证、字符编码转换、会话管理等。 7. **Web容器** - 如Tomcat、Jetty等,它们提供运行Servlet和JSP的环境...

    内嵌tomcat实例代码.rar

    `WEB-INF/web.xml`是传统的部署描述符,定义了Servlet、过滤器和监听器等组件及其配置。 6. **Servlet与JSP**: Servlet是Java编写的服务器端组件,处理HTTP请求并生成响应。JSP(JavaServer Pages)是一种视图技术...

    springboot+mybatis+mysql+jsp+bootstrap+web.xml例子

    虽然Spring Boot推荐使用注解驱动的配置,但在这个例子中,可能还涉及到一些传统Web应用的配置,比如Servlet容器的配置、过滤器或者监听器的设置,因此保留了`web.xml`。 这个项目作为一个综合实例,演示了如何将...

    HTTP1.1 服务器端及servlet引擎 java实现

    如果需要更复杂的功能,如session管理、过滤器等,就需要使用Servlet容器。 在实际项目中,我们通常不会从零开始编写整个HTTP服务器和Servlet引擎,而是选择已有的成熟框架,如Spring Boot,它提供了内置的Tomcat...

Global site tag (gtag.js) - Google Analytics