SpringBoot之自定义Servlet

来源:互联网 发布:嵌套fragment数据交互 编辑:程序博客网 时间:2024/04/30 08:22

生产中我们有时候需要自定义servlet比如,对一些特定的资源路径进来的请求,做一些特殊处理,本文,介绍两种自定义的方法。

目录

  • @WebServlet 注解方式
  • 注册ServletRegistrationBean

1.@WebServlet 注解方式

使用该方式注意一点,就是要与 @ServletComponentScan 配合使用

@WebServlet(urlPatterns = "/api", description = "api进来的通过该servlet")public class ApiGateWayServlet extends HttpServlet {    private ApplicationContext applicationContext;    private ApiGateWayHandler apiGateWayHandler;    @Override    public void init() throws ServletException {        super.init();        applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());        apiGateWayHandler = applicationContext.getBean(ApiGateWayHandler.class);    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        apiGateWayHandler.handle(req,resp);    }}

在启动类,添加ServeltComponentScan

@ServletComponentScan@SpringBootApplicationpublic class SpringBootSampleApplication {    public static void main(String[] args) {        ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootSampleApplication.class, args);        SpringContextUtils.setApplicationContext(configurableApplicationContext);    }}

2. 注册ServletRegistrationBean

@SpringBootApplicationpublic class SpringBootSampleApplication {    @Bean    public ServletRegistrationBean servletRegistrationBean() {        return new ServletRegistrationBean(new ApiGateWayServlet(), "/*");    }    public static void main(String[] args) {        ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootSampleApplication.class, args);        SpringContextUtils.setApplicationContext(configurableApplicationContext);    }}

3.check是否配置成功

2017-09-19 10:44:28.313  INFO 6761 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'apiGateWayServlet' to [/*]2017-09-19 10:44:28.315  INFO 6761 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]